3

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

作为参考,该例句使用斯坦福解析器给出了以下解析树:

[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。在这个子树上,做一个 BFS 寻找 VB(D|G|N|P|Z)。

  3. 对象:对上面找到的 VP 子树执行 BFS,寻找 NP。

对于我的示例,此策略导致以下结果: SUBJECT: (NP (DT the) (NN stream) ) , VERB: (VBD ran) , OBJECT: (NP (DT the) (ADJP (JJ frightened) ) (NNS deer) ).

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

4

2 回答 2

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)

告诉你主语(朋友)和直接宾语(苹果、梨)的头是什么。

显然,解析器并非没有错误,实际上在你的倒置句子中(主语跟在动词后面)它会感到困惑:

(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 项目中使用的解析器,但使用起来要困难得多(我认为它需要 lisp 或类似的东西)


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

除了 POS 标记器之外,我还会得到一个分块器,然后:

  • 主语是第一个(顶级)NP(名词短语)。在您的Across the clearing句子中,NP 将是介词短语(PP)的一部分,因此您不会选择它;由于存在反转,它仍然会失败。
  • 宾语是紧跟有限动词(如果有的话)的(顶级)NP。

根据分块器的不同,您可能会错过协调的 NP,可能会剥离 NP 的 PP(得到my friend而不是my friend from New York)。

如果你负担不起运行分块器,只需寻找主语/宾语的头部: - 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

于 2013-09-24T19:50:54.883 回答
0

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

看起来如果你能识别动词(通过蛮力?),那么主语和宾语就会在它的两侧。

于 2013-09-23T20:49:51.833 回答