Итак, допустим, у меня есть следующие тексты:
Текст1:
абсолютное подчинение коллективному чувству зергов, известному как Сверхразум.Сверхразум направлял действия каждого существа зергов в Рое, действуя через иерархию меньших чувств.
Text2:
существо-зерг в Рое, функционирующее через иерархию меньших чувств.Хотя Сверхразум был в первую очередь движим своим желанием поглощать и ассимилировать
Текст 3
Когда зерги впервые прибыли в сектор Копрулу, они были объединены своим абсолютным послушаниемк коллективному чувству зергов, известному как Сверхразум.Сверхразум направлял действия каждого существа зергов в Рое, действуя через иерархию меньших чувств.Хотя Сверхразум был в первую очередь движим своим желанием поглощать и ассимилировать продвинутую расу протоссов, он нашел в человечестве полезный, но неразвитый материал.
Теперь, конец текста1 и начало текста2 совпадают, поэтомумы бы сказали, что текстовые блоки не являются уникальными.Точно так же с Text3, Text1 может быть найден внутри (так же как и Text2), так что это также не уникально из-за перекрытия.
Итак, мой вопрос:
Как мне поступитьписать что-то, что может смотреть на последовательные буквы или слова и определять уникальность?В идеале, я бы хотел, чтобы такой метод возвращал какое-то значение, представляющее степень сходства - возможно, количество совпавших слов в среднем по размеру двух текстовых блоков.Когда он возвращает 0, оба протестированных текста должны быть полностью уникальными.
С какой-то проблемой я столкнулся, когда играл с строковыми методами Руби.
Сначала я попытался найти пересечение двух строк.
>> a = "nt version, there are no ch"
>> b = "he current versi"
>> (a.chars.to_a & b.chars.to_a).join
=> "nt versihc"
проблемаПриведенный выше метод заключается в том, что он просто добавляет буквы, которые являются общими к концу результата (мы теряем порядок символов), что затрудняет проверку уникальности.Но я не думаю, что пересечение - лучший способ начать это сравнение подобия.В обоих сравниваемых текстах может присутствовать любое количество комбинаций слов.Так что, может быть, если бы я сделал множество последовательных сходств ... но это потребовало бы, чтобы мы перебирали один из текстов столько раз, сколько мы пытаемся использовать длины фраз.
Полагаю, я просто не знаю, с чего начать, и таким способом, который эффективен, а не O(n^too_high)
.