Алгоритмы расчета сходства многочисленных документов (например, книг Библии) - PullRequest
2 голосов
/ 15 ноября 2011

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

Было бы здоровоесли это можно сделать иерархически;стихи обрабатываются индивидуально, объединяются в главы, а затем, наконец, книги.Учитывая стих, было бы хорошо иметь возможность получить ранжированный список похожих стихов и т. Д. С главами и книгами.

Если бы система могла частично отдавать предпочтение подобным словам (ходить, ходить, ходить)это также было бы хорошо.

После завершения я хотел бы распространить это на любой набор документов.

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

Нечто подобное Расстояние Левенштейна или BK-Trees может быть полезным (для нечеткого сопоставления), но может показаться недостаточным для общего решения.Возможно, предварительная обработка слов через BK-Tree и использование результатов для добавления дополнительных ссылок в граф может помочь в достижении возможности нечеткого сопоставления.

1 Ответ

4 голосов
/ 15 ноября 2011

Сходство частот слов включает http://en.wikipedia.org/wiki/Cosine_similarity http://en.wikipedia.org/wiki/Jaccard_index (обратите внимание на ссылку http://en.wikipedia.org/wiki/MinHash - вы можете использовать это с фразами) http://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence не является симметричным.

Пока все, что вас интересует, это частота слов или фраз, вам нужны только счета, а с MinHash вам нужны только выбранные значения.Если вы знаете что-то о рассматриваемом языке, вы можете посмотреть похожие слова, сведя каждое слово к корню.Для английского языка вы, возможно, можете получить информацию о языке из чего-то вроде http://en.wikipedia.org/wiki/Wordnet#Other_languages. Не знаю о греческом иврите / Новом Завете.

Если у вас большие куски, дублированные между двумя документами, вы можете использовать суффиксные массивы- одна точка прыжка - http://algs4.cs.princeton.edu/63suffix/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...