句法模式识别/结构模式识别(四)---句法分析


相关文章:
句法模式识别/结构模式识别(一)—概述
句法模式识别/结构模式识别(二)—形式语言
句法模式识别/结构模式识别(三)—文法推断
句法模式识别/结构模式识别(五)—自动机


一、 句法分析概念

利用文法对未知类别的句法模式进行识别或分类的过程

设有M类模式,ωi\boldsymbol{\omega }_{\boldsymbol{i}}类模式即第i种语言L(Gi)\boldsymbol{L}\left( \boldsymbol{G}_{\boldsymbol{i}} \right)。对一个未知类别的句子x(句法模式):

  • 若x是文法Gi\boldsymbol{G}_{\boldsymbol{i}}的一个合法句子,则xL(Gi)\boldsymbol{x}\in \boldsymbol{L}\left( \boldsymbol{G}_{\boldsymbol{i}} \right),即xωi\boldsymbol{x}\in \boldsymbol{\omega }_{\boldsymbol{i}}
  • 若x不是M种文法中任何一种文法的合法句子,则拒识

二、句法分析的方法

在这里插入图片描述

2.1 参考链匹配法

设有M类模式

  • 对每一类模式给出一组样本链(参考链)
  • 将输入链x与每一类的参考链进行比较,并规定一个比较容限。x被识别为与其匹配“最好”的参考链所属的模式类

2.2 状态图法:适用于有限状态文法

在这里插入图片描述
在这里插入图片描述

2.3 填充树图法(适用于上下文无关文法)

若已知某语言的文法Gi\boldsymbol{G}_{\boldsymbol{i}},给定某待识别的链x,建立一个以x为底,以起始符S为顶的三角形,如下图所示:
在这里插入图片描述
用文法Gi\boldsymbol{G}_{\boldsymbol{i}}的生成式填充这个三角形,使之成为一个分析树,若填充成功,表示x可以由文法Gi\boldsymbol{G}_{\boldsymbol{i}}导出。
因此xL(Gi)\boldsymbol{x}\in \boldsymbol{L}\left( \boldsymbol{G}_{\boldsymbol{i}} \right),即xωi\boldsymbol{x}\in \boldsymbol{\omega }_{\boldsymbol{i}},否则x不属于该类。
填充三角形的方法:自顶向下、自底向上

  1. 自顶向下法
    在这里插入图片描述在这里插入图片描述

  2. 自底向上法
    在这里插入图片描述在这里插入图片描述

2.4 CYK分析法

库克(cocke)-杨格(younger)-卡塞米(kasami)分析法
用于上下文无关文法(CFG,Context Free Grammar)的分析
要求:生成式必须表示为乔姆斯基范式

  1. 乔姆斯基范式(CNF,Chomsky Normal Form)
    ABC  Aa \boldsymbol{A}\rightarrow \boldsymbol{BC}\,\,\text{或}\boldsymbol{A}\rightarrow \boldsymbol{a}
    其中A,B,C为非终止符,a为终止符。
    方法:将一个一般的上下文无关文法(CFG,以下都用CFG代替)构造一个乔姆斯基范式(CNF,以下都用CNF代替)的过程如下:
    (1)为每个出现在长度大于等于2的产生式中的终结符a创建一个新的变元A,该变元只有一个产生式A→a。接着,可以用A来替代所有产生式中出现的a。现在,所有产生式或者是单个终结符,或者是至少两个以上的变元并且没有终结符。
    (2)把所有形式为AB1B2B3Bkk3\boldsymbol{A}\rightarrow \boldsymbol{B}_1\boldsymbol{B}_2\boldsymbol{B}_3\cdots \boldsymbol{B}_{\boldsymbol{k}}\text{(}\boldsymbol{k}\geqslant 3\text{)}的产生式打断为以下一组产生式:AB1C1C1B2C2Ck3Bk2Ck2Ck2Bk1Bk\boldsymbol{A}\rightarrow \boldsymbol{B}_1\boldsymbol{C}_1\text{,}\boldsymbol{C}_1\rightarrow \boldsymbol{B}_2\boldsymbol{C}_2\text{,}\cdots \text{,}\boldsymbol{C}_{\boldsymbol{k}-3}\rightarrow \boldsymbol{B}_{\boldsymbol{k}-2}\boldsymbol{C}_{\boldsymbol{k}-2}\text{,}\boldsymbol{C}_{\boldsymbol{k}-2}\rightarrow \boldsymbol{B}_{\boldsymbol{k}-1}\boldsymbol{B}_{\boldsymbol{k}}
    现在,所有的产生式都符合CNF的定义。
    例如:
    SaABAbB,Bc\boldsymbol{S}\rightarrow \boldsymbol{aAB}\text{,}\boldsymbol{A}\rightarrow \boldsymbol{bB}, \boldsymbol{B}\rightarrow \boldsymbol{c}
    其乔姆斯基范式为:
    SDEDaEABAFBFbBc \boldsymbol{S}\rightarrow \boldsymbol{DE}\text{,}\boldsymbol{D}\rightarrow \boldsymbol{a}\text{,}\boldsymbol{E}\rightarrow \boldsymbol{AB}\text{,}\boldsymbol{A}\rightarrow \boldsymbol{FB}\text{,}\boldsymbol{F}\rightarrow \boldsymbol{b}\text{,}\boldsymbol{B}\rightarrow \boldsymbol{c}
  2. CYK算法
    CYK处理的上下文无关文法必须是乔姆斯基范式形式的。所以算法首先要把非CNF形式的CFG转化到CNF形式,方法如上。
    接下来需要构造一个识别矩阵,如果我们要处理的句子中有n个词,那么这个矩阵就是一个(n+1)×(n+1)的矩阵的上三角部分。这里假如要分析的句子是“The girl studies hard”,其给定的文法如下:
    S  P      VPVPV      VVPVP      NPVVN \boldsymbol{S}\,\,\rightarrow \boldsymbol{P}\,\,\,\,\,\,\boldsymbol{VP} \\ \boldsymbol{VP}\rightarrow \boldsymbol{V}\,\,\,\,\,\, \boldsymbol{V} \\ \boldsymbol{VP}\rightarrow \boldsymbol{VP}\,\,\,\,\,\,\boldsymbol{N} \\ \text{P}\rightarrow \boldsymbol{他} \\ \text{V}\rightarrow \boldsymbol{喜欢} \\ \text{V}\rightarrow \boldsymbol{读} \\ \text{N}\rightarrow \boldsymbol{书}
    步骤如下:
    (1)首先构造主对角线,令t0,0=0\boldsymbol{t}_{0,0}=0.然后从t1,1\boldsymbol{t}_{1,1}tn,n\boldsymbol{t}_{n,n}在主对角线的位置上依次放入句子的单词ωi\boldsymbol{\omega }_{\boldsymbol{i}},如下图:
    在这里插入图片描述
    2.构造主对角线以上紧靠主对角线的元素ti.i+1\boldsymbol{t}_{\boldsymbol{i}.\boldsymbol{i}+1},其中i=0,1,2,⋯,n−1。对于输入句子x=ω1ω2ωn\boldsymbol{x}=\boldsymbol{\omega }_1\boldsymbol{\omega }_2\cdots \boldsymbol{\omega }_{\boldsymbol{n}},从ω1\boldsymbol{\omega }_1开始分析:
    如果在文法G的产生式集中有一条规则Aω1\boldsymbol{A}\rightarrow \boldsymbol{\omega }_1​,则填充t0,1=A\boldsymbol{t}_{0,1}=\boldsymbol{A},依此类推,如果有Aωi+1\boldsymbol{A}\rightarrow \boldsymbol{\omega }_{\boldsymbol{i}+1}​,则ti,i+1=A\boldsymbol{t}_{\boldsymbol{i},\boldsymbol{i}+1}=\boldsymbol{A}。即,对于主对角线上的每一个终结符ωi\boldsymbol{\omega }_{\boldsymbol{i}},所有可能推导出它的非终结符写在它的右边主对角线上方的位置上。如下图所示:

    3.按平行于主对角线的方向,一层一层地向上填写矩阵的各个元素ti,j\boldsymbol{t}_{\boldsymbol{i},\boldsymbol{j}},其中i=0,1,,ndj=d+id=2,3,,n \boldsymbol{i}=0,1,\cdots ,\boldsymbol{n}-\boldsymbol{d} \\ \boldsymbol{j}=\boldsymbol{d}+\boldsymbol{i} \\ \boldsymbol{d}=2,3,\cdots ,\boldsymbol{n}
    如果存在一个正整数k(i+1≤k≤j−1)k(i+1≤k≤j−1),在文法G的规则集中有产生式A→BC,并且Bti,k,Ctk,j\boldsymbol{B}\in \boldsymbol{t}_{\boldsymbol{i},\boldsymbol{k}},\boldsymbol{C}\in \boldsymbol{t}_{\boldsymbol{k},\boldsymbol{j}},那么将A写到矩阵ti.j\boldsymbol{t}_{\boldsymbol{i}.\boldsymbol{j}}位置上。
    判断句子x由文法G所产生的充要条件是:t0,n=S\boldsymbol{t}_{0,\boldsymbol{n}}=\boldsymbol{S}

在这里插入图片描述在这里插入图片描述在这里插入图片描述
注意这里出错了,因为S最终的位置不在最右上角的地方,所以返回到上一步重新来:
在这里插入图片描述在这里插入图片描述
这里S出现在了矩阵的最右上角,所以正确
得到的分析树如下:
在这里插入图片描述

2.5 厄利分析法

在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章