模式识别之Earley算法入门详讲
引言:刚学习模式识别时,读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算法入门详讲的更多相关文章
- KCF跟踪算法 入门详解
一.算法介绍 KCF全称为Kernel Correlation Filter 核相关滤波算法.是在2014年由Joao F. Henriques, Rui Caseiro, Pedro Martins ...
- 针对初学者的A*算法入门详解(附带Java源码)
英文题目,汉语内容,有点挂羊头卖狗肉的嫌疑,不过请不要打击我这颗想学好英语的心.当了班主任我才发现大一18本书,11本是英语的,能多用两句英语就多用,个人认为这样也是积累的一种方法. Thanks o ...
- Edmonds_Karp 算法入门详解(转)
转载自:http://blog.csdn.net/hsqlsd/article/details/7862903 有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点,通常规定为1号点.另一个点也 ...
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- Redis快速入门详解
Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis ...
- 【转】 SVM算法入门
课程文本分类project SVM算法入门 转自:http://www.blogjava.net/zhenandaci/category/31868.html (一)SVM的简介 支持向量机(Supp ...
- MD5算法步骤详解
转自MD5算法步骤详解 之前要写一个MD5程序,但是从网络上看到的资料基本上一样,只是讲了一个大概.经过我自己的实践,我决定写一个心得,给需要实现MD5,但又不要求很高深的编程知识的童鞋参考.不多说了 ...
- 【算法入门】广度/宽度优先搜索(BFS)
广度/宽度优先搜索(BFS) [算法入门] 1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较 ...
- LDA算法入门
http://blog.csdn.net/warmyellow/article/details/5454943 LDA算法入门 一. LDA算法概述: 线性判别式分析(Linear Discrimin ...
随机推荐
- js实现侧边栏信息展示效果
目前的网页都右侧边栏,有的是在左侧,类似于导航栏,如一些购物商城,还有一些是在网页的右下角,一般是提示客服信息和微信/QQ等服务. 这里都涉及到一个动画效果的展示,即点击侧边栏时会在侧边栏的右侧或者左 ...
- 利其器之webstorm快捷键
总结几个webstorm常用的快捷键(macbook下) 最实用: command + option + 左/右箭头 定位到历史记录中上次/下次编辑的位置 command + b ...
- noi题库 1.7 字符串 10到第15题
10:简单密码 描述 Julius Caesar曾经使用过一种很简单的密码.对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文.比如字符A用F来代替.如下是密文和明文中字符 ...
- 加快Vue项目的开发速度
巧用Webpack Webpack是实现我们前端项目工程化的基础,但其实她的用处远不仅仅如此,我们可以通过Webpack来帮我们做一些自动化的事情.首先我们要了解require.context()这个 ...
- 利用Java的反射与代理机制实现AOP
在上一篇文章中,我们讲述了利用Java的反射机制中实现Spring中的IOC,在本文中,我们将更进一步,讲述用Java的反射和动态代理机制来实现Spring的AOP. 一.AOP概述 AOP(Aspe ...
- [BZOJ 2006] 超级钢琴
Link: https://www.lydsy.com/JudgeOnline/problem.php?id=2006 Algorithm: 对于此类区间最值类问题,我们可以通过控制一端不变来寻找当前 ...
- 【推导】【贪心】Codeforces Round #402 (Div. 2) E. Bitwise Formula
按位考虑,每个变量最终的赋值要么是必为0,要么必为1,要么和所选定的数相同,记为2,要么和所选定的数相反,记为3,一共就这四种情况. 可以预处理出来一个真值表,然后从前往后推导出每个变量的赋值. 然后 ...
- 【点分治】【哈希表】bzoj2599 [IOI2011]Race
给nlog2n随便过的跪了,不得已弄了个哈希表伪装成nlogn(当然随便卡,好孩子不要学)…… 不过为啥哈希表的大小开小点就RE啊……?必须得超过数据范围一大截才行……谜 #include<cs ...
- 《ggplot2:数据分析与图形艺术》,读书笔记
第1章 简介 1.3图形的语法 第2章从qplot开始入门 1.基本用法:qplot(x,y,data) x是自变量横轴,y是因变量纵轴,data是数据框 2.图形参数 colour=I(&quo ...
- 使用layer.js注意事项
一.使用时,将layer整个文件夹放置你站点的任何一个目录,layer.js 开发版,layer.min.js 压缩版,引入其中一个即可.css等其它文件无需引入. 二.如果您的js引入是通过合并处理 ...