不同的解析器型別:
解析器通常需要對乙個用於表達一組語法規則的輸入字串繼續處理,然後構成乙個或者多個可用於構成某種語法概念的規則。語法是我們衡量乙個句子是否良好的乙份規範說明,而解析器則是乙個用於解讀語法的程式。該程式會通過搜尋各種不同的樹結構空間,找出給定句子的最佳樹結構,下面是一些解析器的運用細節和實際用途。
遞迴下降解析器:
遞迴下降解析器(recursive descent parsing)是乙個自上而下的處理過程,由於解析器的基本操作是從左向右讀取輸入流中的資訊,所以他會試著去驗證其語法的正確性。該解析其的基本操作是從輸入流中讀取字元,然後將它們與終端所輸入的語法規則進行匹配,遞迴下降解析器會在其得到一次正確匹配時會超前檢視乙個字元,並領先於其輸入流的讀取指標。
移位-歸約解析器:
移位-歸約解析器(shift-reduce parser)是一種簡單的自下而上的解析器,其試著去尋找乙個單詞和短語的序列,它們一方面對應著語法生成器的右側,另一方面則會用生成器左側的內容對其進行替換,直到歸簡出完整的句子為止。
圖表解析器:
將動態規劃技術應用到解析器上,動態規劃將中間的結果儲存下來,然後再適當的時候重新啟動它們,以便提高效率。在文字解析中將解析任務分成幾個部分來解決,並將各個部分的結果先儲存起來,然後在必要時再考慮如何將其有效地組合成乙個完整的解決方法,這種方法被稱為圖表解析(chart parsing)
正規表示式解析器:
正規表示式解析器使用的是乙個正規表示式,定義該表示式的語法形式是在完成了詞性標註的字串之上構建而成的。該解析器將使用這些正規表示式來解析給定的句子,並為他們生成解析樹。下面是使用正規表示式所產生的解析例項:
import nltk
from nltk.chunk.regexp import *
chunk_rules=chunkrule("<.>","chunk everything")
reg_parser=regexpparser('''
np:
p: {}
v: {}
pp: {}
vp:
''')
test_sent="mr. obama played a big role in the health insurance bill."
test_sent_pos=nltk.pos_tag(nltk.word_tokenize(test_sent))
paresed_out=reg_parser.parse(test_sent_pos)
print(paresed_out)
結果:
(s
mr./nnp
obama/nnp
(vp (v played/vbd) (np a/dt big/jj role/nn))
(p in/in)
(np the/dt)
health/nnp
(np insurance/nn bill/nn)
./.)
視覺化後樹結構為:
例子中我們(基於pos正規表示式)定義了模式的種類希望用模式來生成短語,例如,如果某個短語匹配,也就是說明它是乙個限定詞後跟乙個形容詞,再加乙個名詞,大多數情況下會是乙個名詞的短語。
NLTK基礎教程學習筆記(五)
import nltk from nltk import word tokenize s i was watching tv print nltk.pos tag word tokenize s 結果 i prp was vbd watching vbg tv nn 中先將文字進行表示化處理,再呼叫...
NLTK基礎教程學習筆記(四)
標識化處理 機器所要理解的最小處理單位是單詞 分詞 標識化處理,是將原生字元創分割成一系列有意義的分詞。標識化就是將原生字串分割成一系列有意義的分詞。標識化處理的複雜性因具體nlp應用而異,目標語言本身的複雜性本身也會帶來相關的變化。在英語中,可以通過正規表示式簡單的單詞來選取純單詞和數字,但在中文...
NLTK基礎教程學習筆記(十)
依賴性文字解析 依賴性文字解析 dependency parsing 簡稱dp 是一種現代化的文字解析機制。dp的主要概念是將各個語法單元 單詞 用丁香鏈路串聯起來。這種鏈路稱為依賴關係 dependencies 在目前的文字解析社群中,有大量工作在進行。儘管短語結構式文字解析 phrase str...