java - 查找文档相似性的最佳方法

标签 java text nlp similarity cosine-similarity

我是 NLP 新手,我想找到两个文档之间的相似性

我用谷歌搜索发现有一些方法可以做到这一点,例如

最好的方法是什么(我也欢迎其他方法),这样我们可以获得高精度,如果java中有一些API可以做到这一点,也请告诉我

最佳答案

您问题的答案有两个:(a) 句法相似性和 (b) 语义相似性。

语法相似性 你已经发现了Shingling,所以我将重点关注其他方面。最近的方法使用潜在变量模型来描述句法模式。基本思想是使用条件概率:P (f| f_c ),其中 f 是某个特征,f_c 是其上下文。此类模型最简单的示例是马尔可夫模型,其中单词作为特征,前面的单词作为上下文。这些模型回答了以下问题:*假设单词 w1,... ,单词 w_ n 的概率是多少w_ n-1 在文档中出现在它之前吗?这条大道将带您前往大楼language models ,从而根据 perplexity 来测量文档相似度。对于纯粹的句法相似性度量,可以查看解析树特征而不是单词。

语义相似性 当然,这是一个更难的问题。这个方向的最新技术涉及理解分布式语义。 Distributional semantics本质上是说,“在大量数据的相似上下文中出现的术语必然具有相似的含义”。这种方法是数据密集型的。基本思想是构建“上下文”的 vector ,然后衡量这些 vector 的相似度。

基于自然语言测量文档相似度并不容易,这里的答案并不公正,所以我向您指出 this ACL paper ,在我看来,它提供了一幅非常好的图片。

关于java - 查找文档相似性的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20406799/

相关文章:

带货币符号的 HTML 文本输入字段

mysql - 从 MySQL 中检索文本数据的 SQL 语句,其中字段中的每个单词都重复

nlp - 否定句子的算法

python - 在 nltk 中打断/分解复杂和复合句子

python - Sklearn 管道值错误 : could not convert string to float

java - 为什么显示.GIF 图像不断增加内存?

尝试学习 for 循环时出现 Java 语法错误

java - 当输入中存在不同形式的参数时分割字符串

Java - 在 Swing 中加入多个绘图字符串

java - 如何使用java中的递归逻辑来查找直接或间接向特定经理报告的经理列表