中文 NLP (10) -- 句法解析之 转换生成语法 和 依存句法

多年来 NLP 领域最广泛的两种句法分析理论分别为 转换生成语法和依存句法。

转换生成语法

短语结构文法:形式化定义为 G = (X,V,S,R) 这样一个四元组。X 是词汇集合,称为终结符。V 是标注的集合,称为非终结符。S 属于 V ,称为文法开始符。R 是有序偶对(α,β)的集合,α 是集合 (X∪V)上的字符串,但至少包含一个非终结符,β 是(X∪V) 闭包的元素。一般的,将有序偶对 (α,β) 记为 α-> β,“->” 读作“定义为”。R 中的有序偶对称为 生产式。

上下文无关文法:给定文法 G,如果对于任意生产式 v -> w,而 v 只是一个非终结符,即 A -> w, A 属于 V,属于  (X∪V)的闭集,则称文法 G 为 上下文无关文法。

转换生产语法就是根据句子文法产生式推导出句子短语结构树的推导过程,也称为推导树

举例: 比如有上下文无关文法产生式如下

(1)S-> NR,VP        (5)NN-> 会议.

(2)VP -> VV,AS,NP  (6) NR -> 张三.

(3)NP -> NN             (7)VV -> 参加.

(4)NP -> NR             (8)AS -> 了

经过分词,标注后得到的结果如下:

张三/NR 参加/VV 了/AS 会议/NN ,推导过程如下

(NR 张三) (VV 参加) (AS 了) (NN 会议)    --> 根据规则 5,6,7,8

(NP (NR 张三) ) (VV 参加) (AS 了) (NP (NN 会议))  --> 根据规则 3,4

(NP (NR 张三) ) (VP (VV 参加) (AS 了) (NP (NN 会议)))  --> 根据规则 2

(S (NP (NR 张三) ) (VP (VV 参加) (AS 了) (NP (NN 会议)))) --> 根据规则1

这就是短语结构推导树。

nltk 操作句法树如下示例:

# -*- coding:utf-8 -*-
from __future__ import unicode_literals
import sys,os
reload(sys)
sys.setdefaultencoding("utf-8")

from nltk import Tree,ParentedTree

def flatten_childtrees(trees): # 扁平化子树结构
    children = []
    for t in trees:
        if t.height() < 3:
            children.extend(t.pos())
        elif t.height() <= 3:
            children.append(Tree(t.label(),t.pos()))
        else:
            children.extend(flatten_childtrees([c for c in t]))
        
    return children
    
def flatten_deeptree(tree): # 解析 prop
    return Tree(tree.label(),flatten_childtrees([c for c in tree]))
    
def getwordposlist(tree): # 得到所有叶子节点和词性
    return [tree[pos] + "/" + tree[pos[:-1]].label() for pos in tree.treepositions('leaves')]
    
def getbranch(tree,keyword,branchlabel): # 根据给定的词汇和子树标签,得到词汇所在的一颗子树
    gspos = tuple()
    for pos in tree.treepositions('leaves'):
        if tree[pos] == keyword:gspos = pos
    indx = -1
    for count in xrange(len(gspos) - 1):
        if tree[gspos[:indx]].label() == branchlabel:
            return tree[gspos[:indx]]
        indx -= 1
        
if __name__ == "__main__":
    mytree = Tree.fromstring("(IP (IP (NP-SBJ (NN 建筑) (NN 公司)) (VP (VV 进) \
        (NP-OBJ (NN 区)))) (PU ,)(IP (NP-SBJ (ADJP (JJ 有关)) (NP (NN 部门))) (VP (ADVP (AD 先)) \
        (VP (VV 送上)(NP-OBJ (DP (DT 这些)) (NP (NN 法规性) (NN 文件)))))) (PU ,) (IP (NP-SBJ (-NONE- *pro*))\
        (VP (ADVP (AD 然后)) (VP (VE 有) (IP-OBJ (NP-SBJ (ADJP (JJ 专门)) (NP (NN 队伍))) (VP (VV 进行) \
        (NP-OBJ (NN 监督) (NN 检查))))))) (PU 。))")
    
    # 得到所有叶子节点和词性
    wordpostaglist = [word_pos[0][0] + "/" +word_pos[0][1] for word_pos in flatten_deeptree(mytree).pos()]
    for wordpostag in wordpostaglist:
        if wordpostag.find("-NONE-") == -1: # 去除空范畴
            print wordpostag
        
    # 得到所有叶子节点和词性方法二
    for wordpostag in getwordposlist(mytree):
        if wordpostag.find("-NONE-") == -1:
            print wordpostag
    
    # 找到 “公司” 所在的 IP 子树
    branch = getbranch(mytree,"公司","IP")
    print str(branch).decode("unicode-escape")
    
    # 使用 ParentTree 过滤出所需要的子树 (消除递归嵌套)
    ptree = ParentedTree.convert(mytree)
    for subptree in ptree.subtrees(): # 递归遍历所有的子树
        if subptree.label().find("NP") != -1 and \
                    mytree[subptree.treeposition()[:-1]].label().find("NP") == -1:
            print str(subptree).decode("unicode-escape")

依存句法

配价理论:动词中心论,可以把动词比作一个带钩的原子,动词用这些钩子来吸引与其数量相同的行动元(论元)作为自己的从属成分。一个动词所具有的钩子的数量,即动词所能支配的论元的数量就构成了我们所说的动词的配价。应该指出的是,不必总是要求动词依照其配价带全所有的论元,或者说让动词达到饱和状态。有些价可以不用或空缺。

谓词论元和空范畴:就是作为谓词的动词在不饱和状态下的情况称为空范畴。

(XP(-NONE-*T*))                                          XP 的移位语迹,诸如话题化
(NP(-NONE-*))                                              NP 的移位语迹
(NP(-NONE-*PRO*))                                    隐含主语的 NP 结构
(NP(-NONE-*pro*))                                       脱落论元(省略 主语/宾语)
((-NONE-*OP*))                                            用于关系结构的空 OP 算子
(WHPP(-NONE-*OP*))                                用于特殊疑问句的空 PP 算子
(XP(-NONE-*RNR*))                                    用于右侧节点提升的空语类
(XP(-NONE-*?*))                                          省略占位符

轻动词:在机构中所起的语义作用非常有限,主要扮演功能上的辅助角色的一类特殊的动词。

一个动词可同时用于轻动词和非轻动词,需要确定轻动词的语义。轻动词的论元结构和非轻动词是不同的。在轻动词结构,真正的谓语通常是轻动词支持的名词化的谓词结构。

配价词典:统计每个动词可能的语义和每种语义的价数,价质(语义角色 施事受事与事)和价形(句法位置 主语宾语状语)

依存理论概述:张三/nh 参加/v 了/u 这次/r 会议/n (LTP 分词和标注结果)

分词和标注列表形式
0张三nh
1参加v
2u
3这次r
4会议n
加入依存关系列并给出根节点序号为 0
0张三nh 
1参加v0
2u 
3这次r 
4会议n 
依次补全剩下的节点的依存关系
0张三nh1
1参加v0
2u1
3这次r4
4会议n1
依存句法的生成
0张三nh1SBV
1参加v0HED
2u1RAD
3这次r4ATT
4会议n1VOB
LTP 的依存句法解析标签
关系类型TagDescriptionExample
主谓关系SBVsubject-verb我送她一束花(我 <-- 送)
动宾关系VOB直接宾语我送她一束花(送 --> 花)
间宾关系IOB间接宾语我送她一束花(送 --> 她)
前置宾语FOB前置宾语他什么书都读 (书 <-- 读)
兼语DBLdouble

他请我吃饭(请 --> 我)

定中关系ATTattribute红苹果 (红 <-- 苹果)
状中结构ADVadverbial非常美丽(非常 <-- 美丽)
动补结构CMPcomplement做完了作业(做 --> 完)
并列关系COOCoordinate大山和大海(大山 --> 大海)
介宾关系POBpreposition-object在贸易区内(在 --> 内)
左附加关系LADleft adjunct大山和大海(和 <-- 大海)
右附加关系RADright adjunct孩子们(孩子 --> 们)
独立结构ISindependent structure两个单句在结构上批次独立
核心关系HEDhead指整个句子的核心

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值