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