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

假设有这样一个句子:

On March 1, he was born.

将其改为:

He was born on March 1.

不会破坏句子的意义,并且仍然有效。以任何其他方式打乱词语会产生奇怪甚至无效的句子。 所以基本上,我讨论的是句子的各个部分,这些部分使信息更具体,但删除它们不会破坏整个句子。 是否有任何 NLP 库可以识别这些部分?


回答:

成分 (Constituents)

听起来你想要识别句子的成分(constituents),这些成分是根据语言语法作为一个单元运行的词语组合。

事实上,当语言学家试图发现一种语言的语法时,他们部分地通过观察移动(movement)来实现。 就像你的例子一样,当一组词语可以移动到句子中的不同位置,同时仍然保留句子的含义时,就会发生这种情况。

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

(S  (PP (IN On) (NP (NNP March) (CD 1)))    (NP (PRP he))    (VP (VBD was) (VP (VBN born))))

整个句子由一个介词短语,后跟一个名词短语,然后是一个动词短语组成。 介词短语可以进一步分解为一个由单个词“On”和一个名词短语组成的单元。

短语结构解析器

要自动查找成分,你可能需要使用短语结构解析器。 有很多这样的解析器可供选择,它们都是开源的,包括:

Stanford 和 Berkeley 解析器可能最容易安装和使用。 正如Cer et al. 2010中看到的那样,最准确的解析器是 Berkeley 和 Charniak。 Bikel 解析器比其他解析器慢且准确性较低。

在线演示

这里有 Stanford 解析器的在线演示。 我使用该演示生成了上面给出的示例句子的解析结果。

关于删除的注意事项

在每个成分中,都会有一个中心词。 例如,采用名词短语:

(NP (DT The) (JJ big) (JJ blue) (NN ball))

这里的中心词是名词ball,它由形容词bigblue修饰。 如果这个名词短语嵌入在一个句子中,你可以删除这些修饰语,仍然得到一些与原始句子的含义一致但不太具体的东西。

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

在动词短语和完整从句中,事情变得更加棘手,因为删除作为动词参数的材料可能会完全改变句子的解释。 例如,从He sold Jim the book中删除the book会导致He sold Jim

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注