Lucene使用IKAnalyzer分詞


1.分析器    所有分析器最終繼承的類都是Analyzer
        1.1 默認標准分析器:StandardAnalyzer
            在我們創建索引的時候,我們使用到了IndexWriterConfig對象,在我們創建索引的過程當中,會經歷分析文檔的步驟,就是分詞的步驟,默認采用的標准分析器自動分詞
            
            
            1.1.1 查看分析器的分析效果
            

 public static void main(String[] args) throws IOException {
        //1.創建一個Analyzer對象
        StandardAnalyzer analyzer = new StandardAnalyzer();
        //2.調用Analyzer對象的tokenStream方法獲取TokenStream對象,此對象包含了所有的分詞結果
        TokenStream tokenStream = analyzer.tokenStream("", "安裝mysql-5.7.22-winx64后數據庫服務啟動報錯:本地計算機上的mysql服務啟動停止后,某些服務未由其他服務或程序使用時將自動停止而且mysql官網下載的壓縮包解壓出來沒有網線上安裝教... 博文 來自: 測試菜鳥在路上,呵呵");
        //3.給tokenStream對象設置一個指針,指針在哪當前就在哪一個分詞上
        CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
        //4.調用tokenStream對象的reset方法,重置指針,不調用會報錯
        tokenStream.reset();
        //5.利用while循環,拿到分詞列表的結果  incrementToken方法返回值如果為false代表讀取完畢  true代表沒有讀取完畢
        while (tokenStream.incrementToken()){
            System.out.println(charTermAttribute.toString());
        }
        //6.關閉
        tokenStream.close();

    }

 


                分析會去掉停用詞,忽略大小寫,祛除標點
                
                默認標准分析器分析英文沒有問題,但是他分析中文時會拆分成單個漢字,這顯然不符合實際需求

 

 

 

 

1.2 中文分析器
            第三方中文分析器:IKAnalyzer
            IKAnalyzer的使用步驟:
                1.導入依賴
                  

 <!-- https://mvnrepository.com/artifact/com.jianggujin/IKAnalyzer-lucene -->
                    <dependency>
                        <groupId>com.jianggujin</groupId>
                        <artifactId>IKAnalyzer-lucene</artifactId>
                        <version>8.0.0</version>
                    </dependency>

 


                2.配置IKAnalyzer,導入配置文件
                    hotword.dic 擴展詞典,可以將時尚的網絡名詞放入到該詞典當中,這樣就能根據擴展詞典進行分詞
                    stopword.dic 停用詞詞典,可以將無意義的詞和敏感詞匯放入到該詞典當中,這樣在分析的時候就會忽略這些內容

      

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
<properties>  
    <comment>IK Analyzer 擴展配置</comment>
    <!--用戶可以在這里配置自己的擴展字典 -->
    <entry key="ext_dict">hotword.dic;</entry>
    
    <!--用戶可以在這里配置自己的擴展停止詞字典    詞典可以有多個,每一個用;分割-->
    <entry key="ext_stopwords">stopword.dic;</entry>
    
</properties>

 


                    
                    在自定義擴展詞典和停用詞詞典的過程當中,千萬不要使用windows記事本編輯,因為windows記事本是UTF-8+BOM編碼
    
                3.使用IKAnalyzer進行分詞
                  

public static void main(String[] args) throws IOException {
        //1.創建一個Analyzer對象
        Analyzer analyzer=new IKAnalyzer(); //2.調用Analyzer對象的tokenStream方法獲取TokenStream對象,此對象包含了所有的分詞結果
        TokenStream tokenStream = analyzer.tokenStream("", "安裝mysql-5.7.22-winx64后數據庫服務啟動報錯:本地計算機上的mysql服務啟動停止后,某些服務未由其他服務或程序使用時將自動停止而且mysql官網下載的壓縮包解壓出來沒有網線上安裝教... 博文 來自: 測試菜鳥在路上,呵呵");
        //3.給tokenStream對象設置一個指針,指針在哪當前就在哪一個分詞上
        CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
        //4.調用tokenStream對象的reset方法,重置指針,不調用會報錯
        tokenStream.reset();
        //5.利用while循環,拿到分詞列表的結果  incrementToken方法返回值如果為false代表讀取完畢  true代表沒有讀取完畢
        while (tokenStream.incrementToken()){
            System.out.println(charTermAttribute.toString());
        }
        //6.關閉
        tokenStream.close();

    }

 

得到的就是常用的單詞了

 

 


                4.程序當中使用IKAnalyzer
                    IndexWriter indexWriter=new IndexWriter(directory,new IndexWriterConfig(new IKAnalyzer()));
        

 


免責聲明!

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



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