从零开始学Python自然语言处理(九)—— 依存句法分析

浏览: 5878

前文传送门:


依存句法分析(Dependency Parsing, DP) 是通过分析语言单位内成分之间的依存关系揭示其句法结构。依存句法通过分析语言单位内成分之前的依存关系解释其句法结构,主张句子中核心动词是支配其他成分的中心成分。而它本身却不受其他任何成分的支配,所有受支配成分都以某种关系从属于支配者。依存语法的结构没有非终结点,词与词之间直接发生依存关系,构成一个依存对,其中一个是核心词,也叫支配词,另一个叫修饰词,也叫从属词。依存关系用一个有向弧表示,叫做依存弧。依存弧的方向为由从属词指向支配词,当然反过来也是可以的,按个人习惯统一表示即可。

依存句法分析的五个条件:

(1)一个句子中只有一个成分是独立的

(2)句子的其他成分都从属于某一成分

(3)任何一个成分都不能依存于两个或两个以上的成分

(4)如果成分A直接从属成分B,而成分C在句子中位于A和B之间,那么,成分C或者从属于A,或者从属于B,或者从属于A和B之间的某一成分

(5)中心成分左右两边的其他成分相互不发生关系

举个例子:
依存句法可以用一棵依存关系树来表示, 如图 1 例子所示, 在“全国人民共同关心汶川"这句话中, 每个词都依存于一个其他的词, 其中"关心"是句子的根节点依存于虚根( ROOT ) 。依存关系也标注在图上, 例如: "全国"依存于"人民", 依存关系为定中关系; "人民"依存于"关心", 依存关系为主谓关系。在网上找到一张图:

我们加载StanfordDependencyParser来进行依存句法分析:

#英文依存句法分析
from nltk.parse.stanford import StanfordDependencyParser
eng_parser = StanfordDependencyParser(r"C:\Users\Dell\Downloads\stanford-parser-full-2018-10-17\stanford-parser.jar",r"C:\Users\Dell\Downloads\stanford-parser-full-2018-10-17\stanford-parser-3.9.2-models.jar",r"F:\stanford-parser-3.9.2-models\edu\stanford\nlp\models\lexparser\englishPCFG.ser.gz")
res = list(eng_parser.parse("the quick brown fox jumps over the lazy dog".split()))
for row in res[0].triples():
    print(row)

#中文依存句法分析
from nltk.parse.stanford import StanfordDependencyParser
chi_parser = StanfordDependencyParser(r"C:\Users\Dell\Downloads\stanford-parser-full-2018-10-17\stanford-parser.jar",r"C:\Users\Dell\Downloads\stanford-parser-full-2018-10-17\stanford-parser-3.9.2-models.jar",r"F:\stanford-parser-3.9.2-models\edu\stanford\nlp\models\lexparser\chinesePCFG.ser.gz")
res = list(chi_parser.parse(u'关注 数据科学杂谈 公众号 从零开始 学习 自然语言处理'.split()))
for row in res[0].triples():
    print(row)

附上相关的解释:

ROOT:要处理文本的语句
IP:简单从句
NP:名词短语
VP:动词短语
PU:断句符,通常是句号、问号、感叹号等标点符号
LCP:方位词短语
PP:介词短语
CP:由‘的’构成的表示修饰性关系的短语
DNP:由‘的’构成的表示所属关系的短语
ADVP:副词短语
ADJP:形容词短语
DP:限定词短语
QP:量词短语
NN:常用名词
NR:固有名词
NT:时间名词
PN:代词
VV:动词
VC:
CC:表示连词
VE:
VA:表语形容词
AS:内容标记(如:了)
VRD:动补复合词
CD: 表示基数词
DT: determiner 表示限定词
EX: existential there 存在句
FW: foreign word 外来词
IN: preposition or conjunction, subordinating 介词或从属连词
JJ: adjective or numeral, ordinal 形容词或序数词
JJR: adjective, comparative 形容词比较级
JJS: adjective, superlative 形容词最高级
LS: list item marker 列表标识
MD: modal auxiliary 情态助动词
PDT: pre-determiner 前位限定词
POS: genitive marker 所有格标记
PRP: pronoun, personal 人称代词
RB: adverb 副词
RBR: adverb, comparative 副词比较级
RBS: adverb, superlative 副词最高级
RP: particle 小品词 
SYM: symbol 符号
TO:”to” as preposition or infinitive marker 作为介词或不定式标记 
WDT: WH-determiner WH限定词
WP: WH-pronoun WH代词
WP$: WH-pronoun, possessive WH所有格代词
WRB:Wh-adverb WH副词

关系表示
abbrev: abbreviation modifier,缩写
acomp: adjectival complement,形容词的补充;
advcl : adverbial clause modifier,状语从句修饰词
advmod: adverbial modifier状语
agent: agent,代理,一般有by的时候会出现这个
amod: adjectival modifier形容词
appos: appositional modifier,同位词
attr: attributive,属性
aux: auxiliary,非主要动词和助词,如BE,HAVE SHOULD/COULD等到
auxpass: passive auxiliary 被动词
cc: coordination,并列关系,一般取第一个词
ccomp: clausal complement从句补充
complm: complementizer,引导从句的词好重聚中的主要动词
conj : conjunct,连接两个并列的词。
cop: copula。系动词(如be,seem,appear等),(命题主词与谓词间的)连系
csubj : clausal subject,从主关系
csubjpass: clausal passive subject 主从被动关系
dep: dependent依赖关系
det: determiner决定词,如冠词等
dobj : direct object直接宾语
expl: expletive,主要是抓取there
infmod: infinitival modifier,动词不定式
iobj : indirect object,非直接宾语,也就是所以的间接宾语;
mark: marker,主要出现在有“that” or “whether”“because”, “when”,
mwe: multi-word expression,多个词的表示
neg: negation modifier否定词
nn: noun compound modifier名词组合形式
npadvmod: noun phrase as adverbial modifier名词作状语
nsubj : nominal subject,名词主语
nsubjpass: passive nominal subject,被动的名词主语
num: numeric modifier,数值修饰
number: element of compound number,组合数字
parataxis: parataxis: parataxis,并列关系
partmod: participial modifier动词形式的修饰
pcomp: prepositional complement,介词补充
pobj : object of a preposition,介词的宾语
poss: possession modifier,所有形式,所有格,所属
possessive: possessive modifier,这个表示所有者和那个’S的关系
preconj : preconjunct,常常是出现在 “either”, “both”, “neither”的情况下
predet: predeterminer,前缀决定,常常是表示所有
prep: prepositional modifier
prepc: prepositional clausal modifier
prt: phrasal verb particle,动词短语
punct: punctuation,这个很少见,但是保留下来了,结果当中不会出现这个
purpcl : purpose clause modifier,目的从句
quantmod: quantifier phrase modifier,数量短语
rcmod: relative clause modifier相关关系
ref : referent,指示物,指代
rel : relative
root: root,最重要的词,从它开始,根节点
tmod: temporal modifier
xcomp: open clausal complement
xsubj : controlling subject 掌控者

由于本人没找到NLTK绘制依存句法分析的结果可视化,使用HanLP来实现,HanLP也是一款优秀的NLP处理库,安装方式为:

pip install pyhanlp

使用如下代码:

from pyhanlp import HanLP 

para_sen = "关注数据科学杂谈公众号,从零开始学习自然语言处理。"
sentence = HanLP.parseDependency(para_sen)
print(sentence)

# 输出依存文法的结果 txt文件,在windows系统下的 Dependency Viewer.exe 打开文件
path = "F:/text_return.txt"
with open(path, "w", encoding='utf-8'as f:
     f.write(str(sentence))
print("path:%s" % (path))

如果不出意外,会抛出异常:

#ValueError: 配置错误: 数据包 D:/Anaconda3/lib/site-packages/pyhanlp/static\data 不存在,请修改配置文件中的root

此时提示缺少相关data文件夹,从http://nlp.hankcs.com/download.php?file=data下载,如果速度过慢,可以关注公众号“数据科学杂谈”,回复“依存”,获取资料。下载后解压出的data文件夹,放在D:/Anaconda3/lib/site-packages/pyhanlp/static路径下,如下图:然后运行代码出现以下结果:然后根据上面的代码,会生成一个txt文件在我的F盘

之后我们需要借助可视化工具:DependencyViewer如果自己不想去找软件,可以关注公众号“数据科学杂谈”,回复“依存”,获取软件。安装完软件之后,打开软件,点击File -> Read Conll File,然后打开上面代码生成的txt,如下图:

即可获取到依存句法分析可视化:

扫码下图关注我们不会让你失望!

推荐 0
本文由 ID王大伟 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册