1. 程式人生 > >斯坦福和NLTK英語短語片語抽取工具原理及原始碼理解

斯坦福和NLTK英語短語片語抽取工具原理及原始碼理解

一、斯坦福短語抽取工具實現了四個方法來進行短語搭配抽取
(1)基於統計頻率數的方法
該方法用於查詢長度為2或者3並且連續的短語搭配。因此只處理bigrams和trigrams語料庫。對於候選短語集,首先使用預定義的詞性序列做一個初步的過濾,將不符合該詞性序列的短語組合過濾掉。預定義的詞性組合為:
NN_NN
JJ_NN
VB_NN

NN_NN_NN
JJ_NN_NN
NN_JJ_NN
JJ_JJ_NN
NN_IN_NN
然後統計每組短語搭配在語料庫中出現的頻率和在語料庫中具體的位置,最後按照出現的頻率排序,取TopN。
如:
Length 2 (<WORD>, <count>):
UNITED STATES, 47
SMALL BUSINESS, 37


Length 3 (<WORD>, <count>):
SMALL BUSINESS CONCERN, 13
SMALL BUSINESS ADMINISTRATION, 9


(2)基於均值和方差的方法
該方法主要用於查詢長度為2的非連續的短語片語。對於同一個句子,控制視窗大小為9,然後對於每個詞剩餘的8個詞即為可能與這個片語成片語的詞。對於每一個片語,基於語料庫,統計第二個詞出現時,距離第一個詞的距離長度滿足一定距離時的次數,然後建立相應的直方圖。
使用“flat peak”條件對得到的片語過濾,然後計算符合條件的片語的均值和方差,按方差增加的順序排列,對於方差相同的片語按頻率減少的順序排列。取top1000用於相似性測試。
如:
Length 2 (<WORD>, <mean>, <variance>, <count>):
UNITED STATES, UNITED, STATES, 1.0, 0.0, 47
OLD MAN, OLD, MAN, 1.0, 0.0, 21
RADIO EMISSION, RADIO, EMISSION, 1.0, 0.0, 16


(3)基於顯著性水平t值的方法
該方法用於查詢長度為2或者3的連續短語片語,在第一種方法計算出的結果的基礎上,計算每個片語的t值,然後按照t值減少的順序排列。
T的計算公式:


S2表示方差,N表示大小,u表示分配數。
如:
Length 3 (<WORD>, <t_value>, <count>):
SMALL BUSINESS CONCERN, 3.6056123197382504, 13
SMALL BUSINESS ADMINISTRATION, 2.9998899172660995, 9


Length 2 (<WORD>, <t_value>, <count>):
UNITED STATES, 6.8303675830354, 47
SMALL BUSINESS, 5.987962457983314, 37


(4)基於卡方檢驗(Chi-square)的方法
該方法用於查詢長度為2的連續短語片語。在第一種和第三種方法計算出結果的基礎上,計算片語的卡方值,然後按照結果的遞減順序排列。


觀察次數減去理論次數的平方除以理論次數。
fi代表觀察次數,npi代表理論次數。
如:
Length 2 (<WORD>, <chi-square_value>, <count>):
UNITED STATES, 6823.207158142358, 47
POST-ATTACK RECONNAISSANCE, 5789.036633730465, 4
SURFACE-ACTIVE AGENT, 5206.106140377071, 6


CollocationFinder.java位於edu.stanford.nlp.trees目錄下。
CollocationFinder.java:
功能:基於WordNet和詞性以及各層次句法之間的關係進行短語搭配提取。
演算法主要思想:對每句話的句法分析樹的所有子樹,進行短語搭配,然後將搭配的短語片語跟wordnet中的語料比較,若該片語在語料中則為提取出的片語。
呼叫的外部類有:Generics類、WordTag類等
主要方法:getCollocationsList(Tree t):遍歷斯坦福句法分析得到的句法分析樹,提取的結果儲存在:collocationCollector中,格式是word1_word2_word3(index1,index2)
實現過程:
1.使用getChildrenAsList()函式獲取句法樹的所有子樹。
2.對每一個子樹,根據詞性以及獲取詞的形態判斷哪些詞是形近詞,形近詞判斷函式:Morphology.stemStatic()。把形近詞存到同一個List中。剩下的非形近詞存到一個List中。在treeAsStemmedCollocation函式中把提取出的形近詞轉化為word1_word2_word3格式。
3.在wordNet中查詢是否存在該短語片語。
部分方法:
treeAsStemmedCollocation(Tree t):返回每個子樹對應的短語片語。