比较大量类似文本的最简单方法是什么?

时间:2010-06-22 16:23:12

标签: php python sql regex perl

这里有一些开放性的问题,因为我主要是在寻找意见。我正在寻找移动中的一些来自craigslist的数据,以获取我所在地区的apt广告。我的目标是能够比较项目以查看某些内容是否重复,以便我不会花一整天时间查看相同的3个广告。问题是他们改变了一些东西以便通过CL的过滤器。

我已经有一些正则表达式来寻找要比较的地址和电话号码,但这并不是最可靠的。是否有人熟悉一种简单的方法来比较整个文档,并可能显示像“80%相似”的简单方法?我无法想到任何事情,所以我怀疑我必须从头开始自己的解决方案,但我认为值得问一下stackoverflow的集体天才:)

首选的语言/方法是python / php / perl,但如果它是一个很好的解决方案,我会非常开放。

更新:有一点值得注意的是,因为我将在本地数据库中存储我所在地区(洛杉矶)的aps的RSS搜索数据,首选方法将包括一种方法来将它与我所有的东西进行比较目前知道。这可能是一个显而易见的事情,因为随着职位数量的增长,这可能会成为一个非常漫长的过程。

5 个答案:

答案 0 :(得分:2)

你可以计算两个字符串之间的Levenshtein差异 - 经过一些合理的规范化,例如最小化重复的空白和不重复的空格。在你经历了足够的“重复”后,你应该知道你的阈值是什么 - 那么你可以在所有新的传入数据上运行Levenshtein,如果它低于你的阈值,你可以认为它是重复的。

答案 1 :(得分:1)

很少有相当复杂的项目可以找到文本重复。其中一个是Simian。看看吧。

答案 2 :(得分:1)

您可以使用xdiff。有一个xdiff PECL extension for PHP可用。

或使用similar_text 计算两个字符串之间的相似性

答案 3 :(得分:1)

您可以使用difflib直接计算python中的差异。

编辑:您可以考虑以某种方式创建内容的哈希值,以减少需要“差异化”的文本量。例如,删除所有空格,标点符号,标签等,然后查看实际内容。

答案 4 :(得分:0)

如果你想要做很多事情并且具有一定的可靠性,你可能想要使用半高级的方法,比如“词袋”技术。我实际上坐下来写了一个或多或少工作(如果可怕的未经优化)算法的草图来做它,但我不确定它是否真的适合包含在这里。您可以使用预先制作的库进行文本分类。