【发布时间】:2012-12-09 21:13:57
【问题描述】:
所以,假设我有这些文本:
文本1:
绝对服从被称为主宰的虫族集体感知。主宰指挥着虫群中的每一个异虫生物的行动,通过一个次等感知者的等级制度运作。
文本2:
虫群中的虫族生物,通过次等感知者的等级制度运作。虽然主宰主要是由它的消费和同化欲望驱动的
文字 3
当虫族第一次到达科普鲁星区时,他们通过绝对服从被称为主宰的虫族集体意识而统一起来。主宰指挥着虫群中的每一个异虫生物的行动,通过一个次等感知者的等级制度运作。虽然主宰的主要动力是它想要吞噬和同化先进的星灵种族,但它在人类身上发现了有用但尚未开发的材料。
现在,Text1 的结尾和 text2 的开头重叠,所以我们可以说文本块不是唯一的。同样,对于 Text3,可以在其中找到 Text1(以及 Text2),因此由于重叠,这也不是唯一的。
所以,我的问题:
如何编写可以查看连续字母或单词并确定唯一性的内容?理想情况下,我希望这样的方法返回一些值,表示相似度——也许是匹配词的数量超过两个文本块大小的平均值。当它返回 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^too_high)的方式开始。
【问题讨论】:
标签: ruby performance search text comparison