首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >百分比相似度分析(Java)

百分比相似度分析(Java)
EN

Stack Overflow用户
提问于 2010-03-06 23:59:00
回答 6查看 4.3K关注 0票数 4

我有以下情况:

字符串a=“网络爬虫是自动浏览万维网因特网的计算机程序”;字符串b=“网络爬虫计算机程序浏览万维网”;

有没有什么想法或标准算法来计算相似度百分比?

例如,在上面的情况下,通过人工查找估计的相似度应该是90%++。

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

有谁能给点指导吗?

以上是我的项目,抄袭分析器的一部分。

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

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

非常感谢你的帮助。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-03-07 00:34:18

正如Konrad指出的,你的问题在很大程度上取决于你所说的“相似”是什么意思。总的来说,我想说下面的指导原则是有用的:

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

你可以改进技术以包括词形、句子词序、同义词列表等之间的差异。尽管你永远不会得到完美的结果,但你有很多调整的可能性,我相信一般来说,你可能会得到相当有价值的相似性度量。

票数 5
EN

Stack Overflow用户

发布于 2010-03-07 00:01:47

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

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

根据您的使用情况,可能需要更详细的度量(或完全不相关的度量,如soundex metric)度量。

在你的例子中,如果你直接应用一个令牌匹配(即仅仅是单词计数),你永远不会得到> 90%的相似度。要以有意义的方式获得如此高的相似度,需要高级语义分析。如果你完成了这项工作,请发表这篇论文,因为这是一个很大程度上尚未解决的问题。

票数 4
EN

Stack Overflow用户

发布于 2010-03-07 00:10:29

我赞同康拉德·鲁道夫已经说过的话。

其他人可能会推荐不同的距离度量。我要说的就是这些,但更多的是看语义匹配的问题。

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

  1. 句子分割。找出你的词袋删除单位:取出a,an,

,of等。

  1. 百分比:与排序无关的整体单词的百分比(更积极)你可以尝试同义词扩展,它将同义词算作匹配的单词。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2393082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档