• 5 依存关系和依存文法

    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'