代码之家  ›  专栏  ›  技术社区  ›  Fluffy

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

  •  6
  • Fluffy  · 技术社区  · 15 年前

    假设有一句话:

    On March 1, he was born.
    

    将其更改为

    He was born on March 1.
    

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

    2 回复  |  直到 12 年前
        1
  •  26
  •   dmcc    12 年前

    成分

    听起来你想确定句子的 constituents 根据一种语言的语法,这些词是作为一个单一单位运行的一组词。

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

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

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

    整个句子由 prepositional phrase ,然后是 noun phrase ,然后a verb phrase . 介词短语可以进一步分解成一个单位,由一个单词“on”后跟一个名词短语组成。

    短语结构分析器

    要自动查找成分,您可能需要使用 短语结构分析器 . 有许多这样的解析可供选择,其中包括:

    斯坦福和伯克利的解析器可能是最容易安装和使用的。如中所示 Cer et al. 2010 最精确的解析器是伯克利和查尼克。比克尔解析器比其他解析器更慢,更不精确。

    在线演示

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

    关于删除的注释

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

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

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

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

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

        2
  •  1
  •   WhirlWind    15 年前

    OpenNLP 可以帮你做些这个吗? Phrase chunking 解析可以帮助您实现这一点。然而,这并不是一个特别简单的问题,而且随着句子结构变得更加复杂和模棱两可,算法往往会变得混乱。你有时应该能够对句子中的短语重新排序并保持意义。