2015-03-15 3 views
2

Мне нужно измерить сходство между двумя предложениями. Например:измерение семантической подобия 2 предложения

s1 = "she is good a dog " 
s2 = "she is nice a heel" 

мне нужно доказать, что "good" похож на "nice". Для существительных и глаголов меры сходства по пути работает как этот псевдо-код:

def get max : 
for loop 
(wn.synset ('dog ')).path_similarity(wn.synset ('animal')) 

Результат: .33, что высокое значение, то эти слова связаны, и я могу сказать, что это похоже. Но для наречий ("nice" и "good") значение .09 низкое!

Любые идеи?

+1

ли, что должен быть код ?! – jonrsharpe

+0

Я думаю, что ваш вопрос: «Почему хорошие и хорошие не признаются синонимами?». Возможно, вы могли бы перефразировать это так и показать нам реальный код python, который вы используете, что дает вам номер 0.09. –

+0

Проблема нахождения семантического сходства между двумя предложениями представляется сложнее, чем найти сходство между огромными документами. https://www.hindawi.com/journals/tswj/2014/437162/. – pmuntima

ответ

3

Вы можете найти path_similarity для всех synsets из good затем выбрать макс:

>>> from nltk.corpus import wordnet as wn 
>>> n=wn.synsets('nice') 
>>> g=wn.synsets('good') 
>>> [i.path_similarity(n[0]) for i in g] 
[0.0625, 0.06666666666666667, 0.07142857142857142, 0.09090909090909091, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None, None] 

>>> max(i.path_similarity(n[0]) for i in g) 
0.09090909090909091 

Обратите внимание, что synsets слова содержат много формы слова как глагол, никто, прил, ... поэтому вам нужно выбрать правильный!

Кроме того, как другой выбор вы можете использовать wup_similarity:

>>> round(max(i.wup_similarity(n[0]) for i in g), 1) 
0.4 

Wu-Palmer Сходство: Возвращает счет, обозначающее, как похожи два слова чувства, основываясь на глубине двух чувств в таксономия и их младшего общего подсектора (наиболее специфический узел предка).

Подробнее о Synsets http://www.nltk.org/howto/wordnet.html

+0

В wordnet 3.1, красивые # 1 и хорошие # 6 напрямую связаны с "аналогично". Учитывает ли это 'wup_similarity' это и оценивает значение 0.4, в то время как' path_similarity' не использует аналогичное отношение? http://wordnetweb.princeton.edu/perl/webwn?o2=1&o0=1&o8=1&o1=1&o7=1&o5=1&o9=&o6=1&o3=1&o4=1&s=nice&i=3&h=01000000000#c –

+0

К сожалению, сходство меры в API NLTK для wordnet предназначены для одиночных лексических элементов, а не для полного предложения = (Использование какой-либо комбинации для лексического сходства для формирования сходства предложений не является легкой задачей. – alvas

+0

@alvas Действительно, этот ответ даст приблизительный результат, основанный на сходстве слов. – Kasramvd

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

  • Нет связанных вопросов^_^