相关文章:
句法模式识别/结构模式识别(一)—概述
句法模式识别/结构模式识别(二)—形式语言
句法模式识别/结构模式识别(三)—文法推断
句法模式识别/结构模式识别(五)—自动机
一、 句法分析概念
利用文法对未知类别的句法模式进行识别或分类的过程
设有M类模式,ωi类模式即第i种语言L(Gi)。对一个未知类别的句子x(句法模式):
- 若x是文法Gi的一个合法句子,则x∈L(Gi),即x∈ωi
- 若x不是M种文法中任何一种文法的合法句子,则拒识
二、句法分析的方法
2.1 参考链匹配法
设有M类模式
- 对每一类模式给出一组样本链(参考链)
- 将输入链x与每一类的参考链进行比较,并规定一个比较容限。x被识别为与其匹配“最好”的参考链所属的模式类
2.2 状态图法:适用于有限状态文法
2.3 填充树图法(适用于上下文无关文法)
若已知某语言的文法Gi,给定某待识别的链x,建立一个以x为底,以起始符S为顶的三角形,如下图所示:
用文法Gi的生成式填充这个三角形,使之成为一个分析树,若填充成功,表示x可以由文法Gi导出。
因此x∈L(Gi),即x∈ωi,否则x不属于该类。
填充三角形的方法:自顶向下、自底向上
-
自顶向下法
-
自底向上法
2.4 CYK分析法
库克(cocke)-杨格(younger)-卡塞米(kasami)分析法
用于上下文无关文法(CFG,Context Free Grammar)的分析
要求:生成式必须表示为乔姆斯基范式
- 乔姆斯基范式(CNF,Chomsky Normal Form)
A→BC或A→a
其中A,B,C为非终止符,a为终止符。
方法:将一个一般的上下文无关文法(CFG,以下都用CFG代替)构造一个乔姆斯基范式(CNF,以下都用CNF代替)的过程如下:
(1)为每个出现在长度大于等于2的产生式中的终结符a创建一个新的变元A,该变元只有一个产生式A→a。接着,可以用A来替代所有产生式中出现的a。现在,所有产生式或者是单个终结符,或者是至少两个以上的变元并且没有终结符。
(2)把所有形式为A→B1B2B3⋯Bk(k⩾3)的产生式打断为以下一组产生式:A→B1C1,C1→B2C2,⋯,Ck−3→Bk−2Ck−2,Ck−2→Bk−1Bk
现在,所有的产生式都符合CNF的定义。
例如:
S→aAB,A→bB,B→c
其乔姆斯基范式为:
S→DE,D→a,E→AB,A→FB,F→b,B→c
- CYK算法
CYK处理的上下文无关文法必须是乔姆斯基范式形式的。所以算法首先要把非CNF形式的CFG转化到CNF形式,方法如上。
接下来需要构造一个识别矩阵,如果我们要处理的句子中有n个词,那么这个矩阵就是一个(n+1)×(n+1)的矩阵的上三角部分。这里假如要分析的句子是“The girl studies hard”,其给定的文法如下:
S→PVPVP→VVVP→VPNP→他V→喜欢V→读N→书
步骤如下:
(1)首先构造主对角线,令t0,0=0.然后从t1,1到tn,n在主对角线的位置上依次放入句子的单词ωi,如下图:
2.构造主对角线以上紧靠主对角线的元素ti.i+1,其中i=0,1,2,⋯,n−1。对于输入句子x=ω1ω2⋯ωn,从ω1开始分析:
如果在文法G的产生式集中有一条规则A→ω1,则填充t0,1=A,依此类推,如果有A→ωi+1,则ti,i+1=A。即,对于主对角线上的每一个终结符ωi,所有可能推导出它的非终结符写在它的右边主对角线上方的位置上。如下图所示:
3.按平行于主对角线的方向,一层一层地向上填写矩阵的各个元素ti,j,其中i=0,1,⋯,n−dj=d+id=2,3,⋯,n
如果存在一个正整数k(i+1≤k≤j−1)k(i+1≤k≤j−1),在文法G的规则集中有产生式A→BC,并且B∈ti,k,C∈tk,j,那么将A写到矩阵ti.j位置上。
判断句子x由文法G所产生的充要条件是:t0,n=S
注意这里出错了,因为S最终的位置不在最右上角的地方,所以返回到上一步重新来:
这里S出现在了矩阵的最右上角,所以正确。
得到的分析树如下:
2.5 厄利分析法