已遷移到我新博客,閱讀體驗更佳parsing:NLP之chart parser句法分析器
完整代碼實現放在我的github上:click me
一、任務要求
- 實現一個基於簡單英語語法的chart句法分析器。
二、技術路線
采用自底向上的句法分析方法,簡單的自底向上句法分析效率不高,常常會重復嘗試相同的匹配操作(回溯之前已匹配過)。一種基於圖的句法分析技術(Chart Parsing)被提出,它把已經匹配過的結果保存起來,今后需要時可直接使用它們,不必重新匹配。(動態規划)
- chart parsing的數據表示:
- p圖(chart)的結點表示句子中詞之間的位置數字
- p非活動邊集(chart的核心,常直接就被稱為chart
- n記錄分析中規約成功所得到的所有詞法/句法符號
- 活動邊集
- 未完全匹配的產生式,用加小圓圈標記(º)的產生式來表示,如:
- NP -> ART ºADJ N
- NP -> ART ºN
- 未完全匹配的產生式,用加小圓圈標記(º)的產生式來表示,如:
- 待處理表(agenda)
- 實際上是一個隊列模型,記錄等待加入chart的已匹配成功的詞法/句法符號
- 上面的活動邊、非活動邊以及詞法/句法符號都帶有“始/終結點”位置信息
- chart parsing對“~1~ The ~2~ cat ~3~ caught ~4~ a ~5~ mouse ~6~”進行分析的數據示例:

-
chart parsing的句法分析算法步驟描述如下:
- 若agenda為空,則把句子中下一個詞的各種詞法符號(詞)和它們的位置加入進來
- 從agenda中取一個元素(設為C,位置為:p1-p2)
- 對下面形式的每個規則增加活動邊:
- X->CX~1~...X~n~,增加一條活動邊:X->C º X~1~...X~n~,位置為:p1-p2;
- X->C,把X加入agenda,位置為:p1-p2
- 將C作為非活動邊加入到chart的位置p1-p2
- 對已有活動邊進行邊擴展
- 對每個形式為:X->X~1~... º C...X~n~的活動邊,若它在p0-p1之間,則增加一條活動邊:X->X~1~... C º...X~n~,位置:p0-p2
- 對每個形式為: X->X~1~... X~n~ º C的活動邊,若它在p0-p1之間,則把X加入agenda ,位置為:p0-p2
-
程序實現的大致流程:輸入英文語句,對在詞典dic_ec.txt中不存在的英文單詞進行形態還原,對還原后的語句執行chart parsing算法並將分析出的所有非活動邊輸出。由於一個英文單詞可能存在多種詞性,這種情況下會對每種可能的詞性進行遞歸,對於不符合句法規則的詞性會進行回溯嘗試以其它的詞性進行句法規則的匹配與分析。直到找到符合句法規則的詞性組合則結束遞歸,嘗試完所有的詞性組合還是沒能找到則句法分析失敗,輸入的句子不符合當前的句法規則。
三、數據說明
- 由於這個實驗中引用了token實驗模塊,所以需要用到token實驗中的三個數據字典dic_ec.txt,irregualr nouns.txt,irregular verbs.txt,關於這三個數據字典的說明在token實驗中已給出,此處不再贅述。除此之外,chart parsing算法還需要用到dic_ec.txt詞典中英文單詞的詞性。
四、遇到的問題及解決方案
- 程序實現過程中受到文件編碼和分隔符的困擾,最后用vim把用到的3個數據詞典統一設置成gbk編碼,以\t進行分隔,方便程序統一讀入處理。
- dic_ec.txt這個數據字典中的數據質量不太好,很多英文單詞都被標注成none.詞性,由於無法獲取詞的正確詞性從而無法完成句子的句法分析。
五、性能分析
- 對句法分析部分作一個性能的度量,單句句法分析的結果基本都在毫秒級別,下面給出基於規則S->NP VP,NP->ART N,NP->ART ADJ N,VP->V,VP->V NP對the cat catch a mouse進行句法分析得到的運行結果及耗時截圖:

六、運行環境
- 將執行文件parsing.exe與數據字典dic_ec.txt,irregular nouns.txt,irregualr verbs.txt放在同一個文件夾下,然后點擊parsing.exe即可正常運行程序。
七、用戶手冊
- 在運行環境下正常運行程序后會出現下圖這樣的主菜單文字界面:

- 根據主菜單進行操作,首先選擇1來寫入規則,可一次寫入多個規則,輸入q!結束規則寫入,如果后期需要增加規則,可以在主菜單界面再次選擇1來寫入增添的規則,這樣就實現了規則的靈活擴展。下面是寫入規則模塊的截圖:

- 寫入規則結束后又回退到主菜單界面,這時候可以選擇2來輸入句子進行句法分析,程序會輸出分析過程中得到的所有非活動邊對應的短語及位置范圍,下面是在上面所寫入規則的基礎上對the cat caught a mouse進行句法分析的結果截圖,程序會對dic_ec.txt中不存在的單詞嘗試調用詞形還原模塊進行還原再分析:

- 句法分析回退到主菜單界面,可以繼續選擇1進行規則擴展,也可以選擇2進行句法分析,選擇q退出程序運行。
- 基於下面的句法規則給出一個句法分析示例:
NP->ART N
NP->ART
NP->PRON
NP->N
NP->ART ADJ N
VP->V
VP->V NP
對I like her進行句法分析的結果截圖如下:

