Я бы начал здесь: http://en.wikipedia.org/wiki/Longest_common_substring_problem
Во внешних ссылках есть ссылки на дополнительную информацию, включая реализации Perl двух алгоритмов, описанных в статье.
Отредактировано, чтобы добавить:
Основываясь на обсуждении, я все еще думаю, что Longest Common Substring может быть в центре этой проблемы. Даже в примере журнала, на который вы ссылаетесь в комментарии, определяющей характеристикой этого набора является подстрока «Журнал».
Сначала я бы рассмотрел, что определяет набор отдельно от других наборов. Это дает вам ваш раздел для разделения данных, и тогда проблема заключается в том, чтобы измерить, насколько общность существует в наборе. Если определяющим признаком является общая подстрока, то логической отправной точкой будет Longest Common Substring.
Чтобы автоматизировать процесс обнаружения множества, в общем, вам понадобится парная мера общности, которую вы можете использовать для измерения «разницы» между всеми возможными парами. Затем вам понадобится алгоритм для вычисления раздела, который приведет к общей наименьшей общей разнице. Если мера разности не Longest Common Substring, это нормально, но тогда вам нужно определить, что это будет. Очевидно, это должно быть что-то конкретное, что вы можете измерить.
Помните также, что свойства вашего измерения различий будут зависеть от алгоритмов, которые можно использовать для создания раздела. Например, предположим, что diff (X, Y) дает меру разницы между X и Y. Тогда, вероятно, было бы полезно, если бы ваша мера расстояния была такой, что diff (A, C) <= diff (A, B) + diff (ДО НАШЕЙ ЭРЫ). И, очевидно, diff (A, C) должен быть таким же, как diff (C, A). </p>
Размышляя об этом, я также начинаю задаваться вопросом, можем ли мы представить себе «разницу» как расстояние между любыми двумя строками, и, при строгом определении расстояния, можем ли мы тогда попытаться сделать что-то вроде кластерный анализ на входных строках. Просто мысль.