比较大量相似文本的最简单方法是啥?

Posted

技术标签:

【中文标题】比较大量相似文本的最简单方法是啥?【英文标题】:What is the easiest method to compare large amounts of similar text?比较大量相似文本的最简单方法是什么? 【发布时间】:2011-03-06 22:06:39 【问题描述】:

这里有点开放式问题,因为我主要是在寻找意见。因为我想搬家,所以我正在从 craigslist 中获取我所在地区的 apt 广告的一些数据。我的目标是能够比较项目以查看某些内容何时重复,这样我就不会整天都在看相同的 3 个广告。问题是他们稍微改变了一些东西以通过 CL 的过滤器。

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

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

更新:值得注意的一点是,由于我会将我所在地区(洛杉矶)的 apts 的 rss 提要的抓取数据存储在本地数据库中,因此首选方法包括将其与我的所有内容进行比较的方法目前知道。这可能会有点令人费解,因为随着帖子数量的增加,这可能会成为一个非常漫长的过程。

【问题讨论】:

【参考方案1】:

如果您想大量执行此操作并具有一定的可靠性,则可能需要使用半高级方法,例如“词袋”技术。我实际上坐下来写了一个或多或少的工作(如果非常未优化)算法的草图,但我不确定它是否真的适合包括在这里。有一些预制库可用于文本分类。

【讨论】:

【参考方案2】:

您可以计算两个字符串之间的 Levenshtein 差异 - 经过一些理智的规范化,例如最小化重复的空格等等。在您运行足够多的“重复”之后,您应该了解您的阈值是什么 - 然后您可以对所有新传入的数据运行 Levenshtein,如果它小于您的阈值,那么您可以认为它是重复的。

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

或者使用similar_text计算两个字符串的相似度

【讨论】:

【参考方案5】:

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

【讨论】:

这是一个很酷的项目,谢谢分享!我唯一担心的,也许是我需要更新帖子的一个问题是,因为我本质上是在抓取 rss 提要,所以我需要一种方法来比较存储在本地 mysql db 中的数据(一个抓取帖子的正文内容)。由于我只是在我所在的城市地区寻找,因此可以将数据库中的所有内容与任何新出现的内容进行比较,但在某个时候这将变得计算困难,特别是在城市中像洛杉矶一样大

以上是关于比较大量相似文本的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

获取仅包含文本条目的组合框的选定文本的最简单方法是啥?

在 OpenGL 中将文本打印到屏幕的最简单方法是啥?

进行简单 IP 地址比较的最高效方法是啥?

使用 GDI+,沿公共基线对齐文本(以几种不同字体绘制)的最简单方法是啥?

通过POST方法以objective-c的文件格式将语音和图像与文本数据一起上传到服务器的最简单方法是啥?

在 2 个 C 程序之间传输数据的最简单方法是啥?