2017-01-05 4 views
0

Прямо сейчас я использую метод like() из nltk. Но он работает не так, как ожидалось. См. Ниже код:Почему 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

В некоторых случаях я должен найти сходство фразы, а иногда и слова. например если в данных у меня есть слово <.. что-то ...> ** «Исключения» ** <.. что-то ..>, то с помощью данного слова: ** «исключение» ** в качестве входного сигнала, мне следует сказать мне да, его синоним присутствует в данном наборе данных, и это ** «Исключения» **. –

ответ

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.

Если мы расширим ваш пример дополнительными словами, чтобы дать похожие семантические окна для «красивого» и «красивого», мы получим результат, который вы ищете.

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

вы можете использовать предварительно подготовленные модели для сходства слов, такие как word2vec, используя пакет gensim с GoogleNews (см. Http://mccormickml.com/2016/04/12/googles-pretrained-word2vec- model-in-python /), вы можете просто вызвать 'most_similar()' https://radimrehurek.com/gensim/models/word2vec.html –

Смежные вопросы