中文句法分析
一、下载
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的安装方法见博客:
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))