当前位置: 首页 > 编程日记 > 正文

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~”进行分析的数据示例:

1541994559204

  • 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进行句法分析得到的运行结果及耗时截图:

1542023773939

六、运行环境

  • 将执行文件parsing.exe与数据字典dic_ec.txt,irregular nouns.txt,irregualr verbs.txt放在同一个文件夹下,然后点击parsing.exe即可正常运行程序。

七、用户手册

  • 在运行环境下正常运行程序后会出现下图这样的主菜单文字界面:

1542024516293

  • 根据主菜单进行操作,首先选择1来写入规则,可一次写入多个规则,输入q!结束规则写入,如果后期需要增加规则,可以在主菜单界面再次选择1来写入增添的规则,这样就实现了规则的灵活扩展。下面是写入规则模块的截图:

1542025005658

  • 写入规则结束后又回退到主菜单界面,这时候可以选择2来输入句子进行句法分析,程序会输出分析过程中得到的所有非活动边对应的短语及位置范围,下面是在上面所写入规则的基础上对the cat caught a mouse进行句法分析的结果截图,程序会对dic_ec.txt中不存在的单词尝试调用词形还原模块进行还原再分析:

1542026424475

  • 句法分析回退到主菜单界面,可以继续选择1进行规则扩展,也可以选择2进行句法分析,选择q退出程序运行。
  • 基于下面的句法规则给出一个句法分析示例:
NP->ART N
NP->ART
NP->PRON
NP->N
NP->ART ADJ N
VP->V
VP->V NP

对I like her进行句法分析的结果截图如下:

1542031147205

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

相关文章:

图解Python算法

普通程序员,不学算法,也可以成为大神吗?对不起,这个,绝对不可以。可是算法好难啊~~看两页书就想睡觉……所以就不学了吗?就一直当普通程序员吗?如果有一本算法书,看着很轻松……又有…

详解SSH框架的原理和优点

Struts的原理和优点. Struts工作原理 MVC即Model-View-Controller的缩写,是一种常用的设计模式。MVC 减弱了业务逻辑接口和数据接口之间的耦合,以及让视图层更富于变化。MVC的工作原理,如下图1所示:Struts 是MVC的一种实现&#xff0…

Numpy and Matplotlib

Numpy介绍 编辑 一个用python实现的科学计算,包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成…

梯度下降法简介

条件数表征函数相对于输入的微小变化而变化的快慢程度。输入被轻微扰动而迅速改变的函数对于科学计算来说可能是有问题的,因为输入中的舍入误差可能导致输出的巨大变化。大多数深度学习算法都涉及某种形式的优化。优化指的是改变x以最小化或最大化某个函数f(x)的任务…

微软亚研院CV大佬代季峰跳槽商汤为哪般?

整理 | 夕颜出品 | AI科技大本营(ID:rgznai100)近日,知乎上一篇离开关于MSRA(微软亚洲研究院)和MSRA CV未来发展的帖子讨论热度颇高,这个帖子以MSRA CV执行研究主任代季峰离职加入商汤为引子,引…

iOS Block实现探究

2019独角兽企业重金招聘Python工程师标准>>> 使用clang的rewrite-objc filename 可以将有block的c代码转换成cpp代码。从中可以看到block的实现。 #include <stdio.h> int main() {void (^blk)(void) ^{printf("Block\n");};blk();return 0; } 使…

CUDA Samples: Long Vector Add

以下CUDA sample是分别用C和CUDA实现的两个非常大的向量相加操作&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;各个文件内容如下&#xff1a;common.hpp:#ifndef FBC_CUDA_TEST_COMMON_HPP_ #define FBC_CUDA_TEST_COMMON_HPP_#include<random>template&l…

TensorFlow2.0正式版发布,极简安装TF2.0(CPUGPU)教程

作者 | 小宋是呢转载自CSDN博客【导读】TensorFlow 2.0&#xff0c;昨天凌晨&#xff0c;正式放出了2.0版本。不少网友表示&#xff0c;TensorFlow 2.0比PyTorch更好用&#xff0c;已经准备全面转向这个新升级的深度学习框架了。本篇文章就带领大家用最简单地方式安装TF2.0正式…

javascript全栈开发实践-准备

目标&#xff1a; 我们将会通过一些列教程&#xff0c;在只使用JavaScript开发的情况下&#xff0c;实现一个手写笔记应用。该应用具有以下特点&#xff1a; 全平台&#xff0c;有手机客户端&#xff08;Android/iOS&#xff09;&#xff0c;Windows&#xff0c;macOS&#xff…

POJ 1017 Packets 贪心 模拟

一步一步模拟&#xff0c;做这种题好累 先放大的的&#xff0c;然后记录剩下的空位有多少&#xff0c;塞1*1和2*2的进去 //#pragma comment(linker, "/STACK:1024000000,1024000000") #include<cstdio> #include<cstring> #include<cstdlib> #incl…

NLP被英语统治?打破成见,英语不应是「自然语言」同义词

&#xff08;图片付费下载自视觉中国&#xff09;作者 | Emily M. Bender译者 | 陆离责编 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09; 【导读】在NLP领域&#xff0c;多资源语言以英语、汉语&#xff08;普通话&#xff09;、阿拉伯语和法语为代表&#…

CUDA Samples: Dot Product

以下CUDA sample是分别用C和CUDA实现的两个非常大的向量实现点积操作&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;各个文件内容如下&#xff1a;common.hpp:#ifndef FBC_CUDA_TEST_COMMON_HPP_ #define FBC_CUDA_TEST_COMMON_HPP_#include<random>templa…

element ui只输入数字校验

注意&#xff1a;圈起来的两个地方&#xff0c;刚开始忘记写typenumber了&#xff0c;导致可以输入‘123abc’这样的&#xff0c;之后加上了就OK了 转载于:https://www.cnblogs.com/samsara-yx/p/10774270.html

对DeDecms之index.php页面的补充

2019独角兽企业重金招聘Python工程师标准>>> 1、301是什么&#xff1f; 其实就是HTTP状态表。就是当用户输入url请求时&#xff0c;服务器的一个反馈状态。 详细链接http://www.cnblogs.com/kunhony/archive/2006/06/16/427305.html 2、common.inc.php和arc.partvi…

OpenCV-Python:K值聚类

关于K聚类&#xff0c;我曾经在一篇博客中提到过&#xff0c;这里简单的做个回顾。 KMeans的步骤以及其他的聚类算法 K-均值是因为它可以发现k个不同的簇&#xff0c;且每个簇的中心采用簇中所含值的均值计算 其他聚类算法&#xff1a;二分K-均值 讲解一下步骤&#xff0c;其实…

CUDA Samples: Julia

以下CUDA sample是分别用C和CUDA实现的绘制Julia集曲线&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第四章&#xff0c;各个文件内容如下&#xff1a;funset.cpp:#include "funset.hpp" #include <rand…

给初学者的深度学习入门指南

从无人驾驶汽车到AlphaGo战胜人类&#xff0c;机器学习成为了当下最热门的技术。而机器学习中一种重要的方法就是深度学习。作为一个有理想的程序员&#xff0c;若是不懂人工智能&#xff08;AI&#xff09;领域中深度学习&#xff08;DL&#xff09;这个超热的技术&#xff0c…

epoll/select

为什么80%的码农都做不了架构师&#xff1f;>>> epoll相对select优点主要有三&#xff1a; 1. select的句柄数目受限&#xff0c;在linux/posix_types.h头文件有这样的声明&#xff1a;#define __FD_SETSIZE 1024 表示select最多同时监听1024个fd。而epoll没…

CUDA Samples: ripple

以下CUDA sample是分别用C和CUDA实现的生成的波纹图像&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第五章&#xff0c;各个文件内容如下&#xff1a;funset.cpp&#xff1a;#include "funset.hpp" #includ…

Python告诉你这些旅游景点好玩、便宜、人又少!

&#xff08;图片由CSDN付费下载自东方IC&#xff09;作者 | 猪哥来源 | 裸睡的猪&#xff08;ID&#xff1a;IT--Pig&#xff09; 2019年国庆马上就要到来&#xff0c;今年来点新花样吧&#xff0c;玩肯定是要去玩的&#xff0c;不然怎么给祖国庆生&#xff1f;那去哪里玩&…

手机APP自动化之uiautomator2 +python3 UI自动化

题记&#xff1a; 之前一直用APPium直到用安卓9.0 发现uiautomatorviewer不支持安卓 9.0&#xff0c;点击截屏按钮 一直报错&#xff0c;百度很久解决方法都不可以&#xff0c;偶然间看见有人推荐&#xff1a;uiautomator2 就尝试使用 发现比appium要简单一些&#xff1b; 下面…

爱上MVC3系列~开发一个站点地图(俗称面包屑)

回到目录 原来早在webform控件时代就有了SiteMap这个东西,而进行MVC时代后,我们也希望有这样一个东西,它为我们提供了不少方便,如很方便的实现页面导航的内容修改,页面导航的样式换肤等. 我的MvcSiteMap主要由实体文件,XML配置文件,C#调用文件组成,当然为了前台使用方便,可以为…

Django web框架-----Django连接现有mysql数据库

第一步&#xff1a;win10下载mysql5.7压缩包配置安装mysql&#xff0c;创建数据库或导入数据库 第二步&#xff1a;win10搭建django2.1.7开发环境&#xff0c;创建项目为mytestsite&#xff0c;创建应用app为quicktool 第三步&#xff1a;编辑与项目同名的文件夹的配置文件&…

CUDA Samples: green ball

以下CUDA sample是分别用C和CUDA实现的生成的绿色的球图像&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第五章&#xff0c;各个文件内容如下&#xff1a;funset.cpp:#include "funset.hpp" #include <r…

ICLR 2020论文投稿2600篇,GNN、BERT、Transformer领跑热门研究方向

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;2019 年 4&#xff0c;ICLR 2020 论文征集活动开始&#xff0c;截止 9 月 25 日&#xff0c;大会共收到近 2600 篇投稿&#xff0c;相比 ICL…

android环境安装之android4.2安装(转)

准备学习android&#xff0c;着手安装android时听说很麻烦&#xff0c;在网上看了很多android安装说明&#xff0c;都是android比较早的版本&#xff0c;我这里安装了android4.2&#xff0c;简单记录一下。 安装分为几步&#xff0c;首先申明&#xff0c;安装时最好保持网络畅通…

如何创建一个百分百懂你的产品推荐系统 | 深度教程(附代码详解)

&#xff08;图片由AI科技大本营付费下载自视觉中国&#xff09;来源 | 读芯术&#xff08;ID&#xff1a;AI_Discovery&#xff09;你也许每天都会逛一逛电子商务网站&#xff0c;或者从博客、新闻和媒体出版物上阅读大量文章。浏览这些东西的时候&#xff0c;最令读者或者用户…

CUDA Samples: Ray Tracking

以下CUDA sample是分别用C和CUDA实现的生成光线跟踪图像&#xff0c;并对其中使用到的CUDA函数进行了解说&#xff0c;code参考了《GPU高性能编程CUDA实战》一书的第六章&#xff0c;CUDA各实现包括了使用常量内存和不使用常量内存两种方法&#xff0c;各个文件内容如下&#x…

从产品的适用性以及费用方面考虑

物联宇手持终端在对比性价比高低应该从产品的适用性以及费用方面考虑。不过在选择时不一定要整机&#xff0c;可以按实际需求让厂商定做和行业需要功能的手持机&#xff0c;这样有针对性的定制更能体现整体的性价效率。转载于:https://blog.51cto.com/14222294/2386642

杨学海:跨境电商新通道-进口保税直邮模式解析

为什么80%的码农都做不了架构师&#xff1f;>>> 杨学海&#xff1a;跨境电商新通道-进口保税直邮模式解析 广州威云供应链管理公司总经理杨学海在第九届中国中小企业电子商务大会上表示&#xff0c;其品牌海外通要为跨境电子商务提供一个更加快速、便捷、低成本&am…