首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用java获取句子的逻辑部分?

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

Stack Overflow用户
提问于 2010-04-23 23:09:12
回答 2查看 6.7K关注 0票数 6

假设有一句话:

代码语言:javascript
复制
On March 1, he was born.

将其更改为

代码语言:javascript
复制
He was born on March 1.

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-24 11:29:06

Constituents

这听起来像是您想要识别句子的,它是一组单词,根据语言的语法作为一个单独的单元进行操作。

事实上,当语言学试图发现一种语言的语法时,他们在一定程度上通过查看movement来实现。与您的示例一样,这是一组单词可以移动到句子中的不同位置,同时仍然保留句子的含义。

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

代码语言:javascript
复制
(S  (PP (IN On) (NP (NNP March) (CD 1)))
    (NP (PRP he))
    (VP (VBD was) (VP (VBN born))))

整个句子由一个prepositional phrase组成,后跟一个noun phrase,然后是一个verb phrase。介词短语可以进一步分解为一个单元,该单元由单个单词'On‘后跟一个名词短语组成。

短语结构分析器

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

  • Stanford Parser (Java)
  • Berkeley Parser (Java)
  • BLLIP (Charniak-Johnson) Parser (C++)
  • Bikel Parser (这是用Java)
  • Collins Parser (C++)
  • OpenNLP Parser (Java)
  • SharpNLP Parser (C#)

编写的Collins解析器的重新实现和改进版本

Stanford和Berkeley解析器可能是最容易安装和使用的。正如在Cer et al. 2010中所看到的,最准确的解析器是Berkeley和Charniak。与其他解析器相比,Bikel解析器速度较慢,精度也较低。

在线演示

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

关于删除的说明

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

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

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

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

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

票数 27
EN

Stack Overflow用户

发布于 2010-04-23 23:13:01

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2699646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档