引言:刚学习模式识别时,读Earley算法有些晦涩,可能是自己太笨。看了网上各种资料,还是似懂非懂,后来明白了,是网上的前辈们境界太高,写的最基本的东西还是非常抽象,我都领悟不了,所以决定写个白痴版的Earley算法入门,因为有时候第一道坎过不了以纪念第一次的学术充电,第一次的互联网博文。

长话短说,选取的教材是《模式识别原理与应用——李弼程》。

本文分为三部分:一是算法规则介绍,二是算法实例,三是总结后记。

一、Earley算法规则介绍

这里提供算法的规则,下面是图片截图,也提供了文本,均是一样的。

  • Earley算法规则(图片格式)

  • Earley算法规则(文本版)(如果在这里看不懂,没关系可以继续看,后面在实例理会引用到,我也会在实例中解释一些意义)

下面有一些符号相似,如,请注意辨别。是字符串。

[1]    建立初始表I0,其目的为建立一个初始化的表格而已,后续操作由此进行发散衍伸。建立初始化表的方法如下:

a) 若在P (P是推断规则集) 中,则将项目加入到I0中。

上句描述的背景是:建立初始化表,跟输入完全没关系,初始化过程不必管输入的字符串,我们只关心初始化的准备工作。

而上句意义在于:凡在规则集中推断规则符合某条件(凡由起始符开始可推断出任意字符串),则将其加入初始化表。

分隔点的作用有些像Petri网里的小黑点,即令牌。功能也是为了区分位置关系,会用于后续的规则判定中。

b)若I0中,对所有,把加入I0中。

c)若在I0中,对P中所有形如的产生式,把项目加入I0中。

d)重复步骤b与c,直至I0中不增加新的内容位置。

b) c) d)句的意义不大,一般建立初始化表时用不到,若要理解,可阅读完本文自行参详。

[2]    建立后续表,并利用I1,I2,…,Ij-1,去建立Ij。直至满足某种条件,则后续表建立完毕。其目的为通过某种满足条件,使文法迭代至不能迭代为止。

此时的模块算法与输入的待分析的字符串有关,为判定待分析字符串是否属于本文法产生,则此时在本模块里需要建立联系。

建立方法如下:

a)对于每个在Ij-1中的,aj是x的第j个终止符,把项目加入Ij中。

上句描述的背景是:。处于中间的分隔点与终止符的关系。

而上句意义在于:凡在初始化表中规则符合某条件(凡由起始符推断出,分隔点后面恰为终止符),则将分隔点往后移一位,然后加入后续表。(请注意,这里的初始化表不一定固定不变,对于某个表Ij来说,那么Ij-1就是它的初始化表,不要拘泥。)

b)若Ij中的项目,在Ij中寻找形为的项目,把项目加入Ij中。

上句描述的背景是:处于末位的分隔点与起始符的关系。

而上句意义在于:凡在后续表中规则符合某条件(凡由起始符A推断出的分隔点恰为最后一位),则寻找能够推断出该起始符A的规则集,并重新打上新位置的分隔点,然后加入后续表。

另,我们把分隔点的位置命名绘图解释清楚,如下图。

c)若,则对P中所有,把加入到Ij中。

上句描述的背景是:处于中间分隔符与起始符的关系。

而上句意义在于:。凡在后续表中遇到规则式推断的分隔点后面恰为起始符B,则将B可以推出的所有规则式写进后续表中,并重新打上新位置的分隔点。

二、Earley算法规则介绍

我引用International Journal of Computer Applications (0975 – 8887) Volume 71– No.13, May 2013期刊内的一篇论文《A New Top –Down Context-Free Parsing for Syntactic》实例。

下面通过一个例子来展示该分析法如何分析输入短语。(若题目已知都看不懂,可以自己补习充电了。)

已知条件:其中,规则产生式为

语言集有,输入短语为,下表将展示该算法的流程。

下面的表达符号解释一下,我会直接用1-a表示引用的是规则[1]内的a)规则,而表格里的式(1)或式1指的是规则式的序号而已,请勿混淆。

并请注意,当年我就很白痴地问了一句:你怎么知道什么时候用什么规则呢?我想这一个技术小白的困扰。

很简单,把规则一个一个带入,看哪条符合(不仅要范围上符合,如初始化表用初始化的规则,后续表用后续表规则,而且要规则要符合,不要在后续表中用错规则),就用哪个。直到不能用算法的规则为止。

式1,2,3引用1-a

针对式2,3,分别使用规则1-c,式2产生了式4,5;式3产生了6,7。所以在这里没有已知条件里的B产生式出现,这是正确的。

-------------------------------------------------------------------------------------------------------------------

因为很多题目,几乎在第一步初始化表时候,都会将规则产生式里所有的式子都会囊括进来,这个题目还比较特殊,按照初始化的规则,有两个B产生式没有出现。

-------------------------------------------------------------------------------------------------------------------

这里解释一下,规则产生式后面的函数。pred()或scan()等函数是那篇论文所采用的一种方案。可以忽略之,有兴趣可以去阅读这篇论文。函数内的数字表示来源,例如式4后面的pred(2),是说明来自于式2,至于规则可以自己思考得出,实际上这个pred就是代表规则1-c的一个伪代码函数。

此时要考虑输入的待分析字符串,第一个字符是a,我们这个表目前只与a产生关联。

-------------------------------------------------------------------------------------------------------------------

对式4或5运用规则2-a,分别产生了式8或式9。以式4为例,分隔点后为a,恰为输入字符串aabb的第一位,则分隔点后移一位,添加此后续表L(1)。

-------------------------------------------------------------------------------------------------------------------

同理对式6或式7,也是规则2-a,然后分别产生了式10或式11。

-------------------------------------------------------------------------------------------------------------------

然后对式8使用规则2-c,产生了式12,式13。因为式8的分隔点后为起始符,则将所有此起始符可以推出的规则式放入后续表。同理式14和15是由式10产生的,使用的规则也是2-c。

-------------------------------------------------------------------------------------------------------------------

最麻烦的来了,式16由式11产生,使用的规则是2-b,因为式11的分隔点在最后一位,则在初始化表中寻找能够产生出该式11的起始字符,并调整分隔点位置。

而最后的式17,式18由式16产生,因为对式16可以使用2-c规则。

至此可以发现,无论再使用哪条规则,都会有重复的。所以不必再使用规则了。

后续表L(1)可以认为建立完成了。

此时输入待分析字符串的第二个字符还是a,我们这行L(2)表目前只与第二位的a产生关联。

-------------------------------------------------------------------------------------------------------------------

后面好多……这些公式和文字,绝对都是我亲手码出来的……

实在是不愿写了~如果想知道后面的规则,可以看各规则式后面的函数内的值,就知道来源啦~请忽略函数comp()携带两数值中的后面的数值,只要阅读其中前面的数值即可~如果想知道后面的数值意思,可以自行阅读该论文~

此时输入的待分析字符串,第三个字符是b,我们这行开始的L(3)表目前只与b产生关联。

-------------------------------------------------------------------------------------------------------------------

此时输入的待分析字符串,第四个字符还是b,我们这行L(4)表目前只与最后一个字符,即b产生关联。

-------------------------------------------------------------------------------------------------------------------如何判定待分析字符串,由本文法产生呢?

很简单

判决条件:当最后一个表完结后,只要在最后一个表中,出现形如的项目,就认为此字符串确实为此文法产生的。

那么以本题为例,显然最后一个表中,出现了式44或式48,均可验证判决条件正确,说明字符串I=aabb确实为此文法产生。

三、总结后记

如果还想验证自己是否学通学懂,我附上《模式识别原理与应用——李弼程》的例题及解答,可自行学习。

Bitpeach 2014.3.15晚


<<<<<<<<<  写在文章最后的小额打赏  >>>>>>>>>

如果读者亲愿意的话,可以小额打赏我,感谢您的打赏。您的打赏是我的动力,非常感激。

必读:如您愿意打赏,打赏方式任选其一,本页面右侧的公告栏有支付宝方式打赏,微信方式打赏。

避免因打赏产生法律问题,两种打赏方式的任一打赏金额上限均为5元,谢谢您的支持。

如有问题,请24小时内通知本人邮件。

转载于:https://www.cnblogs.com/bitpeach/p/3602522.html

模式识别之Earley算法入门详讲相关推荐

  1. acm-LCY算法入门培训-第0讲

    LCY算法入门培训-第0讲 0. 顺带讲的知识 1. 介绍acm 2. 输入 2.1 第一类:输入时不说明有几个Input Block,以EOF未结束标志 2.2 第二类:说明了做几组 2.3 第三类 ...

  2. [论文阅读] (01) 拿什么来拯救我的拖延症?初学者如何提升编程兴趣及LATEX入门详解

    又是在凌晨三点赶作业,又是在Deadline前去熬夜,一次次无眠,一次次抱怨.为什么三年前.两年前.一年前,甚至是昨天,我都下定决心"从现在开始读顶会论文",却又悄悄选择逃避:为什 ...

  3. 【GCN】图卷积网络(GCN)入门详解

    机器学习算法与自然语言处理出品 @公众号原创专栏作者 Don.hub 单位 | 京东算法工程师 学校 | 帝国理工大学 图卷积网络(GCN)入门详解 什么是GCN GCN 概述 模型定义 数学推导 G ...

  4. 网络流题目详讲+题单(提高版)(持续更新中......)

    网络流题目详讲+题单(提高版)(持续更新中......) 标签:图论--网络流 PS:如果你觉得自己还不够强(和我一样弱),可以去入门版看看 阅读体验:https://zybuluo.com/Junl ...

  5. C#语言入门详解笔记(5)—P10、P11、P12 操作符详解_1_2_3

    C#语言入门详解_哔哩哔哩_bilibiliC#语言入门详解搬运,随youtube上进度更新.刘老师的C#视频教程到30集就告一段落了,感谢刘老师在这5年间的付出.能上youtube的同学可以去刘老师 ...

  6. FFmpeg入门详解之100:搭建Nginx流媒体服务器

    这里小编给大家推荐一款流媒体服务器Nginx,可以实现RTMP和HLS等.搭建完成后,可以使用FFmpeg推流,实现直播功能. 注意:操作环境是Ubuntu18.04, 总共分为几个步骤: 1.安装N ...

  7. CRF(条件随机场)与Viterbi(维特比)算法原理详解

    摘自:https://mp.weixin.qq.com/s/GXbFxlExDtjtQe-OPwfokA https://www.cnblogs.com/zhibei/p/9391014.html C ...

  8. [转]数据结构KMP算法配图详解(超详细)

    KMP算法配图详解 前言 KMP算法是我们数据结构串中最难也是最重要的算法.难是因为KMP算法的代码很优美简洁干练,但里面包含着非常深的思维.真正理解代码的人可以说对KMP算法的了解已经相当深入了.而 ...

  9. php算法入门,a011.PHP实战:加密解密,简单算法入门

    原标题:a011.PHP实战:加密解密,简单算法入门 在PHP编程中,很多时候我们会遇到传递信息的问题,而传递过程中为了安全,我们肯定是要进行加密和解密的,这里,我们来说一说使用PHP怎么进行加密解密 ...

最新文章

  1. python函数编程训练题_Python文件与函数练习题
  2. 简单理解Python中的if __name__ == '__main__'
  3. leetcode 423. Reconstruct Original Digits from English | 423. 从英文中重建数字(Java)
  4. django-celery
  5. element vue 上传模板_vue+element 文件上传
  6. windows聚焦壁纸不更新_壁纸推荐说 | 爱上你的壁纸,每天更新的免费壁纸软件dynamic theme...
  7. 帝国cms模板仿后台登录界面
  8. tomcat更改端口序
  9. 多项式拟合缺点_拟合多项式的最小二乘法
  10. Myeclipse自定义包自动加入
  11. sass-RGB颜色函数-RGB()颜色函数
  12. 《PMP学习笔记》11.6 子过程:规划风险应对
  13. 联想thinkpad E430C硬盘位换为固态,硬盘放于光驱位(win7+win10+ubuntu三系统安装教程)
  14. 计算机图片怎样存在桌面上,电脑桌面上怎么放照片
  15. python实用的语法和函数
  16. J-LinK-OB改造版 仿真/调试器 使用说明
  17. 如何让编辑器运行你的代码
  18. python编写字典库_Python中的字典及举例-阿里云开发者社区
  19. error [XXX.zip]: start of central directory not found; zipfile corrup
  20. effective morden c++ 3

热门文章

  1. 单片机电路元件以及读数方法讲解((贴片)电阻,电容,二极管,蜂鸣器等)
  2. react中onchange事件
  3. 使用lvgl时出现_lv_inv_area: detected modifying dirty areas in render (in lv_refr.c line #错误时如何解决
  4. 智慧车路协同解决方案与应用
  5. php开发常用插件整理
  6. 微信小程序开发(英语学习助手)
  7. 安装驱动程序(1)----驱动预安装
  8. 英雄不问出处 美女不问归途
  9. 编程(从入门到入土)8
  10. 学生易语言学习第二天