Ответ на ваш вопрос двоякий: (a) синтаксический и (b) смысловое сходство.
Синтаксическое сходство Вы уже обнаружили Shingling, поэтому я сосредоточусь на других аспектах. В последних подходах используются модели скрытых переменных для описания синтаксических моделей. Основная идея заключается в использовании условной вероятности: P (f | f_c), где f - это некоторая функция, а f_c - ее контекст. Простейшим примером таких моделей является марковская модель со словами как функции, а предыдущие слова - как контекст. Эти модели отвечают на вопрос: * какова вероятность слова ш _ п, учитывая, что слова w1 ... ж _ п-1 возникают перед ним в документе? Этот путь приведет вас к построению language models, тем самым оценивая подобие документа на основе perplexity. Для чисто синтаксических мер сходства можно рассматривать особенности дерева разбора вместо слов.
Семантическое сходство Это гораздо сложнее, конечно. Современное состояние в этом направлении подразумевает понимание семантики распределения. Distributional semantics, по сути, говорит, что «термины, которые встречаются в подобных контекстах над большими объемами данных, должны иметь одинаковые значения». Этот подход является интенсивным с точки зрения данных. Основная идея - построить векторы «контекстов», а затем измерить сходство этих векторов.
Сходство с измерительной документацией на основе естественного языка непросто, и ответ здесь не будет справедливым, поэтому я указываю вам this ACL paper, что, на мой взгляд, обеспечивает довольно хорошую картину.