parsing:NLP之chart parser句法分析器
已迁移到我新博客,阅读体验更佳parsing:NLP之chart parser句法分析器
完整代码实现放在我的github上:click me
一、任务要求
- 实现一个基于简单英语语法的chart句法分析器。
二、技术路线
采用自底向上的句法分析方法,简单的自底向上句法分析效率不高,常常会重复尝试相同的匹配操作(回溯之前已匹配过)。一种基于图的句法分析技术(Chart Parsing)被提出,它把已经匹配过的结果保存起来,今后需要时可直接使用它们,不必重新匹配。(动态规划)
- chart parsing的数据表示:
- p图(chart)的结点表示句子中词之间的位置数字
- p非活动边集(chart的核心,常直接就被称为chart
- n记录分析中规约成功所得到的所有词法/句法符号
- 活动边集
- 未完全匹配的产生式,用加小圆圈标记(º)的产生式来表示,如:
- NP -> ART ºADJ N
- NP -> ART ºN
- 未完全匹配的产生式,用加小圆圈标记(º)的产生式来表示,如:
- 待处理表(agenda)
- 实际上是一个队列模型,记录等待加入chart的已匹配成功的词法/句法符号
- 上面的活动边、非活动边以及词法/句法符号都带有“始/终结点”位置信息
- chart parsing对“1 The 2 cat 3 caught 4 a 5 mouse 6”进行分析的数据示例:
chart parsing的句法分析算法步骤描述如下:
- 若agenda为空,则把句子中下一个词的各种词法符号(词)和它们的位置加入进来
- 从agenda中取一个元素(设为C,位置为:p1-p2)
- 对下面形式的每个规则增加活动边:
- X->CX1...Xn,增加一条活动边:X->C º X1...Xn,位置为:p1-p2;
- X->C,把X加入agenda,位置为:p1-p2
- 将C作为非活动边加入到chart的位置p1-p2
- 对已有活动边进行边扩展
- 对每个形式为:X->X1... º C...Xn的活动边,若它在p0-p1之间,则增加一条活动边:X->X1... C º...Xn,位置:p0-p2
- 对每个形式为: X->X1... Xn º C的活动边,若它在p0-p1之间,则把X加入agenda ,位置为:p0-p2
程序实现的大致流程:输入英文语句,对在词典dic_ec.txt中不存在的英文单词进行形态还原,对还原后的语句执行chart parsing算法并将分析出的所有非活动边输出。由于一个英文单词可能存在多种词性,这种情况下会对每种可能的词性进行递归,对于不符合句法规则的词性会进行回溯尝试以其它的词性进行句法规则的匹配与分析。直到找到符合句法规则的词性组合则结束递归,尝试完所有的词性组合还是没能找到则句法分析失败,输入的句子不符合当前的句法规则。
三、数据说明
- 由于这个实验中引用了token实验模块,所以需要用到token实验中的三个数据字典dic_ec.txt,irregualr nouns.txt,irregular verbs.txt,关于这三个数据字典的说明在token实验中已给出,此处不再赘述。除此之外,chart parsing算法还需要用到dic_ec.txt词典中英文单词的词性。
四、遇到的问题及解决方案
- 程序实现过程中受到文件编码和分隔符的困扰,最后用vim把用到的3个数据词典统一设置成gbk编码,以\t进行分隔,方便程序统一读入处理。
- dic_ec.txt这个数据字典中的数据质量不太好,很多英文单词都被标注成none.词性,由于无法获取词的正确词性从而无法完成句子的句法分析。
五、性能分析
- 对句法分析部分作一个性能的度量,单句句法分析的结果基本都在毫秒级别,下面给出基于规则S->NP VP,NP->ART N,NP->ART ADJ N,VP->V,VP->V NP对the cat catch a mouse进行句法分析得到的运行结果及耗时截图:
六、运行环境
- 将执行文件parsing.exe与数据字典dic_ec.txt,irregular nouns.txt,irregualr verbs.txt放在同一个文件夹下,然后点击parsing.exe即可正常运行程序。
七、用户手册
- 在运行环境下正常运行程序后会出现下图这样的主菜单文字界面:
- 根据主菜单进行操作,首先选择1来写入规则,可一次写入多个规则,输入q!结束规则写入,如果后期需要增加规则,可以在主菜单界面再次选择1来写入增添的规则,这样就实现了规则的灵活扩展。下面是写入规则模块的截图:
- 写入规则结束后又回退到主菜单界面,这时候可以选择2来输入句子进行句法分析,程序会输出分析过程中得到的所有非活动边对应的短语及位置范围,下面是在上面所写入规则的基础上对the cat caught a mouse进行句法分析的结果截图,程序会对dic_ec.txt中不存在的单词尝试调用词形还原模块进行还原再分析:
- 句法分析回退到主菜单界面,可以继续选择1进行规则扩展,也可以选择2进行句法分析,选择q退出程序运行。
- 基于下面的句法规则给出一个句法分析示例:
NP->ART N
NP->ART
NP->PRON
NP->N
NP->ART ADJ N
VP->V
VP->V NP
对I like her进行句法分析的结果截图如下:
parsing:NLP之chart parser句法分析器的更多相关文章
- 基于CRF序列标注的中文依存句法分析器的Java实现
这是一个基于CRF的中文依存句法分析器,内部CRF模型的特征函数采用 双数组Trie树(DoubleArrayTrie)储存,解码采用特化的维特比后向算法.相较于<最大熵依存句法分析器的实现&g ...
- 同时使用Twitter nlp 和stanford parser的解决方法
因为Twitter nlp中使用了较老版本的stanford parser,导致不能同时使用 解决方法是使用未集成其它jar包的Twitter nlp,关于这点Stanford FAQ中也有说明(在F ...
- C# Parsing 类实现的 PDF 文件分析器
下载示例 下载源代码 1. 介绍 这个项目让你可以去读取并解析一个PDF文件,并将其内部结构展示出来. PDF文件的格式标准文档可以从Adobe那儿获取到. 这个项目基于“PDF指南,第六版,Adob ...
- Chart Parser 中 Earley's 算法的应用
1. 基本概念 1.1 状态 state 上下文无关文法规则 圆点 · (左边是已分析的,右边是未分析的:点在最右端表示完成状态,否则为未完成状态) 状态的起止位置 1.2 基本操作/算子 opera ...
- stanfordCorenlp在python3中的安装使用+词性学习
1 安装 前言 Stanford CoreNLP的源代码是使用Java写的,提供了Server方式进行交互.stanfordcorenlp是一个对Stanford CoreNLP进行了封装的Pytho ...
- NLP+句法结构(三)︱中文句法结构(CIPS2016、依存句法、文法)
摘录自:CIPS2016 中文信息处理报告<第一章 词法和句法分析研究进展.现状及趋势>P8 -P11 CIPS2016> 中文信息处理报告下载链接:http://cips-uplo ...
- 转:NLP+句法结构(三)︱中文句法结构(CIPS2016、依存句法、文法)
NLP+句法结构(三)︱中文句法结构(CIPS2016.依存句法.文法)转自:https://www.cnblogs.com/maohai/p/6453389.html 摘录自:CIPS2016 中文 ...
- 【NLP】依存句法关系符号解释
今天开始读一篇论文:leveraging linguistic structure for open domain information extraction 于是……重新复习了很多句法分析的内容, ...
- pyhanlp 两种依存句法分类器
依存句法分析器 在HanLP中一共有两种句法分析器 ·依存句法分析 (1)基于神经网络的高性能依存句法分析器 (2)MaxEnt依存句法分析 基于神经网络的高性能依存句法分析器 HanLP中的基于神经 ...
随机推荐
- BZOJ_1834_[ZJOI2010]network 网络扩容_费用流
BZOJ_1834_[ZJOI2010]network 网络扩容_费用流 题意: 给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1.在不扩容的 ...
- BZOJ_3261_最大异或和_可持久化trie
BZOJ_3261_最大异或和_可持久化trie Description 给定一个非负整数序列{a},初始长度为N. 有M个操作,有以下两种操作类型: 1.Ax:添加操作,表示在序列末尾添加一个数x, ...
- BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS
BZOJ_2242_[SDOI2011]计算器_快速幂+扩展GCD+BSGS 题意: 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p, ...
- BZOJ_4756_[Usaco2017 Jan]Promotion Counting_树状数组
BZOJ_4756_[Usaco2017 Jan]Promotion Counting_树状数组 Description n只奶牛构成了一个树形的公司,每个奶牛有一个能力值pi,1号奶牛为树根. 问对 ...
- Hadoop2.41的HA的配置与启动
我配置HA机制创建了7台虚拟机 1.修改Linux主机名2.修改IP3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为云主机.阿里云主机等) ...
- (转载)CSS3与页面布局学习总结(三)——BFC、定位、浮动、7种垂直居中方法
目录 一.BFC与IFC 1.1.BFC与IFC概要 1.2.如何产生BFC 1.3.BFC的作用与特点 二.定位 2.2.relative 2.3.absolute 2.4.fixed 2.5.z- ...
- python书籍推荐:python编码推荐(高清完整pdf)
目录INF-qa Python 编码规范................................................................................ ...
- js继承之组合继承(结合原型链继承 和 借用构造函数继承)
在我的前两篇文章中,我们已经介绍了 js 中实现继承的两种模式:原型链继承和借用构造函数继承.这两种模式都存在各自的缺点,所以,我们考虑是否能将这二者结合到一起,从而发挥二者之长.即在继承过程中,既可 ...
- 滴滴 App 的质量优化框架 Booster,开源了!
一. 序 当 App 达到一定体量的时候,肯定是要考虑质量优化.有些小问题,看似只有 0.01% 触发率,但是如果发生在 DAU 过千万的产品中,就很严重了. 滴滴这个独角兽的 DAU 早已过千万,自 ...
- 前端笔记之Vue(二)组件&案例&props&计算属性
一.Vue组件(.vue文件) 组件 (Component) 是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素,Vue.js 的编译器 ...