Я делаю проект Java, где мне нужно сделать программу схожести текста. Я хочу, чтобы он взял 2 текстовых документа, затем сравнил их друг с другом и получил сходство. Насколько они похожи друг на друга.
Позже я поместлю уже базу данных, которая может найти синонимы для слов и пройти через текст, чтобы увидеть, как один из авторов текстовых документов просто изменил слова на другие синонимы, в то время как текст точно такой же. То же самое с движущимися параграфами вверх или вниз. Да, как это было в плагиате...
Я хочу услышать от вас людей, какие алгоритмы вы бы рекомендовали.
Я нашел сходство с Левенштейном и Косином, посмотрев здесь и в других местах. Оба они, кажется, упоминаются много. Расстояние Хэмминга - это еще один мой учитель.
У меня есть некоторые вопросы, связанные с ними, так как я не получаю Википедию. Может кто-нибудь объяснить мне эти вещи?
Levenstein. Этот алгоритм изменен на sub, добавляет и устраняет слово и видит, насколько близко он относится к другому слову в текстовом документе. Но как это можно использовать для всего текстового файла? Я могу видеть, как это можно использовать по слову, но не по предложению или целому текстовому документу от одного к другому.
Косинус. Он измеряет сходство между двумя векторами, измеряя косинус угла между ними. Что я не понимаю здесь, как два текста могут стать 2 векторами, а как насчет слов/предложений?
Хэмминг. Это расстояние кажется лучше, чем у Левенштейна, но оно только на равных строках. Как важно, когда два документа и даже предложения в них не являются двумя строками равной длины?
Википедия должна иметь смысл, но это не так. Мне жаль, если вопросы звучат слишком глупо, но это меня подвешивает, и я думаю, что здесь есть люди, которые вполне способны объяснить это, так что даже новоиспеченные в эту область могут получить его.
Спасибо за ваше время.