1

次のスクリプトを必要に応じて変更しました (元は完全に解析可能な辞書/シソーラスで見つかり、samplebias によって書かれました [samplebias で、非常に便利です、ありがとう:)]):

import textwrap
from nltk.corpus import wordnet as wn

POS = {
    'v': 'verb', 'a': 'adjective', 's': 'satellite adjective', 
    'n': 'noun', 'r': 'adverb'}

def info(word, pos=None):
    for i, syn in enumerate(wn.synsets(word, pos)):
        syns = [n.replace('_', ' ') for n in syn.lemma_names]
        ants = [a for m in syn.lemmas for a in m.antonyms()]
        ind = ' '*12
        defn= textwrap.wrap(syn.definition, 64)
        print 'sense %d (%s)' % (i + 1, POS[syn.pos])
        n1=str('definition: ' + ('\n' + ind).join(defn))
        n2=str('  synonyms:', ', '.join(syns))
        if ants:
            n3=str('  antonyms:', ', '.join(a.name for a in ants))
        if syn.examples:
            n4=str('  examples: ' + ('\n' + ind).join(syn.examples))
        try:
            resp = ("From dictionary:\n%s\n%s\n%s\n%s") %(n1, n2, n3, n4)
        except:
            try:
                resp = ("From dictionary:\n%s\n%s\n%s") %(n1, n2, n3)
            except:
                try:
                    resp = ("From dictionary:\n%s\n%s") %(n1, n2)
                except:
                    resp = ("Data not available...")
        print
        return resp

ただし、try/except ブロックでラップされているだけなので、あまりうまく変更されていないことがわかります。しかし、私は一生、それを行うためのより良い方法を考えることはできません(まだ抽象的な方法でPythonを学んでいます)。ファイルに書き込まれるときに、各行の区切り文字として \n を含む変数にフォーマットする必要があります。どうすればこれをより良く行うことができ、リストがなくても起こっているように見えるアイデアはありますか?

--日の出の定義

辞書より:

定義: 日の最初の光

(「同義語:」、「夜明け、夜明け、朝、オーロラ、最初の光、夜明け、夜明け、夜明け、夜明け、日の出、日の出、鶏鳴き声」)

(「反意語:」、「日没」)

例: 私たちは夜明け前に起きて朝まで話しました


ありがとう!:)

4

1 に答える 1

0

行ごとに文字列を作成する代わりに、テキストを最初から出力変数に追加するだけです。

resp = 'From dictionary:\ndefinition: ' + ('\n' + ind).join(defn) +'\n'
resp += '  synonyms:' + ', '.join(syns) +'\n'
if ants:
    resp += '  antonyms:' + ', '.join(a.name for a in ants)) +'\n'
if syn.examples:
    resp += '  examples: ' + ('\n' + ind).join(syn.examples)) +'\n'
于 2012-04-27T11:44:50.250 に答える