ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【编译原理】Python自然语言处理中的语法分析

2021-03-18 12:02:41  阅读:746  来源: 互联网

标签:Parser 语法分析 stanford Python jar parser 句法分析 Stanford 自然语言


目录

一、实验目的

二、实验任务

三、实验原理

1  自然语言处理概述

2  Stanford Parser简介

四、实验过程

1 安装JDK

2 下载StanfordParser[3],配置环境变量

3 安装NLTK库,配置环境变量

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

五、实验结果

1 任务一

2 任务二

参考资料

附录

1 任务1代码

2 任务2代码


一、实验目的

1、熟悉中文句法分析;

2、掌握如何使用Stanford Parser工具完成句法分析

二、实验任务

识别句子所包含的句法成分以及这些成分之间的关系,一般以句法树表示句法分析的结果。

1、对“他骑自行车去了菜市场。”进行句法分析。

2、对文本“我爱北京天安门。”进行句法分析。

三、实验原理

自然语言处理概述

句法分析[2]是自然语言处理(natural language processing, NLP)中的关键底层技术之一,其基本任务是确定句子的句法结构或者句子中词汇之间的依存关系。常见的主流技术为基于统计的方法是现阶段句法分析的主流技术。常见的概率句法分析模型包括概率上下文无关模型、基于历史的句法分析模型、层次化渐进式的句法分析模型和中心词驱动的句法分析模型。综合多种模型而实现的句法分析器种类繁多,目前在开源中文句法分析器中比较具有代表性有Stanford parser和 Berkeley parser。前者基于因子模型,后者基于非词汇化分析模型。随着自然语言应用的日益广泛,特别是对文本处理需求的进一步增加,句法分析的作用愈加突出,它在机器翻译、信息检索与抽取、问答系统、语音识别等研究领域中都有重要的应用价值。

句法分析分为:句法结构分析和依存关系分析两种。这里主要采用语法树来表示句法分析的结果。

2  Stanford Parser简介

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

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

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

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

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

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

本次实验基于Stanford Parser的Python接口进行实现。其中的缩写单词及含义见下表3.1.

表3.1 Stanford Parser缩写及含义对应表

缩写

含义

ROOT

要处理文本的语句;

IP

简单从句;

NP

名词短语

VP

动词短语

PN

代词

VV

动词

NN

常用名词

、实验过程

1 安装JDK

(1)下载JDK.

图4.1 JDK压缩包

(2) 配置环境变量

图4.2 配置环境变量

a.新建-->变量名-->”JAVA_HOME”,变量值-->JDK的安装路径

b.新建-->变量名-->”CLASSPATH”,变量值--> “%JAVA_HOME%\lib”

c.编辑-->变量名”Path”,增加变量值--> “%JAVA_HOME%\bin”

(3) 检验是否安装配置成功

输入cmd,进入dos界面,输入Java。如下图所示,安装配置成功。

图4.3 JDK安装成功示意图

2 下载StanfordParser[3],配置环境变量

图4.4  Stanford Parser 3.9.2

(1)需要三个文件:

  1. stanford-parser-3.9.2-models.jar
  2. stanford-parser.jar
  3. chinesePCFG.ser.gz(中文句法分析)

获取上述三个文件:解压刚下载的压缩包(stanford-parser-full-2018-10-17.zip),从中找到stanford-parser-3.9.2-models.jar和stanford-parser.jar文件。再将stanford-parser-3.9.2-models.jar文件解压,chinesePCFG.ser.gz文件就藏在stanford-parser-3.9.2-models.jar文件中,一直单击\edu\stanford\nlp\models\lexparser,找到chinesePCFG.ser.gz文件。

(2)配置环境变量:

Stanford NLP是由java开发的,Stanford Parser模型被包含在jar文件中。去访问该模型的最简单的方式是:将该jar文件放到java的CLASSPATH中。

将上述三个文件的路径放于CLASSPATH环境变量中,如下图所示:

图4.5 配置环境变量

3 安装NLTK库,配置环境变量

由于我之前已经安装了nltk库,在Anaconda下可以搜索到,所以没重新进行安装,如下图所示。

图4.6 nltk示意图

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

Step 1:使用Jieba分词;

Step 2:采用中文PCFG算法进行句法分析。

五、实验结果

1 任务一

Jieba分词结果:'他 骑 自行车 去 了 菜市场';之后采用中文PCFG算法进行句法分析,句法树如下图所示:

图5.1 任务1句法树

根据表3.1,由图5.1可知,任务一的例句的句法分析正确。‘他’为代词,‘骑’和‘去’为动词,‘自行车’和‘菜市场’为名词,‘了’为介词。但是,句法分析的前提是jieba分词一定要准确,因为我们进行此实验是基于jieba进行分词。

2 任务二

Jieba分词结果:'我 爱 北京 天安门';之后采用中文PCFG算法进行句法分析,句法树如下图所示:

 

图5.2 任务2句法树

根据表3.1,由图5.2可知,任务二的例句的句法分析正确。‘我’为代词,‘爱’为动词,‘北京’和‘天安门’为名词。

参考资料

  1. Stanford Parser简介:https://blog.csdn.net/meiqi0538/article/details/82392403
  2. 自然语言处理概述:https://www.csdn.net/gather_27/MtTacg4sOTE1My1ibG9n.html
  3. Windows下StanfordParser的使用:https://blog.csdn.net/qq_41618091/article/details/97239505

附录

1 任务1代码

import jieba as jeb

string1="他骑自行车去了菜市场"

string2="我爱北京天安门"

 

seg_list=jeb.cut(string1,cut_all=False,HMM=True)

seg_str=' '.join(seg_list)

 

import os

from nltk.parse import stanford

 

root="D:\\Anaconda_App\\jar\\";

os.environ['STANFORD_PARSER'] = root+"stanford-parser.jar"

os.environ['STANFORD_MODELS'] = root+"stanford-parser-3.9.2-models.jar"

parser=stanford.StanfordParser(model_path=root+"chinesePCFG.ser.gz")

 

 

sent = parser.raw_parse(seg_str)

for line in sent:

    line.draw()

2 任务2代码

import jieba as jeb

string1="他骑自行车去了菜市场"

string2="我爱北京天安门"

 

seg_list=jeb.cut(string2,cut_all=False,HMM=True)

seg_str=' '.join(seg_list)

 

import os

from nltk.parse import stanford

 

root="D:\\Anaconda_App\\jar\\";

os.environ['STANFORD_PARSER'] = root+"stanford-parser.jar"

os.environ['STANFORD_MODELS'] = root+"stanford-parser-3.9.2-models.jar"

parser=stanford.StanfordParser(model_path=root+"chinesePCFG.ser.gz")

 

 

sent = parser.raw_parse(seg_str)

for line in sent:

    line.draw()

 

标签:Parser,语法分析,stanford,Python,jar,parser,句法分析,Stanford,自然语言
来源: https://blog.csdn.net/weixin_43442778/article/details/114971460

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有