2017-01-05 7 views
0

今、私はnltkからsimilar()メソッドを使用しています。 しかし、期待どおりに動作していません。以下のコードをご覧ください:なぜNLTKのText.similar()はNoneを返すのですか?

from nltk import word_tokenize; 
import nltk; 
text = """ 
The girl is very pretty. 
"""; 
text = nltk.Text(word_tokenize(text)); 
text.similar('beautiful'); #it returns "no matches" but pretty is synonym of beautiful. 

私は間違ったアプローチを使用していますか?または他に何かありますか?私を助けてください。

+0

あなたは、単語単位または文章レベルで類似度メトリックを探していますか? –

+0

場合によっては、フレーズの類似性を見つける必要があります。例えばデータ内にあれば、私は何か...>何か...> ** "例外" ** <..何か..>、そして与えられた言葉によって:** "除外" **入力として、algoは教えてくださいはい、その同義語は与えられたデータセットに存在し、それは** "例外" **です。 –

答えて

2

NLTK Textクラス 'similar()メソッドはDistributional Similarityを使用します。メソッドの状態にhelp()

similar(word, num=20) method of nltk.text.Text instance 
    Distributional similarity: find other words which appear in the 
    same contexts as the specified word; list most similar words first. 

in the source codeを見ると、similar()は同様の意味的な窓のある単語を見つけるためにContextIndexクラスのインスタンス化を使用しています。デフォルトでは、+/- 1ワードのウィンドウが使用されます。

"pretty"と "beautiful"に類似したセマンティックウィンドウを与えるために例文を追加すると、探している結果が得られます。

from nltk import word_tokenize 
import nltk 
text = "The girl is pretty isn't she? The girl is beautiful isn't she?" 
text = nltk.Text(word_tokenize(text)) 
text.similar('pretty') 
# prints beautiful 

意味のある結果を得るためには、テキストに文脈を増やす必要があるようです。

+0

まあ、私はユーザーの入力から生データを持っています。したがって、与えられた入力にコンテキストが少なくなる可能性があります。あなたはnltk以外の方法を提案することができますか?他のPythonパッケージでもかまいません。 –

+0

GoogleNewsでgensimパッケージを使用して、word2vecなどの単語の類似性に事前に基づいたモデルを使用したい場合があります(http://mccormickml.com/2016/04/12/googles-pretrained-word2vec- model-in-python /)、 'most_similar()'を呼び出すことができます。https://radimrehurek.com/gensim/models/word2vec.html –

関連する問題