JavaScript文本相似性算法

11

我正在构建一个网站,应该会收集各种新闻来源,并希望比较这些文本的相似度。我需要一种新闻文本相似度算法。 我知道php具有similar_text函数,但不确定它有多好,而且我需要它用于javascript。 因此,如果有人能向我指出示例、插件或任何关于如何实现这一点或至少在哪里查找和开始调查的指示。


4
为什么你特别需要它用JS?你意识到这将发生在用户访问网站时,这不是你可以像服务器端语言那样轻松地运行cron作业并保存在服务器上的事情。 - Loktar
3
@Loktar - 这里也有服务器端的JavaScript :) 当然,通过在客户端检索源并将它们合并,也可以使用(客户端)JavaScript来完成。这将节省您需要支持服务器端脚本的服务器。 - GolezTrol
是的,但这样的事情传统上是在服务器上完成的,速度会快得多...而且你可以只做一次,缓存结果并提供给新用户。我怀疑 OP 没有指的是像 NodeJS 这样的东西 :P - Loktar
重点是有一个管理员面板,管理员可以将相似的新闻分组。我有很多选项可以让他们更容易操作,但当他们选择一个标题时,我需要使用它来将其文本与所有其他新闻文本进行比较,并突出显示最可能相似的内容。 - Karington
2个回答

12

有一个 Levenshtein 距离度量的 JavaScript 实现,通常用于文本比较。不过,如果你想比较整篇文章或标题,最好查看组成文本的单词集合之间的交集(以及这些单词的频率),而不仅仅是字符串相似性度量。


11

如果你没有明确指定两个文本应该具有什么相似性,那么判断它们是否相似就是一个哲学问题。考虑字符串"house"和"mouse"。从语义层面上看,它们并不相似,但是从"物理外观"的角度来看,它们非常相似,因为只有一个字母不同(在这种情况下,可以使用Levenshtein distance)。

要确定相似性,需要适当的文本表示。例如,您可以提取并计算所有n-grams,然后比较两个结果频率向量,使用相似性度量,如cosine similarity。或者您可以将单词stem到其根形式,在删除所有stopwords后总结它们的出现次数,并将其作为相似度量的输入。

有很多关于这个主题的方法和论文,例如这篇关于短文本的文章。无论如何:你想要决定两个文本是否相似的抽象级别越高,就越难。我认为你的问题是一个非平凡的问题(因此我的答案比较抽象)... ;-)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接