文本1:
absolute obedIEnce to the zerg collective sentIEnce kNown as the Overmind. The Overmind directed the actions of every zerg creature in the Swarm,functioning through a hIErarchy of lesser sentIEnts.
文本2:
zerg creature in the Swarm,functioning through a hIErarchy of lesser sentIEnts. Although the Overmind was primarily driven by its desire to consume and assimilate
文字3
When the zerg first arrived in the Koprulu sector,they were unifIEd by their absolute obedIEnce to the zerg collective sentIEnce kNown as the Overmind. The Overmind directed the actions of every zerg creature in the Swarm,functioning through a hIErarchy of lesser sentIEnts. Although the Overmind was primarily driven by its desire to consume and assimilate the advanced protoss race,it found useful but undeveloped material in humanity.
现在,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)的方式.
解决方法 我相信你正在寻找的是 Longest Common Substring problem,即给定两个字符串,找到它们共有的最长子串的问题.该链接指向维基百科页面,该页面将帮助您了解域并包含在O(nm)时间内运行的算法的伪代码示例.此外,Wikibooks的算法实现书有an implementation in Ruby.它包含一个lcs_size方法,可能就是你所需要的.简而言之,如果lcs_size(text1,text2)返回4,这意味着text1和text2只有很少的连续文本,可能只是一个单词,但如果它返回,比如40,它们可能有一个共同的整个句子.
希望有用!
总结以上是内存溢出为你收集整理的Ruby:如何测试两个文本块之间的相似性?全部内容,希望文章能够帮你解决Ruby:如何测试两个文本块之间的相似性?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)