句法分析導引
以詞為單位的分析技術:詞語切分、形態分析、詞類標註。
以句為單位的分析技術:句法分析。
以篇為單位的分析技術:指代分析。
句法分析關心句子的組成規律。
句子成分分析
句子是詞的線性序列,但詞和詞之間結合的鬆緊程度並不一樣。
句子在構造上具有層次性,較小的成分還可以進一步組成較大的成分。
不同性質的成分可以有不同的句法功能和分布,可以區分成不同的型別。
短語
英語中的短語:名詞性短語(np),動詞性短語(vp),介詞短語(pp),形容詞性短語。
漢語中的短語:名詞性短語(np),動詞小短語(vp),形容詞性短語(ap),處所詞性短語(sp),時間詞性短語(tp),數量短語(mp),介詞短語(pp)。
句法知識的形式化
上下文無關文法(cfg)是最常用的句法知識形式化工具。
為了便於計算機處理自然語言,計算語言學研究人員提出了許多形式語法系統(grammar formalism),例如:功能合一語法(fug)、詞彙功能語法(lfg)、中心詞驅動的短語結構語法(hpsg)等。在這些語法形式化系統中,上下文無關文法是乙個核心組成部分。
許多句法分析演算法都建立在上下文無關文法的基礎上。
上下文無關文法
作為生成裝置生成語言中的句子。
作為識別裝置判斷句子是否合法。
作為分析裝置產生給定句子的句法結構。
句法分析
句法分析的任務是對給定自然語言句子,分析並得到其句法結構。
句法結構通常表示為句法樹。
人工語言的句法分析
人工語言的特點是無二義性。
存在快速有效的語法分析方法:ll分析法,lr分析法。
自然語言的句法分析
歧義:是指同乙個句子,按照指定的文法,會產生多種分析結果。
由於句法歧義,成熟的用於分析人工語言的句法分析演算法不能直接用於自然語言的句法分析。
對於存在歧義的句子,通常在具體的上下文環境中,只有一種分析結果是正確的,句法排歧指的是根據各種知識,選擇正確分析結果的過程。
基於上下文無關文法的句法分析器應能產生乙個句子所有可能的句法分析樹。
句法分析演算法
自頂向下利用規則推導。
自底向上逆向利用規則進行規約。
非確定性:回溯或並行。
可以融合自頂向下和自底向上的方法,以一種方法為主要方法,另一種方法為輔助。
earley演算法:自頂向下的分析演算法,時間複雜度為n3。
乙個狀態包含:規則,圓點和起始位置。
圓點被用在狀態語法規則的右側,它告訴我們語法識別工作執行的進展情況,圓點左邊的部分是已分析的,右邊是待分析的。
基本操作包括:**(點右側非終結符),掃瞄(右側終結符)和完成(右側標記狀態)。
標準lr演算法:自底向上分析演算法。只有lr文法所定義的語言可以使用lr分析演算法進行分析。lr分析演算法,完全消除了回溯,可以以確定性的方式進行分析。
廣義lr分析法:標準lr文法不能有二義性,因此標準lr分析演算法不能用來分析自然語言。
對於描述自然語言的上下文無關文法可以使用同樣的方法構造lr分析表,但構造出的分析表不是確定性的分析表。也就是說,動作表的乙個單元格內可能包含多個分析動作,或者說分析表具有多重入口。當分析表的單元格**現多個動作時,標準lr分析器不知道應該執行哪個分析動作。
對於lr分析表中的多重入口,由於相應的分析動作是多重的,分析動作應同時沿著多條分析路徑進行。富田勝為此引入了圖結構棧技術。在分析過程中,每當分析程序遇到有多個動作同時可以進行,分析程序就**成相應的幾個子程序。棧頂亦**為多個棧頂,分別依據分析表中規定的不同動作進行分析。如果兩個程序處理同一狀態,則棧頂合併為乙個棧頂,兩個程序則合併為乙個程序,這樣就形成一種圖結構的分析棧。
子樹共享
如果兩棵或兩棵以上的樹具有共同的子樹,那麼這棵子樹就只應該表示一次。
為了構造共享子樹,分析過程不再把語法符號入棧,而是將指向共享子樹的指標入棧。
當分析器移進乙個詞時,就用該詞和相應的終結符創立葉子結點,如果恰好同一結點已經存在,那麼
就將已存在結點的指標入棧,而不是另外創立乙個結點。當分析器歸約時,從棧中彈出指標,建立一
個新結點。
區域性歧義:如果兩棵或兩棵以上子樹的所有葉結點都相同,並且所有子樹的根結點被標有同一非終結符
號,也就是說句子的某一部分能用兩種或兩種以上方式歸約為同一非終結符,這時稱句子**現了區域性歧義。
如果句子中有許多區域性歧義,總的歧義數將會指數增長。為避免這種增長,可採用了區域性歧義壓縮技
術。這種技術是把有區域性歧義的子樹的頂點結合為一體。
在圖結構棧中,如果兩個或多個符號頂點左邊具有乙個共同的狀態頂點,並且右邊有乙個共同的狀態
頂點,則表示這幾個符號頂點具有區域性歧義。
壓縮共享森林:採用了子樹共享技術和區域性歧義壓縮技術後,得到的分析結果被稱為壓縮共享森林。
學不好計算機語言,可能是因為這樣!
在如今網際網路的時代和大資料氾濫的時代,如何利用計算機語言處理大量的資料成為了乙個行業發展的趨勢。然而,如何高效的利用計算機語言對資料進行處理,從而發掘 挖掘 其中的有用的知識便成為乙個計算機新的發展領域。但是,在學習計算機程式設計的語言中總是會遇到很多的坑,下面我們一起盤點一下。很多人在學習計算機...
資訊就是位 上下文 讀深入理解計算機系統
我們的hello程式的生命是從乙個源程式 或者說原始檔 開始的,該源程式由程式設計師通過編輯器建立並儲存為文字檔案,檔名就是helloc.c。源程式實際上就是乙個由0和1組成的位 又稱為位元 序列,這些位被組織8個一組,稱為位元組。每個位元組都表示程式中某個文字字元。大部分的現代系統都使用asc碼標...
深入理解計算機系統 1 1 資訊就是位 上下文
我們的hello程式作為乙個被程式設計師用編輯器建立並儲存在hello.c檔案中的源程式開始它的生命。源程式就是乙個位序列,每乙個位代表0或者1,這些位序列每八位組成乙個位元組。在程式中,每乙個位元組代表乙個字元。大部分現代系統用ascii標準呈現文字字元,ascii標準就是用乙個位元組大小的整型值...