国产一区二区精品久久_蜜桃狠狠狠狠狠狠狠狠狠_午夜视频精品_激情都市一区二区

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > 自己寫的一個基于詞庫的lucene分詞程序--ThesaurusAnalyzer

自己寫的一個基于詞庫的lucene分詞程序--ThesaurusAnalyzer
2010-01-13 23:04:14  作者:  來源:
前一段時間用lucene做一個搜索程序,找了好長時間的中文分詞程序,都沒找到合適的,最后自己弄了一個.現在共享出來.希望對大家有用.
      分詞算法:    基于詞庫的正向最大匹配算法.
      分詞詞庫用的是網上一個叫 segmenter 的分詞程序使用的詞庫.
      地址:www.mandarintools.com/segmenter.html  
      這個segmenter分詞程序是把文件按行讀取出來,然后把一行假設為一個詞,從庫中匹配,如果匹配不成功,則去掉一個字,再繼續匹配.這樣的分詞程序,其一,不便在lucene中使用,因為lucene的analyzer是通過Tokenizer分詞的,而Tokenizer中一般是對字符流進行處理,每次next返回一個Token,并不是一次性把內容讀取進來,處理后再返回結果.其二,按行讀取會有個缺點,就是如果文本中恰好把一個詞用換行符隔開了,這樣這個詞也就被切開了,沒有被當作一個詞處理.
   
     我的程序實現方式:把詞庫讀進內存后構建一個詞語樹.樹的每個節點包含一個字. 比方  中國   中國人  中華民族  中華人民共和國  幾個詞,構成的樹的結構:
  
                 中
           國^    華
      人^        人    民
                   民       族^
                   共
                   和
                   國^

       懶得上傳圖片,所以將就著這樣表示了.^表示該節點可以構成一個詞.分詞的過程類似于輸入法的聯想功能.讀取一個字,然后聯想,直到聯想到不能為止.如果當前可以構成詞,便返回一個Token.如果當前不能構成詞語,便回溯到最近的可以構成詞語的節點,返回.最差的情況就是返回第一個單字.然后從返回結果的下一個字重新開始聯想.

      lucene自帶的幾個分詞程序中,ChineseAnalyzer是按字分的,與StandardAnalyzer對中文的分詞沒有大的區別.CJKAnalyzer是按兩字切分的,比較武斷,并且會產生垃圾Token,影響索引大小.
 
     本分詞程序的效果取決與詞庫.您可以用自己的詞庫替換程序自帶的詞庫.詞庫是一個文本文件,名稱為word.txt. 每一行一個詞語,以#開頭表示跳過改行.最后保存為UTF-8的文本.

    程序的缺陷:
        沒有加入識別人名和地名的功能

     該分詞的一個應用案例:http://www.cyonline.net
   
     這個網站是我給學校做的,用lucene對pdf ,word,excel,html等多種格式的文檔進行解析,索引,提供全文搜索,并實現摘要高亮.這個網站在教育網上,公網用戶可能訪問起來比較慢.

安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢