5 依存关系和依存文法
短语结构文法是关于词和词序列如何结合起来形成句子成分的。一个独特的和互补的方式,依存语法,集中关注的是词与其他词之间的关系。依存关系是一个中心词与它的依赖之间的二元对称关系。一个句子的中心词通常是动词,所有其他词要么依赖于中心词,要么依赖路径与它联通。
一个句子的中心词通常是动词,所有其他词要么依赖于中心词,要么依赖路径与它联通。5.1显示一个依存关系图,箭头从中心词指出它们的依赖。
图 5.1:依存结构:箭头从中心词指向它们的依赖;标签表示依赖的语法功能如:主语、宾语或修饰语。
5.1中的弧加了依赖与它的中心词之间的语法功能标签。例如,I 是 shot(这是整个句子的中心词)的SBJ
(主语),in 是一个NMOD
(elephant 的名词修饰语)。与短语结构语法相比,依存语法可以作为一种依存关系直接用来表示语法功能。
下面是 NLTK 为依存语法编码的一种方式——注意它只能捕捉依存关系信息,不能指定依存关系类型:
>>> groucho_dep_grammar = nltk.DependencyGrammar.fromstring("""
... 'shot' -> 'I' | 'elephant' | 'in'
... 'elephant' -> 'an' | 'in'
... 'in' -> 'pajamas'
... 'pajamas' -> 'my'
... """)
>>> print(groucho_dep_grammar)
Dependency grammar with 7 productions
'shot' -> 'I'
'shot' -> 'elephant'
'shot' -> 'in'
'elephant' -> 'an'
'elephant' -> 'in'
'in' -> 'pajamas'
'pajamas' -> 'my'
依存关系图是一个投影,当所有的词都按线性顺序书写,边可以在词上绘制而不会交叉。这等于是说一个词及其所有后代依赖(依赖及其依赖的依赖,等等)在句子中形成一个连续的词序列。5.1是一个投影,我们可以使用投影依存关系分析器分析很多英语句子。下面的例子演示groucho_dep_grammar
如何提供了一种替代的方法来捕捉附着歧义,我们之前在研究短语结构语法中遇到的。
>>> pdp = nltk.ProjectiveDependencyParser(groucho_dep_grammar)
>>> sent = 'I shot an elephant in my pajamas'.split()
>>> trees = pdp.parse(sent)
>>> for tree in trees:
... print(tree)
(shot I (elephant an (in (pajamas my))))
(shot I (elephant an) (in (pajamas my)))
这些括号括起来的依存关系结构也可以显示为树,依赖被作为它们的中心词的孩子。
VP -> TV NP
TV -> 'chased' | 'saw'