Lucene(五)分析器

1.分析器的分詞效果

1.1 分析文本

"The Spring Framework provides a comprehensive programming and configuration model."

1.2 代碼

import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.junit.Test;

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

1.3 運行結果

2. 中文分析器

2.1 Lucene自帶中文分詞器

2.1.1 StandardAnalyzer:

單字分詞:就是按照中文一個字一個字地進行分詞。如:“我愛中國”,
效果:“我”、“愛”、“中”、“國”。

2.1.2 SmartChineseAnalyzer

對中文支持較好,但擴展性差,擴展詞庫,禁用詞庫和同義詞庫等不好處理

        <!-- Lucene提供的中文分詞器模塊,lucene-analyzers-smartcn:Lucene  的中文分詞器 SmartChineseAnalyzer -->
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-analyzers-smartcn</artifactId>
            <version>7.4.0</version>
        </dependency>

效果:

2.2 IKAnalyzer

github地址:https://github.com/wks/ik-analyzer

2.2.1 常規使用方法:

第一步:把jar包添加到工程中

第二步:把配置文件和擴展詞典和停用詞詞典添加到classpath下

2.2.2 maven使用

第一步:將jar包安裝到本地倉庫

mvn install:install-file -DgroupId=IK-Analyzer -DartifactId=IK-Analyzer -Dversion=1.0 -Dpackaging=jar -Dfile=D:\Java\lib\IK-Analyzer-1.0-SNAPSHOT.jar

第二步:pom.xml引入

        <dependency>
            <groupId>IK-Analyzer</groupId>
            <artifactId>IK-Analyzer</artifactId>
            <version>1.0</version>
        </dependency>

 

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

也就是說禁止使用windows記事本編輯擴展詞典文件

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

2.2.3 效果

 

2.3.4 添加分詞

2.3.5 禁用分詞

2.3 使用自定義分析器

         //1.創建Directory對象,指定索引庫的存放位置
        //存放到磁盤中
        Directory directory = FSDirectory.open(Paths.get("D:\\test\\lucene\\programme"));
        //存放到內存中
        //Directory directory = new RAMDirectory();
 
        //2.指定一個IKAnalyzer分析器,對文檔內容進行分析
        Analyzer analyzer = new IKAnalyzer();
 
        //3.基於分析器創建 IndexWriterConfig 對象
        IndexWriterConfig config = new IndexWriterConfig(analyzer);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章