5 依存关系和依存文法

短语结构文法是关于词和词序列如何结合起来形成句子成分的。一个独特的和互补的方式,依存语法,集中关注的是词与其他词之间的关系。依存关系是一个中心词与它的依赖之间的二元对称关系。一个句子的中心词通常是动词,所有其他词要么依赖于中心词,要么依赖路径与它联通。

一个句子的中心词通常是动词,所有其他词要么依赖于中心词,要么依赖路径与它联通。5.1显示一个依存关系图,箭头从中心词指出它们的依赖。

Images/depgraph0.png

图 5.1:依存结构:箭头从中心词指向它们的依赖;标签表示依赖的语法功能如:主语、宾语或修饰语。

5.1中的弧加了依赖与它的中心词之间的语法功能标签。例如,I 是 shot(这是整个句子的中心词)的SBJ(主语),in 是一个NMOD(elephant 的名词修饰语)。与短语结构语法相比,依存语法可以作为一种依存关系直接用来表示语法功能。

下面是 NLTK 为依存语法编码的一种方式——注意它只能捕捉依存关系信息,不能指定依存关系类型:

  1. >>> groucho_dep_grammar = nltk.DependencyGrammar.fromstring("""
  2. ... 'shot' -> 'I' | 'elephant' | 'in'
  3. ... 'elephant' -> 'an' | 'in'
  4. ... 'in' -> 'pajamas'
  5. ... 'pajamas' -> 'my'
  6. ... """)
  7. >>> print(groucho_dep_grammar)
  8. Dependency grammar with 7 productions
  9. 'shot' -> 'I'
  10. 'shot' -> 'elephant'
  11. 'shot' -> 'in'
  12. 'elephant' -> 'an'
  13. 'elephant' -> 'in'
  14. 'in' -> 'pajamas'
  15. 'pajamas' -> 'my'

依存关系图是一个投影,当所有的词都按线性顺序书写,边可以在词上绘制而不会交叉。这等于是说一个词及其所有后代依赖(依赖及其依赖的依赖,等等)在句子中形成一个连续的词序列。5.1是一个投影,我们可以使用投影依存关系分析器分析很多英语句子。下面的例子演示groucho_dep_grammar如何提供了一种替代的方法来捕捉附着歧义,我们之前在研究短语结构语法中遇到的。

  1. >>> pdp = nltk.ProjectiveDependencyParser(groucho_dep_grammar)
  2. >>> sent = 'I shot an elephant in my pajamas'.split()
  3. >>> trees = pdp.parse(sent)
  4. >>> for tree in trees:
  5. ... print(tree)
  6. (shot I (elephant an (in (pajamas my))))
  7. (shot I (elephant an) (in (pajamas my)))

这些括号括起来的依存关系结构也可以显示为树,依赖被作为它们的中心词的孩子。

  1. VP -> TV NP
  2. TV -> 'chased' | 'saw'