句法模式識別/結構模式識別(四)---句法分析


相關文章:
句法模式識別/結構模式識別(一)—概述
句法模式識別/結構模式識別(二)—形式語言
句法模式識別/結構模式識別(三)—文法推斷
句法模式識別/結構模式識別(五)—自動機


一、 句法分析概念

利用文法對未知類別的句法模式進行識別或分類的過程

設有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 厄利分析法

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述
在這裏插入圖片描述

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