Лучший способ ранжировать предложения на основе сходства из набора документов - PullRequest
0 голосов
/ 03 января 2012

Я хочу знать лучший способ ранжирования предложений на основе сходства из набора документов.
Например, скажем,
1. Есть 5 документов.
2. Каждый документ содержит много предложений.
3. Давайте возьмем Документ 1 в качестве основного, т. Е. Вывод будет содержать предложения из этого документа.
4. Вывод должен быть списком предложений, ранжированных таким образом, чтобы предложение с рангом FIRST было наиболее похожим предложением из всех5 документов, затем 2-й, затем 3-й ...

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 03 января 2012

Я расскажу об основах сопоставления текстовых документов ...

Большинство мер сходства документов работают на основе слов, а не на структуре предложений. Первым шагом обычно является stemming . Слова сводятся к своей корневой форме, так что разные формы похожих слов, например, «плавание» и «плавание» совпадают.

Кроме того, вы можете отфильтровать слова, которые вам подходят, чтобы избежать шума. В частности, вы можете игнорировать вхождения «» и «а». На самом деле, существует множество союзов и местоимений, которые вы можете пропустить, поэтому обычно у вас будет длинный список таких слов - это называется « stop list ».

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

Так что теперь вы можете считать подобные слова в документах. Вопрос заключается в том, как измерить общее сходство документов. Вам необходимо создать функцию оценки, которая принимает в качестве входных данных похожие слова и дает значение «сходство». Такая функция должна давать высокое значение, если одно и то же слово встречается в обоих документах несколько раз. Кроме того, такие совпадения взвешиваются по общей частоте слов, поэтому при совпадении необычных слов им присваивается больший статистический вес.

Apache Lucene - это поисковая система с открытым исходным кодом, написанная на Java, которая предоставляет практические сведения об этих шагах. Например, вот информация о том, как они оценивают сходство запросов:

http://lucene.apache.org/java/2_9_0/api/all/org/apache/lucene/search/Similarity.html

Lucene объединяет булеву модель (BM) поиска информации с Модель векторного пространства (ВСМ) информационного поиска - документы «Одобрено» BM, забил VSM.

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

Теперь, если не считать, что вас не интересуют настоящие существительные и глаголы в предложении, а только грамматическая композиция, вам нужен другой подход ...

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

0 голосов
/ 04 января 2012

Обзор Тима очень хороший. Я просто хотел бы добавить, что для вашего конкретного случая использования вы можете рассматривать предложения из документа 1 как сами документы и сравнивать их сходство с каждым из четырех оставшихся документов. Это может дать вам быструю совокупную меру сходства для каждого предложения, не заставляя вас идти по пути синтаксического анализа и т. Д.

0 голосов
/ 03 января 2012

В качестве отправной точки вы можете вычислить soundex для каждого слова, а затем сравнить документы на основе частот soundexes.

...