引言:刚学习模式识别时,读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(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小时内通知本人邮件。

模式识别之Earley算法入门详讲的更多相关文章

  1. KCF跟踪算法 入门详解

    一.算法介绍 KCF全称为Kernel Correlation Filter 核相关滤波算法.是在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins ...

  2. 针对初学者的A*算法入门详解(附带Java源码)

    英文题目,汉语内容,有点挂羊头卖狗肉的嫌疑,不过请不要打击我这颗想学好英语的心.当了班主任我才发现大一18本书,11本是英语的,能多用两句英语就多用,个人认为这样也是积累的一种方法. Thanks o ...

  3. Edmonds_Karp 算法入门详解(转)

    转载自:http://blog.csdn.net/hsqlsd/article/details/7862903 有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点,通常规定为1号点.另一个点也 ...

  4. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  5. Redis快速入门详解

    Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...

  6. 【转】 SVM算法入门

    课程文本分类project SVM算法入门 转自:http://www.blogjava.net/zhenandaci/category/31868.html (一)SVM的简介 支持向量机(Supp ...

  7. MD5算法步骤详解

    转自MD5算法步骤详解 之前要写一个MD5程序,但是从网络上看到的资料基本上一样,只是讲了一个大概.经过我自己的实践,我决定写一个心得,给需要实现MD5,但又不要求很高深的编程知识的童鞋参考.不多说了 ...

  8. 【算法入门】广度/宽度优先搜索(BFS)

    广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...

  9. LDA算法入门

    http://blog.csdn.net/warmyellow/article/details/5454943 LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discrimin ...

随机推荐

  1. tushare 安装

    1.pip install lxml 2.pip install pandas 3.pip install requests 4.pip install lxml 5.pip install tush ...

  2. RTP 学习

    1. RTP提供抖动补偿和数据无序到达检测的机制 2. RTP 本身并没有提供按时发送机制或其它服务质量(QoS)保证,它依赖于底层服务去实现这一过程. RTP标准定义了两个子协议,RTP和RTCP. ...

  3. [bzoj5017][Snoi2017]炸弹 tarjan缩点+线段树优化建图+拓扑

    5017: [Snoi2017]炸弹 Time Limit: 30 Sec  Memory Limit: 512 MBSubmit: 608  Solved: 190[Submit][Status][ ...

  4. jquery插件需要明白的那些知识点

    1.jquery中$是神马?$.fn又是神马? 稍微有jquery经验的都知道在jquery中$等价于jQuery,在控制台一试便知: 我们在jquery(1.8.3)源码中也能找到下面代码: 其实在 ...

  5. HDU 1558 Segment set(并查集)

    题意: 给你一些线段的起点和终点的坐标,最后问和某个线段相连的或者间接相连的线段有多少个(包括本身)? P X1 Y1X2 Y2  起点(X1,X2)终点(X2,Y2):按照出现次数依次编号为1,2, ...

  6. Codeforces #442 Div2 E

    #442 Div2 E 题意 给你一棵树,每个结点有开关(0表示关闭,1表示开启),两种操作: 反转一棵子树所有开关 询问一棵子树有多少开关是开着的 分析 先 DFS 把树上的结点映射到区间上,然后就 ...

  7. 状压DP【p2622】 关灯问题II

    题目描述--->P2622 关灯问题II 没用的话: 首先第一眼看到题,嗯?n<=10?搜索? 满心欢喜地敲了一通搜索. 交上去,Wa声一片? 全部MLE! 这么坑人神奇? 一想,可能是爆 ...

  8. [BZOJ 3571] 画框

    Link: BZOJ 3571 传送门 Solution: 和 BZOJ2395 的建模完全相同,(BZOJ2395 题解传送门) 仅仅是将其中的基础问题由最小生成树改成了二分图最大完美匹配 只要将原 ...

  9. 【莫队算法】【权值分块】bzoj3585 mex

    orz PoPoQQQ. 本来蒟蒻以为这种离散化以后就对应不起来的题不能权值分块搞的说. ……结果,实际上>n的权值不会对答案作出贡献. #include<cstdio> #incl ...

  10. 十. 图形界面(GUI)设计10.菜单

    有两种类型的菜单:下拉式菜单和弹出式菜单.本章只讨论下拉式菜单编程方法.菜单与JComboBox和JCheckBox不同,它们在界面中是一直可见的.菜单与JComboBox的相同之处是每次只可选择一个 ...