1.5.3 什么是Tokenizer-分詞


什么是Tokenizer-分詞

   分詞器的工作就是分解文本流成詞(tokens).在這個文本中,每一個token都是這些字符的一個子序列.一個分析器(analyzer)必須知道它所配置的字段,但是tokenizer不需要,分詞器(tokenizer)從一個字符流(reader)讀取數據,生成一個Token對象(TokenStream)的序列.

  輸入流中的一些字符可能會被丟棄,如空格和一些分隔符;也可能會被添加或者替換,如別名映射和縮寫.一個token包含多種元數據除了它的原始文本值,如字段中詞(token)出現的位置.因為分詞器從輸入文本中發散之后生成詞(tokens),你是不能假定token的文本和字段中出現的文本相同的.在原始的文本中很有可能超過一個的token擁有相同的位置或者關聯相同的偏移量(offset).如果你使用token元數據做高亮時,請注意這一點兒.

<fieldType name="text" class="solr.TextField">
    <analyzer>
        <tokenizer class="solr.StandardTokenizerFactory" />
    </analyzer>
</fieldType>

  這里邊tokenizer元素的class的值並不是實際的值,而是一個實現了org.apache.solr.analysis.TokenizerFactory接口的類.這個工廠類被調用用來創建所需要的新的tokenizer實例.源自org.apache.lucene.analysis.TokenStream,工廠創建的對象顯示了它們產生的tokens序列.如果tokenizer生成的token正是它所需要的,那么它也許就是analyzer的唯一組件.否則,分詞器的輸出的tokens將作為管道中第一個過濾器的輸入.

  TypeTokenFilterFactory可用於創建一個TypeTokenFilter,這個對象過濾tokens基於它們的TypeAttribute的.可以在factory.getStopTypes中設置.

CharFilter vs  TokenFilter

  這里有好幾對的CharFilters和tokenFilters是有關聯(MappingCharFilter和ASCIIFoldingFilter)或者是幾乎相同(PatternReplaceCharFilterFactory和PatternReplaceFilterFactory)的功能.通常不好區分哪一個才是最好的選擇.

  使用哪個過濾器很大程度上依賴於你使用的是哪個分詞器(tokenizer),你是否需要預處理字符流.

  舉例來說,假設你有一個StandardTokenizer的分詞器,並且你很想知道它整體上是如何工作的,你想要自定義了一些指定的字符的行為表現.你需要修改你的規則,重新編譯你得分詞器(tokenizer).但是在分詞前使用一個charFilter簡單映射一些字符會使它變的更加簡單.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM