張 敏,杜 華
(河北北方學院信息科學與工程學院,河北張家口075000)
隨著Internet應用的日益普及,搜索引擎作為提供資源檢索服務的工具已經(jīng)成為人們通過網(wǎng)絡獲取信息的重要渠道,正在深刻影響著我們的生活[1].CNNIC公布的最新數(shù)據(jù)顯示:2009年,搜索引擎的使用率為73.3%,是我國第三大互聯(lián)網(wǎng)應用[2],將成為我國今后互聯(lián)網(wǎng)應用的主流.
研究中文搜索引擎必須實現(xiàn)的關鍵技術之一就是中文分詞.現(xiàn)有的分詞算法分為三大類:基于字符串匹配的分詞方法、基于統(tǒng)計的分詞方法和基于理解的分詞方法[3].其中,基于字符串匹配的分詞方法,又稱為機械分詞方法,它具有分詞效率高、算法實現(xiàn)簡單的特點.這種分詞方法可以分為正向匹配和逆向匹配.其中最常用的是正向最大匹配和逆向最大匹配.基于統(tǒng)計的分詞方法按照文本中字串出現(xiàn)的頻率進行統(tǒng)計,這種方法雖能有效地識別新詞,但效率沒有機械分詞方法高,并且對常用詞的識別精度差、開銷大.基于理解的分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果.由于漢語語言知識的籠統(tǒng)、復雜性,難以將各種語言信息組織成機器可直接讀取的形式,因此目前基于理解的分詞系統(tǒng)還處在試驗階段[4-6].
Nutch作為一個開放源代碼 (open-source)的通用搜索引擎系統(tǒng)平臺受到了眾多開發(fā)者的青睞.與Google等商業(yè)搜索引擎相比,Nutch具有透明度高、擴展性好等特點.利用Nutch,可以方便快速的構造出一個性能良好的搜索引擎.但是,用于構建中文搜索引擎首要解決的是中文分詞問題.即中文搜索引擎首先必須對網(wǎng)頁原文進行詞的切分.如果不進行分詞,而是按單字來進行檢索,則檢索的結果可能與用戶的查詢要求相差較遠.由于Nutch是基于英文的系統(tǒng),雖然具有默認的中文分詞功能,但它采用的分詞方法是單字分詞,即每個字被認為是一個詞.這種方法對中文信息分析和處理的結果遠遠達不到人們所期望的效果.所以基于Nutch開發(fā)搜索引擎的第一步也是關鍵的一步就是設計合適的中文分詞算法模塊.本文選擇采用基于字典的正向最大匹配分詞算法,解決了Nutch系統(tǒng)中的中文分詞問題.
本文采用基于字符串匹配的分詞方法——最大匹配法.最大匹配法分詞需要一個詞典,分詞過程中文本里的候選詞與詞典中的詞進行匹配,如果匹配成功,則認為候選詞是詞,予以切分;否則就認為不是詞.所謂最大匹配,就是盡可能用最長的詞來匹配句子中的漢字串.中文分詞的正向最大匹配算法是:對一個字符串從前到后掃描,對掃描的每個字,從詞表中逐一找最長匹配,這是一種減字的匹配方法.
假設對字符串S進行正向最大匹配分詞,其算法描述如下:設自動分詞詞庫中最長詞條的漢字個數(shù)為n
Step1:取S中的前n個字作為匹配字段,記為S(n);
Step2:查找分詞詞庫,將S(n)與詞庫中的詞進行匹配,若詞庫中有這個詞,則匹配成功,S(n)作為一個詞被切分出來;
Step3:如果詞庫中找不到與S(n)匹配的詞,則匹配失敗;
Step4:n=n-1;
Step5:重復Step1—Step4,直到匹配成功.
Step6:從S中的第n+1個字開始,掃描字串S(n),重復Step2—Step5,直到n+1所指向的字為空.
本文中設計的分詞模塊實現(xiàn)了正向最大匹配算法 (MM),并提供語料訓練功能.
由于MM算法是基于詞典的分詞算法,所以詞典的權威性直接影響算法的分詞效果,而分詞效果對搜索引擎的性能起著至關重要的作用.本文在研究中通過總結現(xiàn)在流行的詞庫,自行合并去除重復,最后得到了本系統(tǒng)的中文詞庫,一個詞匯量為36 805的中文詞典dic.dat,該詞典為通用詞匯詞典.為了實現(xiàn)對新增詞匯的切分,設計了語料訓練模塊,通過語料訓練功能將新詞添加到現(xiàn)有的詞匯庫中.具體的設計結構如圖1所示.
Word Segment類對外提供分詞接口,該類啟動時載入詞典類Dictionary,通過相關算法進行分詞,并將分詞后的結果返回給調(diào)用方.
圖1 中文分詞模塊設計類圖
Dictionary類是詞典類,記錄所有的分詞.
分詞類:包括抽象類SegStrategy及相關實現(xiàn)MM.正向最大匹配算法MM就是在該類中實現(xiàn)的.
新詞訓練類:包括界面類Word SegFrame和Dic Trainer.他們提供了訓練新詞的能力,能夠將訓練好的新詞添加到當前詞典中,這樣就使本系統(tǒng)具有了識別新詞的能力.
所涉及的關鍵代碼如下:
public final class RucChineseAnalyzer extends Analyzer{
private static Word Segment seger;
public static Set CHINESE_STOP_WORDS;
static{
seger=new Word Segment();
seger.SetDic("dic.dat");
seger.set Strategy(new MM());
}
public Ruc Chinese Analyzer(){
stop Words=Stop Filter.makeStop Set(CHINESE_ENGLISH_STOP_WORDS);
}
public Token Stream token Stream(String field Name,Reader reader){
Buffered Reader br=new BufferedReader(reader);
String temp=null;
String sentence="";
try{
while((temp=br.readLine())!=null){
sentence+=temp;
}
Vector vec=seger.Segment(sentence);
StringBuffer middleResult=new StringBuffer();
if(vec!=null&&vec.size()>0)
for(int i=0;i<vec.size();i++){
String temp2= (String)vec.get(i);
if(temp2.length()>1)
middleResult.append(temp2+"");
}
String result String=middleResult.toString();
TokenStream result=new RucChinese Tokenizer(new StringReader(result String));
result=new Lower CaseFilter(result);
result=new Stop Filter(result,stop Words);
result=new Porter StemFilter(result);
return result;
}catch(IOException ex){
ex.print Stack Trace();
}
return null;
}
}
為了驗證分詞效果,使用下面一段話進行了分詞試驗,例句“大多數(shù)搜索引擎在滿足搜索全面性要求的同時難以兼顧專業(yè)性的需求.垂直搜索引擎面向特定領域,專注于自己的特長,保證了對該領域信息的完全收錄與及時更新.與通用搜索引擎不同,垂直搜索的目標是盡可能多的搜集與該主題相關的網(wǎng)頁.專業(yè)網(wǎng)絡蜘蛛抓取到的網(wǎng)頁如果與預定義主題相關,就做進一步的處理;如果不相關,則拋棄該網(wǎng)頁.”對例句切分的結果為:“大多數(shù)/搜索引擎/在/滿足/搜索/全面性/要求/的/同時/難以/兼顧/專業(yè)性/的/需求/./垂直/搜索引擎/面向/特定/領域/,專注/于/自己/的/特長/,/保證/了/ 對/該/領域/信息/的/完全/收錄/與/及時/更新/.與/通用/搜索引擎/不同/,/垂直/搜索/的/目標/是/盡可能/多/的/搜集/與/該/主題/相關/的/網(wǎng)頁/./專業(yè)/網(wǎng)絡/蜘蛛/抓取/到/的/網(wǎng)頁/如果/與/預定/義/主題/相關/,/就/做/進一步/的/處理/;/如果/不/相關/,/則/拋棄/該/網(wǎng)頁 .”可見,分詞的效果比較理想,并沒有因分詞導致嚴重的歧異.
下面針對上述實現(xiàn)的分詞算法,通過相應的測試數(shù)據(jù)集進行測試比較.在本文中,我們從國家分詞規(guī)范中選擇名詞、動詞、形容詞來進行實驗.對2005年SIGHAN國際分詞競賽的文本進行了實驗,并對結果進行了分析.
本文通過對來自北京大學 (PKU)、微軟研究院 (MSR)和香港城市大學 (CITYU)的測試語料分別進行了實驗.
分詞評測通常采用三個指標:正確率、召回率、F值.各指標定義如下:
定義1(分詞正確率):表示切分出的詞語中出現(xiàn)在標準結果中的詞語比例,計算公式如下:
分詞正確率= (切分出的詞語中出現(xiàn)在標準結果中的詞語數(shù))∕ (切分出的詞語總數(shù))
定義2(分詞召回率):表示標準結果中被正確切分出的詞語比例,計算公式如下:
分詞召回率= (切分出的詞語中出現(xiàn)在標準結果中的詞語數(shù))/(標準結果中的詞語總數(shù))
定義3(F值):正確率和召回率的調(diào)和平均數(shù),計算公式如下:
分詞F值= (2×分詞正確率×分詞召回率)∕ (分詞正確率+分詞召回率)
1)測試環(huán)境
實驗平臺:Intel Centrino Duo 1.66GHz,1G內(nèi)存,Windows XP,Java JDK1.5.
2)測試結果
(1)名詞測試結果
在名詞測試中對SIGHAN的CITYU、MSR和PKU的語料進行的測試結果分別如表1、表2和表3:
表1 名詞測試結果表
(2)動詞測試結果
在動詞測試中對SIGHAN的CITYU、MSR和PKU的語料進行的測試結果分別如表2:
表2 動詞測試結果表
(3)形容詞測試結果及分析
在形容詞測試中對SIGHAN的CITYU、MSR和PKU的語料進行的測試結果分別如表3:
表3 形容詞測試結果表
3)結論
通過對名詞、動詞、形容詞的測試,基本能夠達到預期的中文分詞要求.因此,MM算法應用于本系統(tǒng)是切實可行的.
本文在對中文分詞技術進行分析的基礎之上,在Nutch中設計并實現(xiàn)了具有中文分詞功能和新詞識別功能的分詞器.實驗測試結果表明,算法的分詞效果能夠達到預期的中文分詞的要求.當然,現(xiàn)有分詞算法的效率還有待提高,在今后的工作中將做進一步的研究.
[1] 中國互聯(lián)網(wǎng)絡信息中心.第二十四次中國互聯(lián)網(wǎng)發(fā)展狀況統(tǒng)計報告 [EB].http://www.cnnic.net.cn,2009.7
[2] 中國互聯(lián)網(wǎng)絡信息中心.第二十五次中國互聯(lián)網(wǎng)發(fā)展狀況統(tǒng)計報告 [EB].http://www.cnnic.net.cn,2010.1
[3] 鄧宏濤.中文自動分詞系統(tǒng)的設計模型 [J].計算機與數(shù)字工程,2005,33(04):1-4
[4] 肖紅,許少華,李欣.具有三級索引詞庫結構的中文分詞方法研究 [J].計算機應用研究,2006,25(08):49-51
[5] 徐華中,徐剛.一種新的漢語自動分詞算法的研究和應用 [J].計算機與數(shù)字工程,2006,34(02):135-138
[6] 張民,李生,王海峰.基于知識評價的快速漢語自動分詞 [J].系統(tǒng)情報學報,1996,15(02):4-13