如何使用java获取句子的逻辑部分?

如何使用java获取句子的逻辑部分?,java,artificial-intelligence,nlp,linguistics,Java,Artificial Intelligence,Nlp,Linguistics,假设有一句话: On March 1, he was born. 改成 He was born on March 1. 不会破坏句子的意思,它仍然有效。以任何其他方式洗牌单词都会产生奇怪到无效的句子。所以基本上,我说的是句子的一部分,这使得信息更加具体,但是删除它们并不会破坏整个句子。是否有任何NLP库可用于识别这些部件?可以为您做一些这方面的工作。解析应该可以帮助您实现这一点。然而,这并不是一个特别简单的问题,随着句子结构变得更加复杂和含糊不清,算法往往会变得混乱。有时,你应该能够对句子中

假设有一句话:

On March 1, he was born.
改成

He was born on March 1.

不会破坏句子的意思,它仍然有效。以任何其他方式洗牌单词都会产生奇怪到无效的句子。所以基本上,我说的是句子的一部分,这使得信息更加具体,但是删除它们并不会破坏整个句子。是否有任何NLP库可用于识别这些部件?

可以为您做一些这方面的工作。解析应该可以帮助您实现这一点。然而,这并不是一个特别简单的问题,随着句子结构变得更加复杂和含糊不清,算法往往会变得混乱。有时,你应该能够对句子中的短语重新排序并保持其含义。

成分

听起来你想识别句子的语法,这是一组单词,根据一种语言的语法,它们作为一个单一的单元运行

事实上,当语言学试图发现一种语言的语法时,他们在某种程度上是通过观察语法来发现的。在你的例子中,这是一组词可以移动到一个句子中的不同位置,同时仍然保留句子的意思

成分可以是单个单词、短语,甚至是更大的组,例如整个从句。在一个句子中,它们具有嵌套的层次结构。例如,您给出的第一个示例句子可以分析为:

(S  (PP (IN On) (NP (NNP March) (CD 1)))
    (NP (PRP he))
    (VP (VBD was) (VP (VBN born))))
整个句子由a组成,后面跟着a,然后是a。介词短语可以进一步分解为一个单元,由单个单词“On”和一个名词短语组成

短语结构分析器

要自动查找成分,您可能需要使用短语结构解析器。有许多这样的解析可供选择,这些解析可作为开放源代码提供,包括:

  • (爪哇)
  • (爪哇)
  • (C++)
  • (这是用Java编写的Collins解析器的重新实现和改进版本)
  • (C++)
  • (爪哇)
  • (C#)
斯坦福和伯克利解析器可能是最容易安装和使用的。如中所示,最准确的解析器是Berkeley和Charniak。比克尔解析器比其他解析器更慢、更不准确

在线演示

有一个斯坦福解析器的在线演示。我使用演示生成了上面给出的示例句子的解析

关于删除的说明

在每个组成部分中,都会有一个。例如,以名词短语为例:

(NP(DT)(JJ大)(JJ蓝)(NN球))

这里的中心词是名词
ball
,由形容词
big
blue
修饰。如果这个名词短语嵌入到一个句子中,你可以删除那些修饰语,但仍然有一些与原句子意思一致但不太具体的东西

在名词短语中,通常可以删除形容词、非开头的名词和嵌套的介词短语


在动词短语和完整从句中,事情变得更加棘手,因为删除作为动词参数的材料会完全改变句子的解释。例如,从
中删除
这本书
他卖给吉姆这本书
导致
他卖给吉姆

我只是在查看所有这些解析器,发现了丹尼尔在Yeah写的一篇论文,这实际上是我的论文:)我想知道链接语法分析器的性能,但我在你的论文中看到你在RelEx解析器中介绍了它。嗨@dmcer,论文中的结论是什么,特别是Charniak的解析器比Stanford的解析器性能更好,对于斯坦福大学的依赖性,Charniak的推荐使用率更高,这一点仍然存在?谢谢@dmcer,我只是想检查一下软件的最新更新是否会对论文的结论产生巨大影响/改变。