2017-05-25 14 views
0

wordnetから同義語を取得するコードを作成しました。各単語の同義語の完全なリストを提供しています。 したがって、私のコードは、文に基づいて同義語リストから適切な同義語を選択します。wordnetを使用している文章内の単語に最も近い同義語を取得

例: 文章は次のとおりです。「私は彼の兄です」と、この文に基づいて各単語の最良の同義語を見つけなければなりません。

「古い」を選択します。 Wordnetは、 "古い"の同義語のリストを与えるでしょう:

['elder'、 ' 「高齢者」、「高齢者」、「高齢者」、「高齢者」、「老人」、「いつか」、「正直から良」、「クンダダム」、「高齢者」、 ]

リストから、この文に基づく最も良い類義語は 'elder'なので、それを選択する必要があります。

どうすればいいですか?同義語を得るために

コード:のsynsetで

from nltk.tokenize import word_tokenize 
from nltk.tag import pos_tag 
from nltk.corpus import wordnet as wn 

def tag(sentence): 
words = word_tokenize(sentence) 
words = pos_tag(words) 
return words 

def paraphraseable(tag): 
return tag.startswith('NN') or tag == 'VB' or tag.startswith('JJ') 

def pos(tag): 
if tag.startswith('NN'): 
    return wn.NOUN 
elif tag.startswith('V'): 
    return wn.VERB 

def synonyms(word, tag): 
    lemma_lists = [ss.lemmas() for ss in wn.synsets(word, pos(tag))] 
    lemmas = [lemma.name() for lemma in sum(lemma_lists, [])] 
    return set(lemmas) 

def synonymIfExists(sentence): 
for (word, t) in tag(sentence): 
    if paraphraseable(t): 
    syns = synonyms(word, t) 
    if syns: 
    if len(syns) > 1: 
     yield [word, list(syns)] 
     continue 
    yield [word, []] 

def paraphrase(sentence): 
return [x for x in synonymIfExists(sentence)] 
get=[] 
get=paraphrase("I am his older brother") 
print("paraphrase",get) 
+0

なぜ「年長者」が最高ですか? (つまり、最高の判断基準は何ですか?これを決めるためにどのようなアルゴリズムを使用していますか?)(ちなみに、「兄」は「兄」の類義語ではありませんでした。それはあなたのリストにあります!) –

答えて

2

シノニムは、自然言語で、与えられた状況にかかわらず、それらの出現頻度のリストされています。 これらの不足している領域をもっと探求するために、私はバイグラム予測モデルに行き、synsetからどの単語を置き換えたいかの発話の左のコンテキストの隣に表示するかを確認します。同様に、同様に、および/またはより長い文脈。

もう1つ(より簡単な方法)は、十分に大きなコーパスからの単語頻度に基づいてWordNetに頻度順を導入することです。コーパスにおける出現の頻度は、同義語の知覚された適合性に対する正しいヒントであると仮定される。

関連する問題