0

2つの小さな辞書があると仮定します

posList=['興味深い','小説','創造的','最先端']

negList=['時代遅れ','単純明快','自明']

「革新的」という新しい単語がありますが、これは私の知識外であり、NLTK 関数を介してその同義語を見つけることでその感情を理解しようとしています。同義語が私の小さな辞書に落ちた場合、再帰的に NLTK を呼び出します前回から同義語の同義語を見つける関数

開始入力は次のようになります。

from nltk.corpus インポート wordnet 革新的な = wordnet.synsets('革新的')

革新的な Synset の場合:

print synset

print synset.lemmas

このような出力が生成されます

Synset('advanced.s.03') [Lemma('advanced.s.03.advanced'), Lemma('advanced.s.03.前向き'), Lemma('advanced.s.03.innovative' ), Lemma('advanced.s.03.modern')] Synset('innovative.s.02') [Lemma('innovative.s.02.innovative'), Lemma('innovative.s.02.innovational' ), Lemma('innovative.s.02.groundbreaking')]

明らかに新しい単語には、「advanced」、「forward-looking」、「modern」、「innovational」、「groundbreaking」などの新しい単語が含まれており、私の辞書にはありません。新しい見出し語は出現しません。Synset からこれらの補題単語を抽出し、それらをセット構造体に保持する方法のデモ コードを教えてください。

Pythonでreモジュールを扱う必要があると思いますが、私はPythonにはまったく慣れていません。私が対処する必要があるもう 1 つのポイントは、形容詞のみを取得する必要があることです。そのため、Lemma('advanced.s.03.modern') では 's' と 'a' 記号のみを使用し、'v' (動詞) や 'n ' (名詞)。

後で、新しい単語と任意の辞書単語の類似度スコアを計算しようとします。尺度を定義する必要があります。形容詞は階層的に配置されておらず、私の知る限り利用可能な手段がないため、この問題は困難です。誰でもアドバイスできますか?

4

1 に答える 1

0

シノニムのシノニムは、次のように取得できます。(WordNetへのアクセスが容易になるため、コードはNodeBox 言語ライブラリの WordNet 関数を使用していることに注意してください)。

def get_remote_synonyms(s, pos):

    if pos == 'a':
        syns = en.adjective.senses(s)
        if syns:
            allsyns = sum(syns, [])
            # if there are multiple senses, take only the most frequent two 
            if len(syns) >= 2:
                syns = syns[0] + syns[1]
            else:
                syns = syns[0]
        else:
            return [] 

        remote = []
        for syn in syns: 
            newsyns = en.adjective.senses(syn)
            remote.extend([r for r in newsyns[0] if r not in allsyns])

    return [unicode(i) for i in list(set(remote))]

私の知る限り、NLTK のすべての意味測定関数は上位語/下位語の階層に基づいているため、形容詞には適用できません。その上、WordNet の結果を thesaurus.com のようなシソーラスの結果と比較すると、WordNet には多くの同義語が欠けていることがわかりました

于 2013-02-25T13:50:38.890 に答える