《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于Lucene的中文分詞器的改進與實現(xiàn)
基于Lucene的中文分詞器的改進與實現(xiàn)
2015年微型機與應用第11期
羅惠峰,,郭淑琴
(浙江工業(yè)大學 信息工程學院,浙江 杭州 310023)
摘要: Lucene是一個高效的全文檢索工具包,,本文主要研究了Lucene的體系架構及其在中文檢索上的應用,。通過對基于最大匹配算法的中文分詞器的設計與改進,,并引入文本解析器與構建同義詞詞庫引擎,使得Lucene對中文的檢索更加個性化,。通過檢索結果的對比表明,,改進后的中文分詞器對檢索功能的擴展有了極大的提高。并最終構建出了一個高效的中文全文檢索系統(tǒng),。
Abstract:
Key words :

  羅惠峰,,郭淑琴

 ?。ㄕ憬I(yè)大學 信息工程學院,浙江 杭州 310023)

  摘  要: Lucene是一個高效的全文檢索工具包,,本文主要研究了Lucene的體系架構及其在中文檢索上的應用,。通過對基于最大匹配算法中文分詞器的設計與改進,并引入文本解析器與構建同義詞詞庫引擎,,使得Lucene對中文的檢索更加個性化,。通過檢索結果的對比表明,改進后的中文分詞器對檢索功能的擴展有了極大的提高,。并最終構建出了一個高效的中文全文檢索系統(tǒng),。

  關鍵詞: 全文檢索;中文分詞器,;文本解析器,;最大匹配算法(MMSEG)

0 引言

  隨著網(wǎng)絡的發(fā)展和數(shù)據(jù)存儲技術的成熟,如何在大量的數(shù)據(jù)中快速,、準確地獲取到我們所需要的信息成為一個亟待解決的問題,,也是信息檢索技術的核心問題。

  信息檢索的核心是全文檢索技術,,全文檢索是指以各種計算機數(shù)據(jù)諸如文字,、聲音、圖像等為處理對象,,提供按照數(shù)據(jù)資料的內容而不是外在特征來實現(xiàn)的信息檢索手段,。當前對全文數(shù)據(jù)的檢索主要有兩種方法:順序掃描法(Serial Scanning)和倒排索引法(Inverted Index)。前者較為原始,,對于小數(shù)量的數(shù)據(jù)是最直接和最方便的方法,;但隨著數(shù)據(jù)量的增多,倒排索引法具有更快的檢索速度和更全的應用范圍[1],。Lucene并不是一個完整的搜索引擎應用,,而是一個開放源代碼的高性能、可伸縮的信息搜索庫,,可以方便地嵌入到各種應用中,,實現(xiàn)針對應用的全文索引/檢索功能,并且已經在許多搜索項目中得到了廣泛的應用[2],。

  中文分詞技術作為信息檢索的核心技術之一,,它的研究與發(fā)展促進了全文檢索技術的應用。本文主要研究了中文分詞的最大匹配算法,,并通過該算法對原始中文分詞器進行了改進,,改進后的分詞器更加適用于中文條件下的搜索。

1 Lucene架構及簡介

001.jpg

  圖1描述了基于Lucene的全文檢索過程,Lucene對索引的創(chuàng)建和搜索是通過不同的流程來實現(xiàn),。創(chuàng)建索引時,,需要通過文件、數(shù)據(jù)庫,、Web或人工輸入方式來對數(shù)據(jù)進行采集,;其次則需要建立索引的Document,一條Document就類似于數(shù)據(jù)庫的一條記錄[3],;最后通過這些Document來生成索引,。搜索索引時,首先通過用戶查詢得到用戶的查詢條件,,然后Lucene通過查詢條件對索引進行搜索,,并將最終經過一定規(guī)則排序后的結果返回給用戶。目前常見的搜索引擎排序算法有Direct Hit排序算法,、PageRank算法,、排名競價服務和詞頻位置加權算法[4]。

002.jpg

  圖2為Lucene的邏輯架構圖,。由圖2可以看出Lucene索引和檢索時各個模塊間的調用關系:當索引文件時,,接口模塊會先調用語法分析器對文本進行分析,并通過基礎結構公共模塊將分析后的數(shù)據(jù)寫入索引文件中,。用戶查詢時,同樣是通過接口模塊將查詢語句傳遞到索引核心模塊,,該模塊負責在底層的存儲類中讀取索引文件里面的數(shù)據(jù),,并返回給接口模塊[5]。該邏輯圖中的部分模塊是作為公共類存在的,。

2 自定義中文分詞器的設計

  Lucene架構中的分詞器(Analyzer)用于對文本數(shù)據(jù)進行分詞,,文本數(shù)據(jù)的索引創(chuàng)建過程一般包含以下幾步:(1)將原文檔傳遞給分詞組件(Tokenizer);(2)將得到的詞元(Token)傳遞給語言過濾組件(TokenFilter),;(3)最后將得到的語匯單元(Term)傳遞給索引組件從而建立該詞的索引[6],。如圖3所示。

003.jpg

  2.1 文本解析器的應用

  在構建搜索程序時,,一個重要的步驟就是從文檔中提取文本以用于索引,。這就要求搜索程序能夠處理多種多樣的文檔。對于XML或者HTML等文本格式,,必須小心處理以避免對其標簽進行錯誤的改寫,。

  由于Lucene只能處理文本內容,而不能直接處理文件,,因此對于存儲文本的各種文件,,Lucene過去采用不同的文檔過濾器,并通過這些過濾器從文件中提取文本,同時還需要自己檢測文檔類型和編碼類型[4],。通過引入文本解析器TIKA作為中間模塊,,實現(xiàn)對文件的文本內容進行提取。除此之外,,TIKA還能從大多數(shù)類型的文檔中提取出元數(shù)據(jù)[7],。TIKA相當于提供了應對各種文件的中間器,如圖4所示,。

004.jpg

  2.2 分詞器的設計思路

  經過文本提取后的內容,,就可以進行分詞操作了。然而Lucene自帶的分詞器在中文環(huán)境下的應用具有很大的局限性,。對于英文該分詞器采用空格分詞,,對于中文實際上只是將文本切割為單個字符,并不符合中文的語法及語義,。最大匹配算法(MMSEG)是一種常見的,、基于詞典的分詞算法[8]。該算法以正向最大匹配為主,,多種消除歧義的規(guī)則為輔,。它的匹配規(guī)則包括正向匹配和復雜匹配;歧義消除規(guī)則依次采用最大匹配,、最大平均單詞長度,、單詞長度最小方差和單字單詞語素最大自由度對語句進行分詞,直到只有一種結果或者最后一個規(guī)則使用完畢,。

  該算法強調長度和均衡,,體現(xiàn)在以下幾個方面:每個詞的組合要盡可能長,每個詞也要盡可能長,,每個詞的長度要盡可能接近,,每個詞的詞頻也要較為接近。例如,,假設C1,,C2,C3,,…,,Cn為一組字符構成的短語字符串,首先搜索詞典以確定_C1_是否為單個字,,若為單個字則繼續(xù)搜索_C1C2_,,直到在詞典中找到最長的單詞即為最合理的匹配。取出這個詞,,并對下一個字符采取同樣的操作,,直到該字符串最后一個字,。在消除歧義方面,定義平均詞長:

  1.png

  式中N為詞組總字數(shù),,M為詞語數(shù)量,。對于字數(shù)一定的詞組,詞語數(shù)量越少則平均詞長越大,,該系列分詞后的詞語更符合中文語義,。當平均詞長相同時,繼續(xù)采用詞語長度的變化率(即標準差公式)來判斷分詞的好壞,,定義每個詞的長度分別為n1,,n2,n3,,…,,nn,則該短語詞語長度變化率為:

  2.png

  變化率越小,,則說明該方法下的分詞效果越好,。最后,對于單字詞和連接詞的判斷,,采用的方法是計算詞組中的所有單字詞詞頻的自然對數(shù),,然后將得到的值相加,取總和最大的詞組,。例如A_BBB_C(單字詞詞頻,,A:3,C:7),,DD_E_F(單字詞詞頻,,E:5,F(xiàn):5)表示兩個詞組,,A、C,、E,、F表示不同的單字詞,如果不取自然對數(shù),,單純就詞頻來計算,,這兩個詞組是一樣的,但實際上不同的詞頻范圍所表示的效果也不同,,所以這里取自然對數(shù):

  ln Fa+ln Fc<ln Fe+ln Ff

  即:ln 3+ln 7<ln 5+ln 5(3)

  比如:設施_和_服務,,設施_和服_務,在文本中,,“和”字作為單字的詞頻越高,,則第一種分詞方法的可能性就越大。

  基于以上所述的分詞算法,對示例語句“我是一名大學生”進行分析,,并標明分詞后的語匯單元的屬性,,如圖5所示。

005.jpg

  由圖5各項屬性可知,,當文本被語匯單元化了之后,,相對于前一個語匯單元的位置信息將以位置增量值保存,默認值為1,。如果位置增量大于1,,則表明兩個語匯單元之間有被TokenFilter過濾掉的停用詞?;谝陨戏衷~算法,,可以構建同義詞引擎,該同義詞能滿足與原詞匯具有相同的詞匯偏移量,,并且通過堆棧的方式設置0位置增量來表示插入的同義詞,,那么就可以實現(xiàn)基于Lucene的中文同義詞分詞器的改進。這種改進使得在搜索時,,輸入任何一個同義詞,,都能得到相匹配的結果。

3 Lucene應用測試實例及分析

  根據(jù)前文所述的自定義中文分詞器的設計方案,,將該分詞器集成到Lucene分詞模塊中去,,并通過對比最大匹配算法分詞器(MMSegAnalyzer)以及封裝好的自定義中文分詞器(MyAnalyzer)來進行測試。自定義中文分詞器部分代碼如下,,構造該類時將同義詞引擎?zhèn)魅?,并加載絕對路徑下的詞典。

  public class MyAnalyzer extends Analyzer {

  private SamewordContext samewordContext,;

  //構造時把同義詞引擎SamewordContext傳入

  public MyAnalyzer(SamewordContext swc){

  samewordContext=swc,;

  }

  @Override

  public TokenStream tokenStream(String fieldName,Reader reader){

  Dictionary dic=

  Dictionary.getInstance("D:\\Java\\mmseg4j-1.8.5\\data"),;

  //分詞器采用最大匹配算法分詞器

  return new MySameTokenFilter(new MMSegTokenizer(new MaxWordSeg(dic),,reader),samewordContext

  }

  }

  首先測試文本解析器TIKA的解析性能,,通過對比TXT文本與被解析后的PDF文檔在Lucene中和Windows中對中文詞組“工具”的識別條數(shù),、索引和檢索時間,表明結合了文本解析器TIKA的Lucene具有較強的實用性,。本文所用測試文本為世界科技百卷書及中華學生百科全書共200冊,,數(shù)據(jù)量約30 MB,系統(tǒng)為Windows 7 SP2,。測試結果如表1所示,。

006.jpg

  由表1可得知,,使用Lucene對文件內容創(chuàng)建索引并進行搜索,其檢索效率與Windows自帶檢索功能相比,,具有更快的算法實現(xiàn),。在搜索速度上,兩種方式的速度差別并不大,,主要差別在于索引創(chuàng)建的過程,。該實驗結果很好地證明了最大匹配算法在中文分詞上的優(yōu)越性,以及TIKA對文本內容的解析性能,。

  接下來對搜索系統(tǒng)的完備性進行測試,。首先通過同義詞引擎將一組詞匯定義為相關同義詞,這使得在檢索某一詞匯時,,即使文檔本身中不包含該內容,,但只要包含了該詞匯的相關同義詞,即可獲得檢索結果,。該方法是基于前述的位置信息和偏移信息等語匯單元屬性,。定義同義詞:文明=文化=中華文明,并通過自定義分詞器建立索引并檢索這些詞匯,,檢索結果如表2所示,。

007.jpg

  由表2測試得知,當文本解析器與自定義分詞器被引入Lucene之后,,檢索響應度和檢索滿意度均有較高提升,,可以更方便快捷地實現(xiàn)用戶對數(shù)據(jù)的管理與檢索。

4 結束語

  通常使用功能完備性,、分詞準確性,、檢索速度、查全率來評價搜索系統(tǒng)的性能,。通過上述測試實例的對比發(fā)現(xiàn),,結合了改進后的自定義中文分詞器的搜索系統(tǒng),對以上性能指標均有較高提升,。當然,,該分詞器算法主要是根據(jù)最大匹配算法,通過詞典的加載來完成同義詞引擎的構造,。將來的研究方向:可以結合中文語義及概率統(tǒng)計智能化得出同義詞詞根,從而根據(jù)詞根使得搜索系統(tǒng)更加豐富化,、人性化,,并將其應用在網(wǎng)絡數(shù)據(jù)檢索、網(wǎng)站搜索功能等方面,。

參考文獻

  [1] 張博.基于Lucene倒排索引性能的研究與優(yōu)化[D].昆明:昆明理工大學,,2013.

  [2] 李永春,,丁華福.Lucene的全文檢索的研究與應用[J].計算機技術與發(fā)展,2009,,20(2):12-15.

  [3] 羅剛.解密搜索引擎技術實戰(zhàn)Lucene&Java精華版[M].北京:電子工業(yè)出版社,,2014.

  [4] 高樂,張健.基于網(wǎng)頁分塊的搜索引擎排序算法改進[J].浙江工業(yè)大學學報,,2005,,33(3):272-275.

  [5] 林碧英,趙銳,,陳良臣.基于Lucene的全文檢索引擎研究與應用[J].計算機技術與發(fā)展,,2007,17(5):186-190.

  [6] 劉冰凌.基于正向最大匹配算法的優(yōu)化算法ImpFMMseg的實現(xiàn)[D].武漢:中南民族大學,,2010.

  [7] CUTTING D. The Lucene search engine powerful flexible and free[M]. Newyork: John Wiley Sons,, 2000.

  [8] MCCANDLESS M. Lucene in Action[M].牛長流,肖宇,,譯.北京:人民郵電出版社,,2011.


此內容為AET網(wǎng)站原創(chuàng),未經授權禁止轉載,。