句法分析

句法分析是机器翻译的核心数据结构,是对语言进行深层次理解的基石。

句法分析简介

1.主要任务
识别句子中所包含的句法成分以及这些成分之间的关系,一般以句法树来表示句法分析的结果。
2.主要难点
歧义
搜索空间
3.句法分析分类
完全句法分析:企图获取整个句子的句法结构
部分句法分析:只关注局部的一些成分
4.相关方法
基于规则
存在着语法规则覆盖有限、系统可迁移差等缺陷
基于统计(主流)

数据集与评测方法

数据集

与别的语言处理所需要的数据集不同,句法分析需要的是一种树形的标注结构,又称为树库,如下图所示:

最常使用的树库为美国宾夕法尼亚大学的英文宾州树库PTB,中文树库则包括CTB、TCT和台湾中研院树库。

评测方法

主要任务是评测句法分析生成的树结构与手工标记的树结构之间的相似性程度。

1.满意度:测试句法分析器是否适合或胜任某个特定的自然语言处理任务
2.效率:运行时间
主流的评测方法是PARSEVAL评测体系,主要考察准确率、召回率、交叉括号数。其中交叉括号表示分析得到的某一个短语的覆盖范围与标准句法分析结果的某个短语的覆盖范围存在交叉又不包含的关系,即构成一个交叉括号。

句法分析的常用方法

基于PCFG的句法分析

PCFG基于概率的短语结构分析方法,是一种上下文无关文法的扩展
PCFG处理的问题
1.计算分析树的概率值
2.若一个句子有多个分析树,依据概率进行排序
3.可用来进行句法排歧
PCFG五元组表示(X,V,S,R,P)(X,V,S,R,P)
1.XX是一个有限词汇的集合(词典),其元素称为词汇或终结符
2.VV是一个有限标注的集合,称为非终结符
3.SS包含于VV,称为文法的开始符号
4.RR是有序对(α,β)(α,β)的集合,也就是产生的规则集
5.PP表示每个产生规则的统计概率
PCFG运算表示
1.形式:A→α,PA→α,P
2.约束:∑αP(A→α)

基于最大间隔马尔可夫网络的句法分析

基于最大间隔马尔可夫网络的句法分析是一种判别式的句法分析方法,通过丰富特征来消除歧义。
判别函数:

其中Φ(x,y)Φ(x,y)表示与xx相对应的句法树yy的特征向量,ww表示特征权重

基于CRF的句法分析

将句法分析作为序列标注问题来解决,可以使用CRF模型
也是判别式方法,需要融合大量特征
与PCFG的区别
1.概率计算方法和概率归一化方法不同
2.CRF模型最大化的是句法树的条件概率而非联合概率

基于移进-归约的句法分析模型

移进-规约法是一种自下而上的方法,操作的基本数据结构是堆栈。
主要操作(SS表示句法树的根节点)
1.移进:从句子左端将一个终结符移至栈顶
2.归约:根据规则,将栈顶的若干字符替换为一个字符
3.接收:句子中所有词都已入栈,且栈中只剩下一个符号SS,则分析成功
4.拒绝:句子中所有词都已入栈,且栈中并非只有一个符号SS,也无法进行任何归约操作,则分析失败

使用Stanford Parser的PCFG算法实现句法分析

Stanford Parser

Stanford Parser是基于Java的,所以需要jdk环境
Stanford Parser是封装在nltk库中实现的,所以要先安装nltk
需要下载Stanford Parser的jar包:https://nlp.stanford.edu/software/lex-parser.shtml#Download
我的百度云地址:链接:https://pan.baidu.com/s/1YkKZytQ84UqPKGQh4m77Ug
提取码:9u1o
需要三个文件:
stanford-parser-4.0.0-models.jar
stanford-parser.jar
chinesePCFG.ser.gz(中文句法分析)
注意:如果是英文句法分析,需要englishPCFG.ser.gz,而不是chinesePCFG.ser.gz
获取上述三个文件:解压刚下载的压缩包(stanford-parser-4.0.0.zip),从中找到stanford-parser-4.0.0-models.jar和stanford-parser.jar文件。再将stanford-parser-4.0.0-models.jar文件解压,chinesePCFG.ser.gz文件就藏在stanford-parser-4.0.0-models.jar文件中,一直单击\edu\stanford\nlp\models\lexparser,就可以找到chinesePCFG.ser.gz文件。

简单示例

我们对“他骑自行车去了菜市场”进行句法分析。
分词
这里我们采用Jieba分词,代码如下:

######Jieba分词######
import jieba
string='我爱NLP'
seg_list=jieba.cut(string,cut_all=False,HMM=True)
seg_str=' '.join(seg_list)
print(seg_str)

结果如下所示:
我 爱 NLP

PCFG句法分析
下面进行句法分析,代码如下所示:

######PCFG句法分析######
from nltk.parse import stanford
import osroot='file/stanford-parser-4.0.0/'
parser_path=root+'stanford-parser.jar'
model_path=root+'stanford-parser-4.0.0-models.jar'# 指定JDK路径
if not os.environ.get('JAVA_HOME'):JAVA_HOME = 'C:\Program Files\Java\jdk1.8.0_45'os.environ['JAVA_HOME'] = JAVA_HOME##PCFG模型路径
pcfg_path='file/stanford-parser-4.0.0/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)sentence=parser.raw_parse(seg_str)
for line in sentence:print(line)line.draw()

ROOT:要处理文本的语句
IP:简单从句
NP:名词短语
VP:动词短语
PN:代词
VV:动词
NN:常用名词

NLP学习(七)使用stanford实现句法分析-Python3实现相关推荐

  1. 记录重要的NLP学习资源链接

    整理一些NLP学习资源(不止NLP,本人主要关注NLP),如果有更好的,欢迎分享_ NLP 中文自然语言处理相关资料 https://github.com/crownpku/Awesome-Chine ...

  2. NLP入门概览(8) ——句法分析b:完全句法分析

      在上一部分中,我们简单介绍了完全句法分析的概念,并详细介绍了句法分析的基础:Chomsky形式文法(NLP入门概览(7) --句法分析a:Chomsky(乔姆斯基)形式文法).   在这一部分中, ...

  3. STL源码剖析学习七:stack和queue

    STL源码剖析学习七:stack和queue stack是一种先进后出的数据结构,只有一个出口. 允许新增.删除.获取最顶端的元素,没有任何办法可以存取其他元素,不允许有遍历行为. 缺省情况下用deq ...

  4. 曝!BAT大厂NLP学习进阶之法~

    "语言理解是人工智能领域皇冠上的明珠." --比尔盖茨 自然语言处理是一门综合性的学问,它远远不止机器学习算法.相比图像或语音,文本的变化更加复杂,例如从预处理来看,NLP 就要求 ...

  5. OpenCV与图像处理学习七——传统图像分割之阈值法(固定阈值、自适应阈值、大津阈值)

    OpenCV与图像处理学习七--传统图像分割之阈值法(固定阈值.自适应阈值.大津阈值) 一.固定阈值图像分割 1.1 直方图双峰法 1.2 OpenCV中的固定阈值分割 二.自动阈值图像分割 2.1 ...

  6. PyTorch框架学习七——自定义transforms方法

    PyTorch框架学习七--自定义transforms方法 一.自定义transforms注意要素 二.自定义transforms步骤 三.自定义transforms实例:椒盐噪声 虽然前面的笔记介绍 ...

  7. Docker学习七:使用docker搭建Hadoop集群

    本博客简单分享了如何在Docker上搭建Hadoop集群,我的电脑是Ubuntu20,听同学说wsl2有些命令不对,所以建议在虚拟机里按照Ubuntu或者直接安装双系统吧 Docker学习一:Dock ...

  8. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...

  9. NLP学习难在哪里?这份最全NLP学习路线图帮你解决难题!

    作为一名人工智能之自然语言处理的技术小享,最常被问到的莫过于「如何入门NLP」了? 今天小享就整理了保姆级NLP学习路线图(思维导图),非常的全面和清晰,分享给大家. 希望这个指南会伴随你们一起成长哟 ...

  10. NLP学习实践天池新人赛打卡第一天

    NLP学习实践天池新人赛打卡第一天 Task1 赛题理解 学习目标 赛题数据 数据标签 评测指标 数据读取 解题思路 Task1 赛题理解 赛题名称:零基础入门NLP之新闻文本分类 赛题目标:通过这道 ...

最新文章

  1. idea中链接mysql查询_在Idea中编写Java程序连接查询Sqlite数据库
  2. 大学计算机网络技术考试题,2017年大学生计算机考试的试题
  3. C++ 性能剖析 (四):Inheritance 对性能的影响
  4. TO B 产品经理:如何推动产品商业化?
  5. 什么是java常量?
  6. centos中bash占用cpu,linux下如何定位CPU占用高的进程的问题点
  7. 通过一段汇编,加深对寄存器ESP和EBP的理解
  8. 【Linux内核】虚拟地址空间布局架构
  9. TensorFlow 2.0 mnist手写数字识别(CNN卷积神经网络)
  10. storm基础系列之二----zookeeper的作用
  11. shader LOD快速生成具体是种怎样的技术?
  12. 【数据库实验】《小型MIS的开发》— JavaFx 开发 民航票务管理系统
  13. [LeetCode] Reverse Linked List 倒置链表
  14. TeeChart7 在delphi7中的安装步骤
  15. Editplus 破解
  16. web前端开发流程图,118页Vue面试题总结,完整PDF
  17. 什么叫显示动力学_ansys workbench的显示动力学分析的结束时间是指什么?怎么确定?速度载荷是指刚和碰撞物接触时的速度吗?...
  18. 鸿蒙三千法则排名,三千法则名称大全_十大最强法则
  19. 打开360浏览器显示无法连接服务器错误,Win7系统360浏览器打开网页显示“网络连接错误,错误代码102”怎么办...
  20. redis持久化数据到磁盘

热门文章

  1. 互联网内卷化下,“大或死”之外的另一路径是什么?
  2. uni app 自定义基座 真机调试 ios设备
  3. HTML5设置直线长度,cad绘制直线怎样设置长度
  4. 推荐4个方便实用的软件神器,非常适合程序员
  5. --随笔--带你轻松理解TCP中的三次握手
  6. 主机甲和主机乙之间使用后退N帧协议(GBN)传输数据,甲的发送窗口为1000,数据帧长为1000字节,信道带宽为100Mb/s,乙每收到一个数据帧......[数据传输率]错题总结
  7. 深度学习:将新闻报道按照不同话题性质进行分类
  8. 职场篇(一):明哥的职场礼仪七堂课笔记
  9. mysql 增加分区_MySql数据分区操作之新增分区操作
  10. 亚稳态与同步器及其Verilog实现