Поиск текста с помощью шинглов
Необходимо создать исходную базу данных (БД), содержащую фрагменты текста на русском языке (1 фрагмент - до 10-15 строк). Фрагменты хранятся в БД совместно с дополнительными служебными полями. (Как я понимаю Тупо одна таблица с двумя полями)
Программа, по ниже приведенному описанию алгоритма, должна сравнить фрагменты введенного в поле запроса текста (не слова а именно текста, предполагается 1-2 предложения) с текстами хранящимися в БД и выдать результаты сравнения.
Алгоритм:
Для каждого десятисловия текста рассчитывается контрольная сумма (шингл). Десятисловия идут внахлест, с перекрытием, так, чтобы ни одно не пропало. А затем из всего множества контрольных сумм (очевидно, что их столько же, сколько слов в документе минус 9) отбираются только те, которые делятся на, скажем, 25. Поскольку значения контрольных сумм распределены равномерно, критерий выборки никак не привязан к особенностям текста. Ясно, что повтор даже одного десятисловия – весомый признак дублирования, если же их много, скажем, больше половины, то с определенной (несложно оценить вероятность) уверенностью можно утверждать: копия найдена! Ведь один совпавший шингл в выборке соответствует примерно 25 совпавшим десятисловиям в полном тексте!
Нужно: Соответственно рабочую программку с удобным интерфейсом и наглядным предоставлением результатов поиска. (Возможность добавлять текст в БД, можно не из программы, ) исходный код и подробный алгоритм работы программы (не только алгоритма поиска, а полностью), можно от руки.
Среда разработки: Delphi
СУБД: не имеет значения