百分比相似性分析(Java)

我有以下情况:

字符串a =“网络爬虫是一种自动浏览万维网互联网的计算机程序”; 字符串b =“Web Crawler计算机程序浏览万维网”;

是否有任何想法或标准算法来计算相似性的百分比?

例如,在上述情况下,通过手动查看估计的相似度应为90%++。

我的想法是对两个字符串进行标记,并比较匹配的标记数量。 类似的东西(7个令牌/ 1个令牌)* 100.但是,当然,这种方法根本没有效果。 比较匹配的字符数也似乎无效….

任何人都可以给一些指导???

以上是我的项目Plagiarism Analyzer的一部分。

因此,匹配的单词将完全相同而没有任何同义词。

在这种情况下唯一的问题是如何计算相当准确的相似性百分比。

非常感谢任何帮助。

康拉德指出,你的问题很大程度上取决于你所说的“相似”。 一般来说,我会说以下指南应该是有用的:

  • 通过将单词缩小为基本forms并将其小写来标准化输入
  • 使用单词频率列表(可在网络上轻松获得)并使单词的“相似性相关性”与其在频率列表上的位置成反比
  • 计算总句子相似度,作为两个句子中出现的词的总体相似度除以句子的总相似性相关性

您可以改进技术,以包括单词forms,句子单词顺​​序,synonim列表等之间的差异。虽然你永远不会得到完美的结果,你有很多调整的可能性,我相信,一般来说,你可能会得到非常有价值的相似度量。

这取决于你的相似性。 在forms上,您需要定义您认为“类似”字符串的度量标准,以便将统计信息应用于它们。 通常,这是通过假设的问题来完成的:“第一个字符串是第一个字符串的修改版本的可能性有多大,其中引入了错误(例如通过键入错误)?”

对于这种相似性(或者更确切地说,反向)的一种非常简单但有效的度量是两个字符串的编辑距离 ,其可以使用动态编程来计算,其通常需要时间Onm ),其中nm是长度。字符串。

根据您的使用情况,可能需要更精细的措施(或完全不相关的措施,例如soundex指标 )。

在您的情况下,如果您直接应用令牌匹配(即仅仅字数),您将永远不会获得> 90%的相似性。 要以有意义的方式获得如此高的相似性,需要进行高级语义分析。 如果你完成了这个,请发表论文,因为这是一个很大程度上未解决的问题。

我是康拉德鲁道夫已经说过的第二个。

其他人可能推荐不同的距离指标 我将要说的是伴随着这些,但更多地关注匹配语义的问题。

鉴于您似乎在寻找什么,我建议您应用一些标准的文本处理方法。 所有这些都有潜在的垮台,所以我按照申请和难以做好的顺序列出它们

  1. 句子分裂。 找出你的比较单位。
  2. 停止词删除:取出a,an,the,of等。
  3. 词袋百分比:总词匹配的百分比,与订购无关
  4. (更具侵略性)您可以尝试同义词扩展,它将同义词计为匹配的单词。

这个问题的问题是:相似性可能是人性化相似性(如你所说“+ – 90%相似性”)或统计相似性(Kondrad Rudolph的答案)。

人类相似性永远不能轻易计算出来:例如这三个词

cellphone car message mobile automobile post 

统计相似性非常低,而实际上它非常相似。 因此:解决这个问题很困难,我能指出的唯一想法是贝叶斯过滤或贝叶斯网络的人工智能。

一个常见的衡量标准是Levenshtein距离,这是字符串编辑距离的一个特例。 它也包含在apache字符串util库中

最长公共子序列是众所周知的字符串不相似度量,其在动态编程中实现