文章 "Matching" 算法



我有一个相当具体的问题,至少对我来说是这样。具体是因为经过大量搜索,我找不到任何有用的东西。正如标题所说,我正在寻找一种算法,它可以发现输入中给出的两篇文章是否"匹配",但不是通常的字符串匹配,相反,我想找到的是,它们是否针对相同的论点。现在我预测,应该将"匹配"与某个阈值进行比较,并使用某种权重来确定它们"匹配"的程度,因此概念是模糊的,所以我们不能谈论完全的"匹配",但我们将讨论"匹配"程度。

遗憾的是,我什么都没有了。如果你们中有人在这个话题上帮助我,我将不胜感激,也欢迎有理论想法。

谢谢你。

有很多方法可以找到文章的"相似性",这实际上取决于你对文章的了解,以及你用什么作为测试用例来显示你的结果有多好。

一个简单的解决方案是对这些文档使用的词汇表使用Jaccard Similarity。伪代码:

similarity(doc1,doc2):
set1 <- getWords(doc1)
set2 <- getWords(doc2)
intersection <- set_intersection(set1,set2)
union <- set_union(set1,set2)
return size(intersection)/size(union)

请注意,代替getWords,您还可以使用bigram、trigram,。。。n克。


更复杂的无监督解决方案可以从每个文档中构建一个语言模型,并根据语言模型计算它们的Jensen Shannon分歧,以判断它们是否相似。
一个简单的语言模型是P(word|document) = #occurances(word,document)/size(document)
通常我们使用一些平滑技术来确保没有单词的概率为0。


其他解决方案使用监督学习算法,如SVM。你的特征可以是单词(tf idf模型/单词袋模型/…),如果doc1、doc2"相似",则使用这些特征进行分类。这需要获得一个"训练集",基本上是一组样本(doc1,doc2)和标签,告诉你(doc1和doc2)是否是"微笑的"。将训练数据提供给学习者并建立一个模型,该模型稍后将用于对新的文档对进行分类。

最新更新