Python: оценка семантического сходства для строк [дубликат]

этот вопрос уже есть ответ здесь:

существуют ли библиотеки для вычисления оценок семантического сходства для пары предложений ?

Я знаю о семантической базе данных WordNet и о том, как я могу генерировать оценку для 2 слов, но я ищу для библиотек, которые выполняют все задачи предварительной обработки, такие как Port-stemming, stop word removal и т. д., Для целых предложений и выводят оценку того, насколько связаны эти два предложения.

Я нашел работа выполняется, что написано с помощью .NET framework, который вычисляет оценку, используя массив шагов предварительной обработки. Есть ли проект, который делает это в Python?

Я не ищу последовательность операций, которые помогли бы мне найти результат (как просили здесь)
Я хотел бы реализовать каждый этап самостоятельно или склеить функции из разных библиотек, чтобы он работал для пар предложений, но мне это нужно в основном как инструмент для проверки выводов по данным.


EDIT: я рассматривал возможность использования NLTK и вычисления оценки для каждой пары слов, повторенных над двумя предложениями, а затем сделать выводы из стандартного отклонения результатов, но я не знаю, является ли это законной оценкой сходства. Плюс, это займет много времени для длинных строк.
Опять же, я ищу проекты / библиотеки, которые уже реализуют это разумно. Что-то, что позволяет мне сделать это:

import amazing_semsim_package
str1='Birthday party ruined as cake explodes'
str2='Grandma mistakenly bakes cake using gunpowder'

>>similarity(str1,str2)
>>0.889

3 ответов


лучший пакет, который я видел для этого, - Gensim, найденный в Домашняя Страница Gensim. Я использовал его много раз, и в целом был очень доволен его простотой использования; он написан на Python и легко следовать учебник чтобы вы начали, который сравнивает 9 строк. Он может быть установлен через pip, поэтому у вас не будет много хлопот с его установкой, я надеюсь.

какой алгоритм подсчета очков вы используете, сильно зависит от контекста вашей проблемы, но я бы предложите начать с функциональности LSI, если вы хотите что-то основное. (Это то, что в учебнике.)

Если вы пройдете через учебник для gensim, он проведет вас через сравнение двух строк, используя функцию сходства. Это позволит вам увидеть, как ваши жала сравниваются друг с другом или с каким-то другим жалом, на основе текста, который они содержат.

Если вас интересует наука о том, как она работает, проверьте этот бумага.


к сожалению, я не могу помочь вам с PY, но вы можете взглянуть на мой старый проект, который использует словари для выполнения семантических сравнений между предложениями (которые позже могут быть закодированы в py, реализующем векторно-пространственный анализ). Это должно быть всего несколько часов кодирования для перевода с JAVA на PY. https://sourceforge.net/projects/semantics/


AFAIK самый мощный NLP-Lib для Python-это http://nltk.org/