Java 句子间的语义相似性

Java 句子间的语义相似性,java,nlp,Java,Nlp,我在做一个项目。我需要任何开源工具或技术来查找两个句子的语义相似性,其中我将两个句子作为输入,并将分数(即语义相似性)作为输出。有什么帮助吗?萨尔玛,恐怕这不是回答你问题的合适论坛,因为它与编程没有直接关系。我建议你以后再问你的问题。您可能还想先搜索他们的档案 除此之外,你的问题不够精确,我会解释我的意思。我假设你的项目是关于计算句子之间的语义相似性,而不是关于语义相似性只是众多事物之一的其他事物。如果是这样的话,那么有几件事需要考虑:首先,无论是从计算语言学还是理论语言学的角度,都不清楚“语义

我在做一个项目。我需要任何开源工具或技术来查找两个句子的语义相似性,其中我将两个句子作为输入,并将分数(即语义相似性)作为输出。有什么帮助吗?

萨尔玛,恐怕这不是回答你问题的合适论坛,因为它与编程没有直接关系。我建议你以后再问你的问题。您可能还想先搜索他们的档案

除此之外,你的问题不够精确,我会解释我的意思。我假设你的项目是关于计算句子之间的语义相似性,而不是关于语义相似性只是众多事物之一的其他事物。如果是这样的话,那么有几件事需要考虑:首先,无论是从计算语言学还是理论语言学的角度,都不清楚“语义相似性”一词的确切含义。有很多不同的观点和定义,都取决于要解决的问题的类型,手头的工具和技术,以及接近这个任务的背景等等。
  • 皮特和罗布在车站附近发现了一条狗
  • 皮特和罗布在车站附近从未发现过狗
  • 皮特和罗布都很喜欢编程
  • 帕特里夏在车站附近发现了一条狗
  • 是一只狗在雪下找到了皮特和罗布
  • 第2-4句中哪一句与第1句相似?2与1完全相反,仍然是关于皮特和罗布(不是)找到一条狗。第三部是关于皮特和罗布的,但背景完全不同。4是关于在车站附近找到一只狗,尽管发现者是其他人。5是关于皮特、罗布、一条狗和一个“寻找”事件,但方式与1不同。至于我,即使不编写计算机程序,我也无法根据这些例子的相似性对它们进行排序

    为了计算语义相似性,您需要首先确定哪些是“语义相似”的,哪些不是。为了计算句子层面上的语义相似性,理想情况下,您可以比较句子的某种意义表示。意义表征通常以逻辑公式的形式出现,生成起来极其复杂。然而,有一些工具试图做到这一点,例如

    作为一种过于简单但通常很实用的方法,您可以将语义相似性定义为一个句子和另一个句子中单词之间的相似性之和。这使得这个问题变得容易得多,尽管仍然有一些困难的问题需要解决,因为单词的语义相似性和句子的语义相似性定义一样糟糕。如果你想对此有一个印象,可以看看D.a.克鲁斯(1986)的《词汇语义学》一书。然而,有相当多的工具和技术来计算单词之间的语义相似度。他们中的一些人基本上将其定义为两个单词之间的负距离,如Wikipedia分类法或Wikipedia分类法。另一些则通过使用在大型文本语料库上计算的一些统计度量来计算语义相似度。它们基于这样一种认识:相似的词语出现在相似的语境中。计算句子或单词之间语义相似性的第三种方法是向量空间模型,您可以从信息检索中了解到。为了获得关于后一种技术的概述,请阅读曼宁和舒茨的《统计自然语言处理的基础》一书中的第8.5章


    希望这能让你现在站起来。

    我开发了一个简单的开源工具,可以根据类别进行语义比较:

    它适用于任何长度的句子,简单、稳定、快速、小。。。 下面是一个示例输出:
    句子之间的相似性
    -皮特和罗布在车站附近发现了一条狗。
    -皮特和罗布在车站附近从未发现过狗。
    is:1.0000000000


    句子之间的相似性
    -帕特里夏在车站附近发现了一条狗。
    -是一只狗在雪下找到了皮特和罗布。
    is:0.7363210405107239


    句子之间的相似性
    -帕特里夏在车站附近发现了一条狗。
    -我很好,谢谢
    is:0.0


    句子之间的相似性
    -你好,你好吗?
    -我很好,谢谢
    is:0.2916059217590213



    用法:

    import semantics.Compare;
    public class USAGE {
    
    public static void main(String[] args) {
    
        String a = "This is a first sentence.";
        String b = "This is a second one.";
    
        Compare c = new Compare(a,b);
        System.out.println("Similarity between the sentences\n-"+a+"\n-"+b+"\n is: " + c.getResult());
    
        }
    
    }
    

    您可以尝试使用基于WordNet KB的UMBC语义相似性服务。 有UMBC STS(语义文本相似性)服务。这里是链接


    关于,

    Nice lib:)您是如何生成字典/单词列表的?我需要一个德语的。使用DISCO实用程序,从字典中查找每个单词最接近的单词。迪斯科确实支持德语,所以你也可以这样做。一种简单的方法是先到,然后比较得到的关键词。结帐