Я пишу часть программного обеспечения Java, которое должно принять окончательное решение о сходстве двух документов, закодированных в UTF-8.
Скорее всего, эти два документа будут одинаковыми или немного отличаться друг от друга, потому что они имеют много общих функций, таких как дата, местоположение, создатель и т. Д., Но их текст определяет, действительно ли они являются.
Я ожидаю, что текст этих двух документов будет либо очень похожим, либо совсем не похожим, поэтому я могу быть довольно строгим в отношении порогового значения, установленного для сходства. Например, я мог бы сказать, что эти два документа похожи, только если у них есть 90% общих слов, но я хотел бы иметь что-то более надежное, которое бы работало для коротких и длинных текстов.
Подводя итог, я имею:
- два документа, либо очень похожих, либо совсем не похожих, но:
- более вероятно, что два документа похожи, чем нет
- документы могут быть как длинными (некоторые абзацы), так и короткими (несколько предложений)
Я экспериментировал с simmetrics , который имеет большой массив функций сопоставления строк, но меня больше всего интересует предложение о возможных алгоритмах для использования.
Возможные кандидаты:
- Левенштейн: его вывод более важен для коротких текстов
- коэффициент перекрытия: возможно, но хорошо ли он будет различать документы различной длины?
Кроме того, рассмотрение двух одинаковых текстов только в том случае, если они абсолютно одинаковы, не сработает, потому что я бы хотел, чтобы документы, отличающиеся только несколькими словами, прошли тест на сходство.