2017-01-05 5 views
0

Im Moment verwende ich ähnliche() Methode von Nltk. Aber funktioniert nicht wie erwartet. Siehe unten Code:Warum gibt NLTK's Text.similar() None zurück?

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. 

Benutze ich falschen Ansatz? Oder gibt es noch andere? Bitte hilf mir.

+0

suchen Sie nur nach einer Ähnlichkeitsmetrik auf Wortbasis oder Satzebene? –

+0

In einigen Fällen muss ich Ähnlichkeit eines Satzes und manchmal für ein Wort finden. z.B. wenn in Daten, ich habe ein Wort <.. etwas ...> ** "Ausnahmen" ** <.. etwas ..>, dann durch ein gegebenes Wort: ** "Ausschluss" ** als Eingabe, Algo sollte mir sagen Ja, sein Synonym ist im gegebenen Datensatz vorhanden und das ist ** "Exceptions" **. –

Antwort

2

Die NLTK Klasse 'similar() Methode verwendet Distributional Similarity.

Die help() auf die Methode lautet:

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. 

Suche in the source code verwendet similar() eine Instanziierung der ContextIndex Klasse Wörter mit ähnlichen semantischen Fenster zu finden. Standardmäßig verwendet es ein +/- 1-Wort-Fenster.

Wenn wir Ihr Beispiel mit zusätzlichen Wörtern erweitern, um ähnliche semantische Fenster für "hübsch" und "schön" zu erhalten, erhalten wir das Ergebnis, nach dem Sie suchen.

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 

So scheint es, dass Sie mehr Kontext in Ihrem Text haben müssen, um aussagekräftige Ergebnisse zu geben.

+0

Nun, ich werde Rohdaten von Benutzereingaben haben. Es besteht also die Möglichkeit, dass bei gegebenen Eingaben weniger Kontext vorhanden ist. Können Sie mir einen anderen Ansatz als nltk vorschlagen? Kann ein beliebiges anderes Python-Paket sein. –

+0

möchten Sie möglicherweise vortrainierte Modelle für Wortähnlichkeit wie Word2Vec verwenden, indem Sie das Gensim-Paket mit GoogleNews verwenden (siehe http://mccormickml.com/2016/04/12/googles-pretrained-word2vec model-in-python /), dann können Sie einfach 'most_similar()' https://radimrehurek.com/gensim/models/word2vec.html aufrufen –

Verwandte Themen