从零开始学Python自然语言处理(七)—— 句法结构分析

浏览: 3481

前文传送门:

从零开始学自然语言处理(六)—— 命名实体识别

在之前的 从零开始学自然语言处理(六)—— 命名实体识别 文章中,我们使用了 standford CoreNLP 工具,本文中,我们继续会使用 standford CoreNLP 进行句法分析。

句法分析分为句法结构分析(syntactic structure parsing)和依存关系分析(dependency parsing)。

以获取整个句子的句法结构为目的的称为完全句法分析,而以获得局部成分为目的的语法分析称为局部分析,依存关系分析简称依存分析。

今天我们看看句法结构分析。

简单的讲,句法结构分析方法可以分为基于规则的分析方法和基于统计的分析方法两大类。

顾名思义,句法结构分析可以帮我们分析出句子的句法结构信息(如:主谓宾、定状补)。

from nltk.parse.stanford import StanfordParser
chi_parser = StanfordParser(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")

其中,用到的内容在 从零开始学自然语言处理(六)—— 命名实体识别文章中提过,用到的chinesePCFG.ser.gz在stanford-corenlp-full-2018-10-05中的stanford-corenlp-3.9.2-models.jar解压后的内容中。

文末扫码关注公众号“数据科学杂谈”,公众号后台回复“NER”,即可获取本文所需相关安装文件~

#分析指定数据,返回一个generator
sent = '我 爱 北京 天安门'
sentence = chi_parser.raw_parse(sent)
print(sentence)
for line in sentence:
    #需要注意的是line类型为<class 'nltk.tree.Tree'>
    print(line)
    #画树
    line.draw()
    #树会弹出来显示

句法分析缩写语含义
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副词

我们试试其他的句子:

sent = u'关注 公众号 数据科学杂谈 手把手 带 你 学习 自然语言处理'
print(list(chi_parser.parse(sent.split())))

[Tree('ROOT', [Tree('IP', [Tree('NP', [Tree('NN', ['关注']), Tree('NN', ['公众号']), Tree('NN', ['数据科学杂谈']), Tree('NN', ['手把手'])]), Tree('VP', [Tree('VV', ['带']), Tree('IP', [Tree('NP', [Tree('PN', ['你'])]), Tree('VP', [Tree('VV', ['学习']), Tree('NP', [Tree('NN', ['自然语言处理'])])])])])])])]

#分析指定数据,返回一个generator
sentence = chi_parser.raw_parse(sent)
print(sentence)
for line in sentence:
    #需要注意的是line类型为<class 'nltk.tree.Tree'>
    print(line)
    #画树
    line.draw()
    #树会弹出来显示

接下来我们看看英文的句法结构分析:

#英文句法分析
eng_parser = StanfordParser(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")
print(list(eng_parser.parse("the quick brown fox jumps over the lazy dog".split())))

[Tree('ROOT', [Tree('NP', [Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['quick']), Tree('JJ', ['brown']), Tree('NN', ['fox'])]), Tree('NP', [Tree('NP', [Tree('NNS', ['jumps'])]), Tree('PP', [Tree('IN', ['over']), Tree('NP', [Tree('DT', ['the']), Tree('JJ', ['lazy']), Tree('NN', ['dog'])])])])])])]

#分析指定数据,返回一个generator
sent = r"the quick brown fox jumps over the lazy dog"
sentence = chi_parser.raw_parse(sent)
print(sentence)
for line in sentence:
    #需要注意的是line类型为<class 'nltk.tree.Tree'>
    print(line)
    #画树
    line.draw()
    #树会弹出来显示

如果想在线使用,可以:http://nlp.stanford.edu:8080/parser/文末扫码关注公众号“数据科学杂谈”,公众号后台回复“NER”,即可获取本文所需相关安装文件~

关注公众号,手把手带你通俗易懂学习自然语言处理!

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

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

0 个评论

要回复文章请先登录注册