日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lucene支持中文分词代码实现

發布時間:2025/1/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lucene支持中文分词代码实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 支持中文分詞
  • 分析器(Analyzer)的執行過程

如下圖是語匯單元的生成過程:

從一個Reader字符流開始,創建一個基于Reader的Tokenizer分詞器,經過三個TokenFilter生成語匯單元Token。
要看分析器的分析效果,只需要看Tokenstream中的內容就可以了。每個分析器都有一個方法tokenStream,返回一個tokenStream對象。

  • 分析器的分詞效果
//查看標準分析器的分詞效果 public void testTokenStream() throws Exception {//創建一個標準分析器對象Analyzer analyzer = new StandardAnalyzer();//獲得tokenStream對象//第一個參數:域名,可以隨便給一個//第二個參數:要分析的文本內容TokenStream tokenStream = analyzer.tokenStream("test", "The Spring Framework provides a comprehensive programming and configuration model.");//添加一個引用,可以獲得每個關鍵詞CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);//添加一個偏移量的引用,記錄了關鍵詞的開始位置以及結束位置OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);//將指針調整到列表的頭部tokenStream.reset();//遍歷關鍵詞列表,通過incrementToken方法判斷列表是否結束while(tokenStream.incrementToken()) {//關鍵詞的起始位置System.out.println("start->" + offsetAttribute.startOffset());//取關鍵詞System.out.println(charTermAttribute);//結束位置System.out.println("end->" + offsetAttribute.endOffset());}tokenStream.close(); }
  • 中文分析器
  • Lucene自帶中文分詞器

StandardAnalyzer
單字分詞:就是按照中文一個字一個字地進行分詞。如:“我愛中國”,
效果:“我”、“愛”、“中”、“國”。
CJKAnalyzer
二分法分詞:按兩個字進行切分。如:“我是中國人”,效果:“我是”、“是中”、“中國”“國人”。
上邊兩個分詞器無法滿足需求。
SmartChineseAnalyzer
對中文支持較好,但擴展性差,擴展詞庫,禁用詞庫和同義詞庫等不好處理

  • 第三方中文分析器

paoding: 庖丁解牛最新版在 https://code.google.com/p/paoding/ 中最多支持Lucene 3.0,且最新提交的代碼在 2008-06-03,在svn中最新也是2010年提交,已經過時,不予考慮。
mmseg4j:最新版已從 https://code.google.com/p/mmseg4j/ 移至 https://github.com/chenlb/mmseg4j-solr,支持Lucene 4.10,且在github中最新提交代碼是2014年6月,從09年~14年一共有:18個版本,也就是一年幾乎有3個大小版本,有較大的活躍度,用了mmseg算法。
IK-analyzer: 最新版在https://code.google.com/p/ik-analyzer/上,支持Lucene 4.10從2006年12月推出1.0版開始, IKAnalyzer已經推出了4個大版本。最初,它是以開源項目Luence為應用主體的,結合詞典分詞和文法分析算法的中文分詞組件。從3.0版本開 始,IK發展為面向Java的公用分詞組件,獨立于Lucene項目,同時提供了對Lucene的默認優化實現。在2012版本中,IK實現了簡單的分詞 歧義排除算法,標志著IK分詞器從單純的詞典分詞向模擬語義分詞衍化。 但是也就是2012年12月后沒有在更新。
ansj_seg:最新版本在 https://github.com/NLPchina/ansj_seg tags僅有1.1版本,從2012年到2014年更新了大小6次,但是作者本人在2014年10月10日說明:“可能我以后沒有精力來維護ansj_seg了”,現在由”nlp_china”管理。2014年11月有更新。并未說明是否支持Lucene,是一個由CRF(條件隨機場)算法所做的分詞算法。
imdict-chinese-analyzer:最新版在 https://code.google.com/p/imdict-chinese-analyzer/ , 最新更新也在2009年5月,下載源碼,不支持Lucene 4.10 。是利用HMM(隱馬爾科夫鏈)算法。
Jcseg:最新版本在git.oschina.net/lionsoul/jcseg,支持Lucene 4.10,作者有較高的活躍度。利用mmseg算法。

  • IKAnalyzer

使用方法:
第一步:把jar包添加到工程中
第二步:把配置文件和擴展詞典和停用詞詞典添加到classpath下

注意:mydict.dic和ext_stopword.dic文件的格式為UTF-8,注意是無BOM 的UTF-8 編碼。

使用EditPlus.exe保存為無BOM 的UTF-8 編碼格式,如下圖:

  • Analyzer使用時機

  • 索引時使用Analyzer

輸入關鍵字進行搜索,當需要讓該關鍵字與文檔域內容所包含的詞進行匹配時需要對文檔域內容進行分析,需要經過Analyzer分析器處理生成語匯單元(Token)。分析器分析的對象是文檔中的Field域。當Field的屬性tokenized(是否分詞)為true時會對Field值進行分析,如下圖:

對于一些Field可以不用分析:
1、不作為查詢條件的內容,比如文件路徑
2、不是匹配內容中的詞而匹配Field的整體內容,比如訂單號、身份證號等。

  • 搜索時使用Analyzer

對搜索關鍵字進行分析和索引分析一樣,使用Analyzer對搜索關鍵字進行分析、分詞處理,使用分析后每個詞語進行搜索。比如:搜索關鍵字:spring web ,經過分析器進行分詞,得出:spring web拿詞去索引詞典表查找 ,找到索引鏈接到Document,解析Document內容。
對于匹配整體Field域的查詢可以在搜索時不分析,比如根據訂單號、身份證號查詢等。

注意:搜索使用的分析器要和索引使用的分析器一致。

總結

以上是生活随笔為你收集整理的Lucene支持中文分词代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。