假设我有以下文本:
文本1:
对虫族集体意识——超级智慧体“至高意志”的绝对服从。至高意志通过次级智慧体的层级结构指挥蜂群中每个虫族生物的行动。
文本2:
通过次级智慧体的层级结构指挥蜂群中每个虫族生物的行动。虽然至高意志主要是由其渴望消耗和同化先进的神族而驱动的。
文本3:
当虫族第一次来到科普鲁星系时,它们被其对虫族集体意识——超级智慧体“至高意志”的绝对服从所统一。至高意志通过次级智慧体的层级结构指挥蜂群中每个虫族生物的行动。虽然至高意志主要是由其渴望消耗和同化先进的神族而驱动的,但它在人类中发现了有用但未开发的资源。
现在,文本1的结尾和文本2的开头重叠,因此我们会认为这些文本块不是唯一的。同样,对于文本3,文本1和文本2都可以在其中找到,因此也不是唯一的,由于重叠。
所以,我的问题是:
我该如何编写一个程序来查看连续的字母或单词并确定其唯一性?理想情况下,我希望这种方法返回某个值,表示相似度的程度——可能是匹配单词数除以两个文本块大小的平均值。当返回0时,测试的两个文本应完全独特。
当我使用Ruby的字符串方法时,遇到了一些问题。
首先,我开始尝试查找两个字符串的交集。
>> a = "nt version, there are no ch"
>> b = "he current versi"
>> (a.chars.to_a & b.chars.to_a).join
=> "nt versihc"
上述方法的问题在于它只是将共同的字母附加到结果的末尾(我们失去了字符的顺序),这会使测试唯一性变得困难。但我认为交集并不是开始进行相似性比较的最佳方式。被比较的两个文本中可能存在任意数量的单词组合。因此,也许如果我制作一个连续相似性的数组......但这将要求我们遍历其中一个文本,尝试短语长度的次数。我想我真的不知道从哪里开始,以一种既高效又不是O(n^太高)的方式。