我有以下情况:
字符串a =“网络爬虫是一种自动浏览万维网互联网的计算机程序”; 字符串b =“Web Crawler计算机程序浏览万维网”;
是否有任何想法或标准算法来计算相似性的百分比?
例如,在上述情况下,通过手动观察估计的相似度应为90%++。
我的想法是将两个字符串标记化并比较匹配的标记数。就像是 (7个令牌/ 1个令牌)* 100.但是,当然,这种方法根本没有效果。比较匹配的字符数也似乎无效....
任何人都可以提供一些指导吗???
以上是我的项目Plagiarism Analyzer的一部分。
因此,匹配的单词将完全相同,没有任何同义词。
在这种情况下,唯一的问题是如何计算相当准确的相似度百分比。
非常感谢任何帮助。
答案 0 :(得分:5)
康拉德指出,你的问题在很大程度上取决于你所说的“相似”。 一般来说,我会说以下指南应该是有用的:
你可以改进技巧,包括单词形式,句子单词顺序,synonim列表等之间的差异。虽然你永远不会得到完美的结果,你有很多调整的可能性,我相信一般来说你可能会得到很有价值的相似度量。
答案 1 :(得分:4)
这取决于你的相似性。在形式上,您需要定义您认为“类似”字符串的度量标准,以便将统计信息应用于它们。通常,这是通过假设性问题来完成的:“第一个字符串是第一个字符串的修改版本的可能性有多大,其中引入了错误(例如通过键入错误)?”
这种相似性(或者更确切地说,反向)的一个非常简单但有效的度量是两个字符串的edit distance,可以使用动态编程计算,这需要时间 O (<通常,em> nm ),其中 n 和 m 是字符串的长度。
根据您的使用情况,可能需要更详细的措施(或完全不相关的措施,例如soundex metric)措施。
在您的情况下,如果您直接应用令牌匹配(即单词计数),您永远不会获得&gt;相似度为90%。要以有意义的方式获得如此高的相似性,需要进行高级语义分析。如果你完成了这个,请发表论文,因为这是一个很大程度上未解决的问题。
答案 2 :(得分:2)
我是康拉德鲁道夫已经说过的第二个。
其他人可能会推荐不同的距离指标。我要说的是伴随着这些,但更多地关注匹配语义的问题。
鉴于您的目标,我建议您应用一些标准的文本处理方法。所有这些都有潜在的垮台,所以我按照申请和难以做好的顺序列出它们
答案 3 :(得分:1)
这个问题的问题是:相似性可能是人性化的相似性(正如你所说的“+ - 90%相似性”)或统计相似性(Kondrad Rudolph的回答)。
人类相似性永远不能轻易计算出来:例如这三个词
cellphone car message
mobile automobile post
统计相似性非常低,而实际上它非常相似。因此:解决这个问题很困难,我能指出的唯一想法是Bayesian filtering或人工智能Bayesian networks。
答案 4 :(得分:1)
一个常见的衡量标准是Levenshtein距离,这是字符串编辑距离的一个特例。它也包含在apache string util库
中答案 5 :(得分:0)
Longest Common Sub-sequence是众所周知的字符串不相似度量,在动态编程中实现