中文句法分析_句法分析StanfordParser+依存句法分析pyhanlp

14天阅读挑战赛

中文句法分析

一、下载

StanfordParser下载地址
在这里插入图片描述
下载过后解压压缩包,找到下图中的两个个文件
在这里插入图片描述
我们需要的是:
1.stanford-parser.jar
2.stanford-parser-4.2.0-models.jar
3.chinesePCFG.ser.gz
第三个文件我们暂时在文件夹种没有找到。我们将stanford-parser-4.2.0-models.jar进行解压,发现多出来edu文件夹,一直点,找到了chinesePCFG.ser.gz,路径是
.\edu\stanford\nlp\models\lexparser\chinesePCFG.ser.gz,这样我们需要的三个文件都集齐了!

二、配置环境变量

Stanford NLP是由java开发的,Stanford Parser模型被包含在jar文件中。要访问该模型的最简单的方式是:将该jar文件放到java的CLASSPATH中。
在这里插入图片描述

三、安装nltk库

直接pip,干就完了!

四、句法分析举个栗子
#coding=utf-8
import jieba
from nltk.parse import stanford
import os
string = '东京2020年奥运会组委会和国际奥委会达成协议'
#string = 'He met Jenny with flowers'
seg_list = jieba.cut(string, cut_all=False, HMM=True)
seg_str = ' '.join(seg_list)
print(seg_str)

在这里插入图片描述

if not os.environ.get('JAVA_HOME'):
    JAVA_HOME = 'D:/software/java/jdk'
    os.environ['JAVA_HOME'] = JAVA_HOME
# PCFG模型路径
pcfg_path = 'E:/jupyterAnaconda/jar/chinesePCFG.ser.gz'

root = 'E:/jupyterAnaconda/jar/'
parser_path = root + 'stanford-parser.jar'
model_path =  root + 'stanford-parser-4.2.0-models.jar'

parser = stanford.StanfordParser(
    path_to_jar=parser_path,
    path_to_models_jar=model_path,
    model_path=pcfg_path
    )
sentence = parser.raw_parse(seg_str)
for line in sentence:
    print(line.leaves())
    line.draw()

在这里插入图片描述
在这里插入图片描述
词性说明

ROOT :	要处理文本的语句
IP   :	简单从句
NP   :	名词短语
VP   :	动词短语
PU   :	断句符,通常是句号、问号、感叹号等标点符号
LCP  :	方位词短语
PP   :	介词短语
CP   :	由‘的’构成的表示修饰性关系的短语
DNP  :	由‘的’构成的表示所属关系的短语
ADVP :	副词短语
ADJP :	形容词短语
DP   :	限定词短语
QP   :	量词短语
NN   :	常用名词
NT   :	时间名词
PN   :	代词
VV   :	动词
VC   :	是
CC   :	表示连词
VE   :	有
VA   :	表语形容词
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副词
五、依存句法分析举个栗子

pyhanlp的安装方法见博客:https://blog.csdn.net/qq_45556665/article/details/127294692

from pyhanlp import *

sentence = "下雨天地面积水"
terms = HanLP.segment(sentence )  
for term in terms:
    # 词和词性from pyhanlp import *
    print(term.word,term.nature)

document = "水利部水资源司司长陈明忠9月29日在国务院新闻办举行的新闻发布会上透露," \
           "根据刚刚完成了水资源管理制度的考核,有部分省接近了红线的指标," \
           "有部分省超过红线的指标。对一些超过红线的地方,陈明忠表示,对一些取用水项目进行区域的限批," \
           "严格地进行水资源论证和取水许可的批准。"

# 提取document的两个关键词
print(HanLP.extractKeyword(document, 2))

# 提取ducument中的3个关键句作为摘要
print(HanLP.extractSummary(document, 3))

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

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

在这里插入图片描述
在这里插入图片描述
依存关系说明

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,组合数字
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 掌控者
六、另一个栗子

数据:一共包含10段文本
在这里插入图片描述
生成句法分析树
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
依存句法分析

from pyhanlp import *
text = ''
with open('data.txt','r',encoding='utf-8') as inf:
    text = inf.read() # 读入文本数据
# 提取text的两个关键词
print(HanLP.extractKeyword(text, 2))

在这里插入图片描述

# 提取text中的3个关键句作为摘要
print(HanLP.extractSummary(text, 3))

在这里插入图片描述

# para_sen = "1955年6月美国旧金山历经艰难险阻已过而立之年的师昌绪登上了克利夫兰总统号轮船"
text = ''
path = "data_return.txt"
with open('data.txt','r',encoding='utf-8') as inf:
    text = inf.readlines() # 以行的方式读入文本数据
# print(text)
for item in range(len(text)): # 依次读取每行文本
    para_sen = text[item]
    sentence = HanLP.parseDependency(para_sen) # 对每一行句子进行依存句法分析
    print(sentence)
    print("========================================")
    # 输出依存文法的结果 txt文件
    with open(path, "a", encoding='utf-8') as f:
         f.write(str(sentence))
print("path:%s" % (path))

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敷衍zgf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值