是否有合理准确的启发式方法来检测英语句子的主语和宾语?

时间:2013-09-23 20:42:12

标签: nlp stanford-nlp

我意识到将句子名词短语和对象名词短语从一个句子中完美地分开是一个开放的研究问题,这里不容易解释,但有一种聪明的方法可以做到这一点(假设我已经有一个POS标记的句子)适用于大多数句子,或至少相对简单的句子?我知道,简单地假设第一个名词短语是主语是一个非常好的近似,但在以介词短语开头的句子中(例如,“穿过空地并穿过小溪跑了受惊的鹿。”),这就失败了。理想情况下,我喜欢在这种情况下也能识别主题的东西。

作为参考,该例句给出了以下使用Stanford Parser的解析树:

[ROOT [S [PP [IN Across] [NP [NP [DT the] [NN clearing] ] [CC and] [NP [IN through] ] ] ] [NP [DT the] [NN stream] ] [VP [VBD ran] [NP [DT the] [ADJP [JJ frightened] ] [NNS deer] ] ] [. .] ] ]

我目前的策略如下:

  1. 主题:在树上做一个BFS,寻找第一个NP。

  2. 动词:在树上做一个BFS,寻找第一个VP。在这个子树上,做一个寻找VB的BFS(D | G | N | P | Z)。

  3. 对象:在上面找到的VP子树上做一个BFS,寻找NP。

  4. 此策略在我的示例中产生以下结果: SUBJECT: (NP (DT the) (NN stream) ) , VERB: (VBD ran) , OBJECT: (NP (DT the) (ADJP (JJ frightened) ) (NNS deer) )

    如果可能的话,我想修改我的策略,以便在这些情况下不失败,最终导致更复杂的情况。

2 个答案:

答案 0 :(得分:6)

编辑:好的,你正在使用斯坦福解析器。然后解析器为您提供结果。例如,如果我在In London, my friend ate a big apple and a pear.上运行它,我会得到:

    (ROOT
      (S
        (PP (IN In)
          (NP (NNP London)))
        (, ,)
        (NP (PRP$ my) (NN friend))
        (VP (VBD ate)
          (NP
            (NP (DT a) (JJ big) (NN apple))
            (CC and)
            (NP (DT a) (NN pear))))
        (. .)))

然后主题是S下的NP(我的朋友),对象是S下的VP(大苹果和梨)下的NP。实际上依赖解析:

prep_in(ate-6, London-2)
poss(friend-5, my-4)
nsubj(ate-6, friend-5)
root(ROOT-0, ate-6)
det(apple-9, a-7)
amod(apple-9, big-8)
dobj(ate-6, apple-9)
det(pear-12, a-11)
dobj(ate-6, pear-12)
conj_and(apple-9, pear-12)

告诉你主题(朋友)和直接对象(苹果,梨)的头部是什么。

显然,解析器并非没有错误,实际上你的句子有反转(subj跟在动词之后)它会混淆:

(ROOT
  (S
    (PP (IN Across)
      (NP
        (NP (DT the) (NN clearing))
        (CC and)
        (NP (IN through))))
    (NP (DT the) (NN stream))
    (VP (VBD ran)
      (NP (DT the)
        (ADJP (JJ frightened))
        (NNS deer)))
    (. .)))

正确的解析将是

(ROOT
  (S
    (PP
        (PP (IN Across)
            (NP (DT the) (NN clearing)))
        (CC and)
        (PP (IN through)
            (NP (DT the) (NN stream))))
    (VP (VBD ran))
    (NP (DT the)
        (ADJP (JJ frightened))
        (NNS deer))
    (. .)))

然后您可以正确识别the frightened deer作为主题。

该怎么办?您可以尝试通过在更多的句子上重新训练它来改进解析器(除了他们训练它的那些),但这是很多工作。或者你可能会尝试识别它不正确的句子类型,并专注于识别错误。也不容易。您也可以尝试使用不同的解析器,例如LinGO project中使用的解析器,但它更难使用(我认为它需要lisp或类似的东西)

<小时/> (这是旧的答案,在我知道我们有解析器的结果之前)

除了POS标记器,我会得到一个chunker,然后是:

  • subject是第一个(顶级)NP(名词短语)。在 Across the clearing 句子中,NP将成为介词短语(PP)的一部分,所以你不会把它拿起来;它会因倒置而失败。
  • 对象是紧跟有限动词后的(顶级)NP,如果有的话。

根据chunker,您可能会错过协调的NP,可能会删除其PP的NP(获取my friend而不是my friend from New York)。

如果您无法负担运行chunker,只需查找主题/对象的头部:   - 在有限动词之前的N或主语代词(我们但不是我们)(但请记住,有John and me went to the store之类的句子。   - N或对象代词(我们但不是我们),如果有的话。您应该添加一个检查,其中N是其中一部分的NP紧跟动词并且它不是PP的一部分。假设您可以检查动词后面紧跟(Det) ((Adv) Adj)* N)

您还应该考虑问题(主题遵循有限动词,对象遵循基本动词:Do YOU see THE APPLE?)。你也可以通过要求一个主题并在动词之后寻找它来处理反转,如果你之前没有找到它,但这会导致命令式问题(Eat the deer!)。不确定是否值得。

显然,稍微不寻常的句子(例如具有无限依赖关系的句子)会让你失望(Kim, Sandy knows Chris trusts其中Kimtrusts的对象。如果在这种情况下你需要合理的答案,你需要运行一个真正的解析器。

答案 1 :(得分:0)

我现在似乎无法验证这一事实,但在几周前的一次会议中,有人声称英语中只有几千个动词。

似乎如果你能识别动词(通过蛮力?)那么主语和宾语就会在它的两边。