N00*_*mer 18 java algorithm text similarity
我正在做一个Java项目,我必须制作文本相似性程序.我希望它能够获取2个文本文档,然后将它们相互比较并获得它的相似性.他们彼此有多相似.
我稍后会放置一个已经可以找到单词同义词的数据库,并通过文本查看其中一个文本文档编写者是否只是将文本更改为其他同义词,而文本完全相同.向上或向下移动paragrafs也是如此.是的,正如它是一个加勒比计划......
我想告诉大家你会推荐什么样的算法.
通过查看这里和其他地方,我发现了Levenstein和Cosine的相似性.他们似乎都被提到了很多.海明距离是我老师告诉我的另一个.
我得到了一些与那些相关的问题,因为我并没有真正得到维基百科.有人可以向我解释这些事吗?
Levenstein:这个算法由sub改变,添加和删除单词,看看它与文本文档中的另一个单词有多接近.但是如何在整个文本文件中使用它?我可以看到如何在一个单词上使用它,但不能在一个句子或整个文本文档中使用它.
余弦:它是通过测量两个矢量之间角度的余弦来衡量两个矢量之间的相似性.这里我不明白两个文本如何成为2个向量,那些文字/句子怎么样?
汉明:这个距离似乎比Levenstein更好,但它只是在相同的弦上.当2个文件甚至其中的句子不是两个相等长度的字符串时,怎么这么重要?
维基百科应该有意义,但事实并非如此.我很抱歉,如果这些问题听起来太愚蠢了,但它让我失望了,我认为这里的人们很容易解释它,所以即使是这个领域的新手也可以得到它.
谢谢你的时间.
Jer*_*fin 12
Levenstein:从理论上讲,你可以将它用于整个文本文件,但它确实不适合这项任务.它真正用于单个单词或(最多)短语.
余弦:首先简单地计算每个文档中的唯一单词.一旦你完成了这个问题,上一个问题的答案将涵盖计算.
我从来没有为此目的使用汉明距离,所以我不能说太多.
我会将TFIDF(Term Frequency*Inverted Document Frequency)添加到列表中.它与余弦距离非常相似,但1)倾向于在较短的文档上做得更好,2)更好地考虑到在整个语料库中哪些词极为常见,而不仅仅是恰好常见的词语两个特定的文件.
最后要注意的是:对于其中任何一个产生有用的结果,你几乎需要在尝试计算相似度之前筛选出停用词(尽管如果你跳过这个,TFIDF似乎比其他人做得更好).至少在我的经验中,阻止单词(删除后缀)也是非常有帮助的.当我完成它时,我使用了Porter的词干分析器算法.
为了您的目的,您可能想要使用我称之为倒置词库的内容,它可以让您查找单词,并且每个单词替换单个规范单词以表示该含义.我在一个项目上试过这个,并没有发现它像预期的那样有用,但听起来对你的项目来说它可能会更有用.
| 归档时间: |
|
| 查看次数: |
11918 次 |
| 最近记录: |