如何使用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

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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