使用Stanford Parser的PDFG算法进行句法分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/meiqi0538/article/details/82392403

1 Stanford Parser简介与安装

Stanford Parser顾名思义是由斯坦福大学自然语言小组开发的开源句法分析器,是基于概率统计句法分析的一个Java实现。该句法分析器目前提供了5个中文文法的实现。他的优点在于:

  • 既是一个高度优化的概率上下文无关文法和词汇化依存分析器,又是一个词汇化上下文无关文法分析器;

  • 以权威的并州树库作为分析器的训练数据,支持多语言。目前已经支持英文,中文,德文,意大利文,阿拉伯文等;

  • 提供了多样化的分析输出形式,出句法分析树外,还支持分词和词性标注、短语结构、依存关系等输出;

  • 内置了分词,词性标注,基于自定义树库的分析器训练等辅助工作。

  • 支持多平台,并封装了多种常用语言的接口,例如:java,python,php,ruby等。

本介绍是基于Stanford Parser的Python接口。由于该句法分析器底层是由java实现,因此使用时需要确保安装JDK。当前,最新的Stanford Parser版本为3.9.1,对JDK的要求是1.8以上。网上JDK的安装教程有很多,可以搜索查看,需要注意的是要配置JAVA_HOME环境变量。

Stanford Parser的Python封装是在nltk库中实现的,因此我们需要安装nltk库。nltk是一款Python的自然语言处理处理工具,但是主要针对英文,对中文效果不好,我们只是用nltk.parse中的Stanford模块。nltk安装可见

接下来,需要下载Stanford Parser的jar包,主要有两个:stanford-parser.jar和stanford-parser-3.8.0-models.jar。在Stanford Parser3.9.1官方版本已经内置中文句法分析的一些算法,官方下载地址:https://nlp.stanford.edu/software/lex-parser.shtml#Download下载相应文件,进行解压,找到文件。
这里写图片描述

2.基于PCFG的中文句法分析案例

这里我们测试句子:“我爱北京天安门”为例进行句法分析。

首先我们需要使用jieba分词对目标字符串进行分词,jieba分词使用可见:https://blog.csdn.net/meiqi0538/article/details/80213431

#分词
import jieba
#导入nltk中斯坦福的分析器
from nltk.parse import stanford
import os

target_str="我爱北京天安门"
seg_list=jieba.cut(target_str,cut_all=False,HMM=True)
#用空格再重新拼接分词的结果,因为Stanford Parser的句法分析器接受的输入是分词完后以空格隔开的句子。
seg_str=' '.join(seg_list)
root=os.getcwd()
#分析器的路径
parser_path=root+"\\stanford-parser.jar"
model_path=root+"\\stanford-parser-3.9.1-models.jar"
#指定JDK路径,如果没有配置JAVA_HOME系统设置
if not os.environ.get('JAVA_HOME'):
    #设置jdk地址
    JAVA_HOME="C:/Development/Java/jdk1.8.0_171"
    os.environ['JAVA_HOME']=JAVA_HOME
#PCFG模型路径
pcfg_path='edu/stanford/nlp/models/lexparser/chinesePCFG.ser.gz'
#配置解析器
parser=stanford.StanfordParser(
    path_to_jar=parser_path,
    path_to_models_jar=model_path,
    model_path=pcfg_path
    )
#分析指定数据,返回一个generator
sentence=parser.raw_parse(seg_str)
print(sentence)
for line in sentence:
    #需要注意的是line类型为<class 'nltk.tree.Tree'>
    print(line)
    #画树
    line.draw()

结果为:

这里写图片描述

这里写图片描述
代码注解:在配置Stanford Parser中,传入三个参数分别为:path_to_jar:Stanford Parser的jar包,model_path:其训练好的jar包,这是之前已经下载好的(解压文件即可查找到),model_path:需要调用的句法分析器的java class路径。

补充:如果子叶子节点可以通过line.leaves()获取,结果可见:

['我', '爱', '北京', '天安门']

这里写图片描述

猜你喜欢

转载自blog.csdn.net/meiqi0538/article/details/82392403