該章三個(gè)問題:
1:我們應(yīng)該怎樣建立一個(gè)系統(tǒng),從非結(jié)構(gòu)化的文章中提取出結(jié)構(gòu)化的數(shù)據(jù)。
2:有哪些穩(wěn)健的方法可以識(shí)別文章中的實(shí)體以及關(guān)系?
3: 哪些數(shù)據(jù)庫適合用來做這些工作,我們?cè)鯓佑盟麄冇?xùn)練并評(píng)測(cè)我們的模型?
第一節(jié):提取信息
先將非結(jié)構(gòu)化的數(shù)據(jù)轉(zhuǎn)為結(jié)構(gòu)化的數(shù)據(jù),然后利用強(qiáng)大的搜索工具如sql對(duì)數(shù)據(jù)進(jìn)行查詢,這種獲取語義的方法被稱為信息提取。
1.1 信息提取結(jié)構(gòu)
將文本分割為句子,句子分割為單詞,為單詞標(biāo)記詞性。識(shí)別有信息量的實(shí)體,根據(jù)他們的語境確定其關(guān)系。
第二節(jié):分塊
2.1 名詞短語分塊
用正則表達(dá)式構(gòu)建分塊語法,再對(duì)已經(jīng)標(biāo)注詞性的句子進(jìn)行分塊:
2.2 標(biāo)記模塊
是一系列pos標(biāo)記,與正則表達(dá)式模塊很相似:
<DT>?<JJ.*>*<NN.*>+
但是還是有許多復(fù)雜的表達(dá)無法用該模塊提取。需要繼續(xù)優(yōu)化。
2.3 用正則表達(dá)式分塊,
如以上所示,建立語法規(guī)則 grammar?
2.4 探索文章語料庫
之前我們學(xué)過怎樣用pos標(biāo)記尋找三詞短語:
用基于正則表達(dá)式的分塊器會(huì)更加容易一些:
還可以加縫隙,排除不合適的元素:grammar= r'''NP: {<.*>+} }<VBD|IN>+{? 這樣就排除了動(dòng)詞以及介詞
Chunks的表達(dá):可以用tags 或者 trees:
IOB-Tags: B: begin, I:inside, O:outsid? ? B-NP:一個(gè)名詞短語的開始
第三節(jié):研發(fā)與測(cè)試分塊器
簡單的評(píng)估與基準(zhǔn)
獲得已經(jīng)標(biāo)注好的數(shù)據(jù)庫的內(nèi)容
print(conll2000.chunked_sents('train.txt',chunk_types=['NP'])[10])
以此為基礎(chǔ),訓(xùn)練n-gram分類器
可以將該一元分類器改為二元分類器,使用BigramChunker
訓(xùn)練基于分類器的分塊器:與二元相比更加靈活,可以甄別多種可能有用的特征
7.4 語言結(jié)構(gòu)中的遞歸現(xiàn)象
分級(jí)別,多次對(duì)句子中的結(jié)構(gòu)進(jìn)行深度分析分析。不過因?yàn)閯?chuàng)造這種分級(jí)方法,查找錯(cuò)誤是比較麻煩的,而且這種方法得確定深度等級(jí),所以對(duì)分析復(fù)雜的句法并不是很合適。
--- 樹:句法樹
--- 遍歷樹:可以用遞歸函數(shù)來遍歷樹
7.5 識(shí)別命名實(shí)體
也可以像上面的通過分類器確定分塊器的方法,通過數(shù)據(jù)訓(xùn)練,使其能夠識(shí)別某些多字符命名實(shí)體。
7.6 提取關(guān)系
可以通過正則表達(dá)式,確定兩實(shí)體之間的關(guān)系如(r'.*\bin\b(?!\b.+ing)' 該表達(dá)可以忽略現(xiàn)在分詞ing的表達(dá)
用正則表達(dá)式可能會(huì)得到假陽性答案 false postives
總結(jié):