检测字符串中的相似性

时间:2014-02-16 23:16:23

标签: algorithm nlp semantics google-news

如果我在Google新闻上搜索某些内容,我可以点击“深度浏览”按钮,从多个来源获取相同的新闻文章。使用什么样的算法来比较文本,然后确定它是关于同一个东西?我在这里看到了这个问题:

Is there an algorithm that tells the semantic similarity of two phrases

然而,使用那里提到的方法,我觉得如果有些文章在性质上相似但是关于不同的故事,那么它们将使用那里提到的方法组合在一起。有没有一种标准的方法来检测大致相同的字符串并对它们进行分组,同时保持字符串只是相似的?例如。如果我搜索“美国边境”,我可能会得到关于美国边境问题的故事,但是什么会阻止这些问题聚集在一起?我能想到的只是出版日期,但是如果很多故事彼此非常接近的话会怎样呢?

1 个答案:

答案 0 :(得分:1)

确定两篇文章相似性的一种标准方法是为每篇文章创建一个language model,然后找出它们之间的相似性。

语言模型通常是概率函数,假设文章是由随机选择标记的模型创建的(单词/ bigrams /.../ ngrams)。

最简单的语言模型是unigrams(单词):P(word|d) = #occurances(w,d)/|d|(单词出现在文档中的次数,相对于文档的总长度)。平滑技术通常用于防止出现概率为零的单词。

拥有语言模型后,您所要做的就是比较两个模型。一种方法是cosine similarityJensen-Shannon similarity
这给你两篇文章的绝对相似度。这可以与许多其他方法结合使用,例如您建议比较日期。