已迁移到我新博客,阅读体验更佳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->CX~1~...X~n~,增加一条活动边:X->C º X~1~...X~n~,位置为:p1-p2;
      • X->C,把X加入agenda,位置为:p1-p2
    • 将C作为非活动边加入到chart的位置p1-p2
    • 对已有活动边进行边扩展
      • 对每个形式为:X->X~1~... º C...X~n~的活动边,若它在p0-p1之间,则增加一条活动边:X->X~1~... C º...X~n~,位置:p0-p2
      • 对每个形式为: X->X~1~... X~n~ º 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进行句法分析的结果截图如下:

转载于:https://www.cnblogs.com/brooksj/p/10765635.html

parsing:NLP之chart parser句法分析器相关推荐

  1. 错误: 句法分析器6行里不能有多字节字符_汉语自动分词,对搜索引擎有多大影响?...

    目前,国内的每个行业.领域都在飞速发展,这中间产生了大量的中文信息资源,为了能够及时准确的获取最新的信息,中文搜索引擎是必然的产物.中文搜索引擎与西文搜索引擎在实现的机制和原理上大致雷同,但由于汉语本 ...

  2. 编译器入门 语法分析器 java_从零开始写个编译器吧 - Parser 语法分析器

    Parser(语法分析器)的编写相对于 Tokenizer (词法分析器)要复杂得多,因此,在编写之前可能也会铺垫得更多一些.当然,本系列旨在"写出"一个编译器,所以理论方面只会简 ...

  3. 中文分句java_基于CRF序列标注的中文依存句法分析器的Java实现

    这是一个基于CRF的中文依存句法分析器,内部CRF模型的特征函数采用 双数组Trie树(DoubleArrayTrie)储存,解码采用特化的维特比后向算法.相较于<最大熵依存句法分析器的实现&g ...

  4. 中文 NLP (10) -- 句法解析之 转换生成语法 和 依存句法

    多年来 NLP 领域最广泛的两种句法分析理论分别为 转换生成语法和依存句法. 转换生成语法 短语结构文法:形式化定义为 G = (X,V,S,R) 这样一个四元组.X 是词汇集合,称为终结符.V 是标 ...

  5. NLP学习笔记 02 句法和文法

    目录 2.1 依存句法分析 2.2 语义依存分析 2.1 依存句法分析 依存语法 (Dependency Parsing, DP) 通过分析语言单位内成分之间的依存关系揭示其句法结构. 直观来讲,依存 ...

  6. 错误: 句法分析器6行里不能有多字节字符_字节跳动iOS客户端面经第一期

    点击蓝字关注我们,获取更多笔面试常考题及大厂面经 15 改天是哪天 下次是哪次 以后是多久 去经历 去后悔 保持热爱 奔赴山海 --敢敢 数据库事务四大特性 原子性(Atomicity) 原子性是指事 ...

  7. 事件抽取中的“门面技术”:事件名称生成浅谈

    6月10日,"网信中国"微信公众号发布消息称:微博热搜榜.热门话题榜暂停更新一周,这使得很多热榜平台都受到波及,而在吃瓜之余,我们更进一步地思考热点榜单以及热点名称生成背后的技术, ...

  8. pyhanlp 两种依存句法分类器

    依存句法分析器 在HanLP中一共有两种句法分析器 依存句法分析 基于神经网络的高性能依存句法分析器 MaxEnt依存句法分析 基于神经网络的高性能依存句法分析器 HanLP中的基于神经网络的高性能依 ...

  9. 《Python自然语言处理-雅兰·萨纳卡(Jalaj Thanaki)》学习笔记:05 特征工程和NLP算法

    05 特征工程和NLP算法 5.1 理解特征工程 5.1.1 特征工程的定义 5.1.2 特征工程的目的 5.1.3 一些挑战 5.2 NLP中的基础特征 5.2.1 句法解析和句法解析器 5.2.2 ...

最新文章

  1. Hadoop - MapReduce MRAppMaster-剖析
  2. SSM项目各层单元测试
  3. java 国际化 properties_java处理国际化和读取properties文件代码片段
  4. 实训项目2Linux基本命令,实训项目2 Linux文件系统管理
  5. android 通知显示时间,android:在特定时间显示通知?
  6. The prefix context for element context:component-scan is not bound.
  7. equipment hierarchy download不完整的一个原因
  8. 虚拟化--001 view win7优化
  9. ac3165无线网卡驱动linux,英特尔ac3165驱动下载
  10. 几款常用的文献管理软件
  11. 微信支付宝支付开发文档
  12. 人脸识别实名制管理,推动智慧工地建设发展
  13. 2021 MWC上海 | 5G消息引关注,菊风共谋5G建设发展新篇章
  14. 百姓基因:关于历史和名人形象的亲子DNA测试
  15. 2010年的一些总结感悟
  16. php网站建设和外包
  17. SV基础知识---功能覆盖率1 (概念理解)
  18. 修改手机状态栏字体的颜色(如:白底黑字)
  19. mysql优化之in内子查询
  20. 计算机知识竞赛口号,知识竞赛比赛口号大全

热门文章

  1. 【Go】Go基础(八):结构体和方法
  2. Ruby的Singleton method
  3. c语言1变A,c语言那些细节之a+1和a+1的区别
  4. vscode断开调试服务器文件,vscode显示等待调试器断开连接
  5. Linux查看WAS的jvm信息,linux 下使用命令查看jvm信息
  6. python wget_python-如何获取wget下载的文件的文件名
  7. python loop call soon_从“call\u soon”回调函数执行协同路由
  8. SQL基础学习总结:1(数据库)
  9. nginx php站点配置文件,php网站修改默认访问文件的nginx配置
  10. append函数_连载|想用Python做自动化测试?函数的参数传递机制及变量作用域