lucene分詞器中的Analyzer,TokenStream, Tokenizer, TokenFilter

來源:互聯網
上載者:User

標籤:txt   增量   nts   cep   lucene分詞   standard   tac   不同的   lock   

分詞器的核心類:
Analyzer:分詞器
TokenStream:分詞器做優點理之後得到的一個流。這個流中儲存了分詞的各種資訊,能夠通過TokenStream有效擷取到分詞單元。


下面是把檔案流轉換成分詞流(TokenStream)的過程

首先,通過Tokenizer來進行分詞,不同分詞器有著不同的Tokenzier,Tokenzier分完詞後,通過TokenFilter對已經分好詞的資料進行過濾,比方停止詞。過濾完之後,把全部的資料群組合成一個TokenStream;下面這圖就是把一個reader轉換成TokenStream:

這個TokenStream中存有一些屬性,這些屬性會來標識這個分詞流的元素。


在這個流裡 有非常多屬性。

以下截了lucene4.10.1原始碼中的圖:


     當中有3個重要的屬性,CharTermAttribute(儲存相印的詞彙),OffsetAttribute(儲存各個詞彙的位移量)。PositionIncrementAttribute(儲存各個詞與詞之間的位置增量,假設為0。能夠做同義字搜尋)。

是由這3個屬性來控制這些分詞資訊
    Tokenzier主要負責接收Reader。將Reader進行分詞操作。有例如以下一些實作類別


TokenFilter  將分詞的出來的單元,進行各種各樣的過濾。 


代碼例如以下:

<span style="font-size:14px;">package hhc;import java.io.IOException;import java.io.StringReader;import org.apache.lucene.analysis.Analyzer;import org.apache.lucene.analysis.TokenStream;import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;import org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;import org.apache.lucene.analysis.tokenattributes.TypeAttribute;public class AnalyzerUtil {/** * 輸出字元分詞資訊 *  * @param str * @param a */public static void displayAllToken(String str, Analyzer a) {try {// 全部的分詞器都必須含有分詞流TokenStream stream = a.tokenStream("content", new StringReader(str));// 放回一個TokenStream;/** * 建立一個屬性,這個屬性會加入到流裡。隨著這個TokenStream流添加 * 這個屬性中儲存中全部的分詞資訊 */CharTermAttribute cta=stream.addAttribute(CharTermAttribute.class);//位置增量的屬性,儲存詞之間的距離PositionIncrementAttribute pia = stream.addAttribute(PositionIncrementAttribute.class);//儲存每一個詞直接的位移量OffsetAttribute oa = stream.addAttribute(OffsetAttribute.class);//使用的每一個分詞器直接的類型資訊TypeAttribute ta = stream.addAttribute(TypeAttribute.class);for (; stream.incrementToken();) {System.out.print(pia.getPositionIncrement()+":");System.out.print(cta+":["+oa.startOffset()+"-"+oa.endOffset()+"]-->"+ta.type()+"\n");}System.out.println();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}</span>

測試:

<span style="font-size:14px;">@Testpublic void hhcTest(){Analyzer a1 =new StandardAnalyzer(Version.LUCENE_35);Analyzer a2 =new StopAnalyzer(Version.LUCENE_35);Analyzer a3 =new SimpleAnalyzer(Version.LUCENE_35);Analyzer a4 =new WhitespaceAnalyzer(Version.LUCENE_35);String txt ="how are you think you";AnalyzerUtil.displayAllToken(txt, a1);AnalyzerUtil.displayAllToken(txt, a2);AnalyzerUtil.displayAllToken(txt, a3);AnalyzerUtil.displayAllToken(txt, a4);}</span>


lucene分詞器中的Analyzer,TokenStream, Tokenizer, TokenFilter

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.