相關文章:
句法模式識別/結構模式識別(一)—概述
句法模式識別/結構模式識別(二)—形式語言
句法模式識別/結構模式識別(三)—文法推斷
句法模式識別/結構模式識別(五)—自動機
一、 句法分析概念
利用文法對未知類別的句法模式進行識別或分類的過程
設有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 厄利分析法