用于查找两个文本相同的百分比的算法

时间:2010-04-03 05:33:35

标签: algorithm language-agnostic

您建议使用什么算法来确定从0到1(浮动)两个文本相同的多少?

请注意,我的意思并不相似(即,他们说同样的事情,但以不同的方式),我的意思是完全相同的词,但两个文本中的一个可能有额外的单词或单词略有不同或额外的新行和那样的东西。

我想要的算法的一个很好的例子是Google用于识别网站中的重复内容(X搜索结果与显示的内容非常相似,点击此处查看)。

我需要它的原因是因为我的网站能够让用户发表评论;类似但不同的页面目前有自己的评论,因此许多用户最终复制并粘贴他们在所有类似页面上的评论。现在我想合并它们(所有类似的页面将“共享”评论,如果你在页面A上发布它将出现在类似的页面B),我想以编程方式删除所有那些复制和粘贴的评论用户。

我有几百万条评论,但速度不应成为一个问题,因为这是一次将在后台运行的事情。

编程语言并不重要(只要它可以与MySQL数据库连接),但我想用C ++来实现它。

4 个答案:

答案 0 :(得分:3)

强大的相似性比较,例如Levenshtein distance通常很贵。有许多不同的文本可供比较,你也遇到了大量潜在的成对比较问题。

对你的案件更实用的技术可能是Karb-Rabin指纹识别。

答案 1 :(得分:2)

Longest Common Subsequence算法会填写账单吗?它基本上是diff使用的。有一种动态编程算法,可以让您有效地解决这些问题。我链接的维基百科页面包含您需要的所有信息。

要以友好和友好的方式进行实验,您可以使用实现它的Python difflib模块。它包含difflib.SequenceMatcher类,其中包含ratio方法,其中包含:

  

返回一系列序列'   相似性为范围[0,   1]。

     

其中T是总数   两个序列中的元素,M是   比赛次数,这是2.0 * M /   注意,如果是,这是1.0   序列是相同的,如果是0.0   他们没有任何共同之处。

答案 2 :(得分:1)

Cosine Similarity

  

在信息检索的情况下,   两个文件的余弦相似度   自该术语以来,范围从0到1   频率(tf-idf权重)不能   负。两个学期之间的角度   频率矢量不能更大   超过90°。 - 维基百科

修改

SIMILAR但是不同的页面目前都有自己的评论,因此很多用户最终会复制并粘贴他们在所有SIMILAR页面上的评论。

可以利用这种相似性。

  1. 查找类似帖子。
  2. 查找用户COMMON到帖子只是忽略其他人。
  3. 这种分组应该减少你的任务:)

答案 3 :(得分:1)

余弦相似度是一个很好的衡量标准。请参阅http://nlp.stanford.edu/IR-book/information-retrieval-book.html

的信息检索简介第6-7章