Ваша проблема заключается в том, не простой. Две идеи:
Это решение может быть слишком сложным, но вы можете попробовать преобразование Фурье. Обращайтесь с текстом ввода как с серией образцов функции, а затем запустите преобразование Фурье, чтобы преобразовать ваш вход в частотную область. Низкочастотная часть - это общий смысл текста, а высокочастотная часть - крошечные изменения.
Это похоже на то, что делает jpeg compression: Бросьте детали и просто оставьте важные вещи. Если у вас есть два почти одинаковых изображения, и вы jpeg их очень сильно сжимаете, вы обычно получаете одинаковый результат.
pHash использует метод, подобный этому.
Опять же, это будет довольно сложный способ сделать это.
Вторая идея: minHash
Идея minHash является то, что вы выбираете некоторые маркеры, которые могут быть одинаковыми, если исходные данные одинаковы. Затем вы вычисляете вектор для выходов всех маркеров. Если два входа имеют одинаковые векторы, то входы аналогичны.
Например, подсчитайте, сколько раз в тексте появляется слово «the». Если это равно, 0, если это странно, 1. Теперь подсчитайте, сколько раз в тексте появляется слово «математика». Опять же, 0 для четного, 1 для нечетных. Сделайте это для многих слов.
Теперь вы обрабатываете все тексты, и каждый из них дает вам выход типа «011100010101» или что-то еще. Если два текста похожи, то они будут иметь аналогичные строки вывода, отличающиеся только 1 или двумя битами. Вы можете использовать multi-variate partition trie (MVP) для эффективного поиска выходных данных.
Это тоже может быть излишним для вашей проблемы.
Куда направили ваше исследование этого конкретного вопроса? – JRun