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


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


一、 句法分析概念

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

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

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

二、句法分析的方法

在这里插入图片描述

2.1 参考链匹配法

设有M类模式

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

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

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

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

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

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

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

2.4 CYK分析法

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

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

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

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

2.5 厄利分析法

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值