1

我在开发我的网络应用程序时遇到问题,这里是描述:

这个 web 应用程序(仍处于 alpha 阶段)基于用户生成的内容(通常是短文章,尽管它们的长度可能会变得很大,大约占屏幕的四分之一),每个用户至少提交 10 篇这样的文章,所以这个数字应该会增长得很快。从本质上讲,大约 10% 的文章会被重复,所以我需要一个算法来获取它们。

我想出了以下步骤:

  1. 在提交时获取一段文本并将其存储在一个单独的表中(article_id,length ),问题是文章是使用 PHP special_entities() 函数编码的,用户发布的内容稍有修改(有些人会错过逗号、重音或甚至跳过一些单词)
  2. 然后从数据库中检索长度范围 = new_post_length+/- 5% 的所有条目(我应该使用另一个阈值,记住文章提交中的人为因素吗?)
  3. 获取前 3 个关键字并将它们与步骤 2 中获取的文章进行比较
  4. 拥有一个最可能匹配的最终数组,使用 PHP 的 levenstein() 函数比较新条目

此过程必须在文章提交时执行,而不是使用 cron。但是我怀疑它会在服务器上产生沉重的负载。

你能提供任何想法吗?

谢谢!麦克风

4

3 回答 3

1

文本相似性/抄袭/重复是一个很大的话题。有很多算法和解决方案。

Lenvenstein 不适用于您的情况。你只能在小文本上使用它(由于它的“复杂性”它会杀死你的 CPU)。

一些项目使用“关键字的自适应本地对齐”(您可以在 google 上找到相关信息。)

此外,您可以检查这一点(检查答案中的 3 个链接,非常有启发性):

余弦相似度与汉明距离

希望这会有所帮助。

于 2009-09-13T04:29:59.923 回答
0

我想指出git,版本控制系统具有出色的算法来检测重复或接近重复的内容。当您进行提交时,它会显示修改的文件(无论重命名),以及更改的百分比。

它是开源的,主要是用小型的、专注的 C 程序编写的。也许你可以使用一些东西。

于 2009-09-12T21:09:42.027 回答
0

您可以设计您的应用程序以减少负载,无需针对同一类别中的所有其他帖子检查文本字符串和关键字。如果您让用户提交他们作为 url 引用的第三方内容怎么办?请参阅 Tumblr 实施——基本上有一个自由格式的文本字段,因此每个用户都可以评论并创建他们自己的帖子内容叙述部分,但是根据用户添加的参考类型(视频、图片、链接、引用等)对 Tumblr 的改进是让用户在任何给定的帖子中添加任意多/少类型的格式化内容。

然后,您只检查已知类型,如 url 或嵌入视频代码。将其与 rexem 的建议相结合,以强制用户按类别或某种类型进行分类,您将有更小的范围来搜索重复项。

此外,如果您可以为每个用户提供某种发布到他们自己的“流”的方式,那么是否有很多人复制相同的内容并不重要。为人们提供一些方法来从单个流投票到主要的“首页”级别流,以便社区可以在他们看到重复项目时进行监管。您可以添加一种方法让人们将帖子合并/附加到相关帖子,而不是像 Digg 或 Reddit 那样进行投票(让他们将内容作为一项活动在您的应用程序上进行排序和管理,而不是让它成为背后的问题)场景处理)。

于 2009-09-12T21:45:15.793 回答