像在 GOOGLE NEWS 中一样将相似的新闻内容分组在一起

Posted

技术标签:

【中文标题】像在 GOOGLE NEWS 中一样将相似的新闻内容分组在一起【英文标题】:Grouping similar news contents together like in GOOGLE NEWS 【发布时间】:2011-04-26 20:48:16 【问题描述】:

由于各种新闻网站上发布了大量新故事/类似新闻内容,我无法轻松管理 RSS 提要。对于世界新闻和商业新闻这样的主题,很多故事都是多余的,增加了读者整理已经阅读过哪些故事的负担。为了处理泛滥和冗余的双重问题,我需要开发一个代码来减少要阅读的项目数量,并使用重叠的信息来预测有趣的主题。

如果我能够像在 GOOGLE NEWS / *** 中一样将类似的新闻内容组合在一起并将其呈现给用户,那就更容易了。

【问题讨论】:

是否主题类别(体育、世界、娱乐、健康...)预先确定?换句话说,您现在已经如何对新闻项目进行分组了吗? (如果是,这是一个监督学习问题)还是由用户来指定有多少主题类别和哪些主题类别? (=> 无监督 => 更难) 【参考方案1】:

这绝对是一个不太容易解决的问题,可以通过以下方式解决:

智能文本解析功能 原始硬件能力 他们两个 测试,测试,测试 最后微调

首先,我会将不同的新闻来源归为一些相对广泛的类别。您可以轻松确定科技新闻来源不会在经济类别下发布新闻。 (或者会,这就是问题所在。)

大部分案例新闻标题不会被触动,最多保持原样。因此,类别、标题和发布日期是将新闻归为一体的良好起点。

如果您发现上述方法存在问题,则需要在后台进行一些微调。

也许您需要阅读整篇文章并逐字比较两(数千)篇文章。

有很多停用词会扭曲比较,因此您需要忽略这些。 您可能需要定义同义词 (J Lo = Jennifer Lopez)

如果新闻的原始文本相似(您可以定义一个阈值),您可以再次比较其他因素(如上所述)。

一些新闻源在RSS源中提供了很好的标记,也许你也可以使用它但不要依赖它。

请记住,一开始(大约 1 年)您需要进行大量微调,然后就可以了。

【讨论】:

亲爱的 Fabrik,感谢您的回复...有没有可用的算法或代码。 坏消息:你应该自己写。好的那个?我提供了很多有用的信息;)【参考方案2】:

我在某处读到 - 但我没有参考资料 - Google 新闻使用 MinHash 的变体来检测近乎重复的新闻帖子。其中很多几乎完全相同,来自一家新闻机构,只是经过了报纸的小幅改编。

http://en.wikipedia.org/wiki/MinHash

有一个参考和声明,谷歌新闻使用了 LSH 和 MinHash 的变体:

Das、Abhinandan S. 等人。 (2007),“谷歌新闻个性化:可扩展的在线协同过滤”,第 16 届万维网国际会议论文集。 ACM

【讨论】:

【参考方案3】:

我在这里没有看到任何问题,但我会从开发某种指纹算法开始,包括文章中的单词、姓名、标题、日期等。然后我会检查指纹的相似性以找到相同的文章,也许通过某种 MapReduce 作业来轻松地将工作分散到集群中的不同服务器。

如果您想要一些灵感,请查看 Google Living Stories 的源代码: http://code.google.com/p/living-stories/

【讨论】:

【参考方案4】:

我认为你应该试试 Jaccard Coefficient 或 Jaccard Similarity

Jaccard 指数,也称为 Jaccard 相似系数(最初由 Paul Jaccard 创造的系数 de communauté),是一种用于比较样本集的相似性和多样性的统计量。 Jaccard 系数衡量有限样本集之间的相似性,定义为交集的大小除以样本集的并集的大小。 Jaccarrd Coefficient.

我认为 Facebook 使用这个以及一些电子商务商店来对他们的相关产品、帖子等进行分组。您可以在 *** 上查看这些其他链接以获取指南。

How to find "related items" in php mysql / PHP: Find similar / related items by tag / taxonomy

【讨论】:

【参考方案5】:

您需要进行某种形式的文档聚类。这涉及:

将文章分解为“特征”(例如,TF-IDF 向量 关键字) 具有相似度度量(例如,余弦相似度,可以取两篇文章并确定它们的相似程度) 一种聚类算法,它使用相似度度量将文章分解为聚类。

由于这是新闻并且您有新文章进来,您可能需要“在线”算法而不是批量算法。搜索增量 DBSCAN 为例。

【讨论】:

【参考方案6】:

通过将所有文章转储到 Elsasticsearch 并执行 more_like_this 查询,我已经成功地做到了这一点。这出奇的好。只需进行一些微调即可使某些设置正确。您还可以在bonsai.io使用免费的 Elasticsearch 托管实例

【讨论】:

以上是关于像在 GOOGLE NEWS 中一样将相似的新闻内容分组在一起的主要内容,如果未能解决你的问题,请参考以下文章

从许多数字和字符图片中进行图像聚类,将相似的图片组合在一起

mongoDB聚合将相似的文档彼此相邻分组

有效地将相似的数字组合在一起[重复]

SQL Server 或 C# - 将相似的记录归为一组

Python3 - 将相似的字符串分组在一起

拆分训练测试数据集将相似的值保持在一起