Lucene提供的几种分词器

1、几种lucene提供的分词器

在这里插入图片描述在这里插入图片描述
下面是几种分词器的代码实现示例。

import org.apache.lucene.analysis.*;
import org.apache.lucene.analysis.cjk.CJKAnalyzer;
import org.apache.lucene.analysis.core.KeywordAnalyzer;
import org.apache.lucene.analysis.core.SimpleAnalyzer;
import org.apache.lucene.analysis.core.StopAnalyzer;
import org.apache.lucene.analysis.core.WhitespaceAnalyzer;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.FSDirectory;


import java.io.IOException;
import java.io.StringReader;
import java.nio.file.Paths;

/**
 * Created by grant on 2019/9/18.
 */
public class VariousAnalyzer{
    private static String str = "中华人民共和国简称中国, 是一个有13亿人口的国家";
    public static void main(String[] args) throws IOException {
        //标准分词器
        Analyzer analyzer = null;

        analyzer = new StandardAnalyzer();
        System.out.println("标准分词:" + analyzer.getClass());
        printAnalyzer(analyzer);

        //空格分词
        analyzer = new WhitespaceAnalyzer();
        System.out.println("空格分词:" + analyzer.getClass());
        printAnalyzer(analyzer);

        //简单分词
        analyzer = new SimpleAnalyzer();
        System.out.println("简单分词:" + analyzer.getClass());
        printAnalyzer(analyzer);

        //二分法分词
        analyzer = new CJKAnalyzer();
        System.out.println("二分法分词:" + analyzer.getClass());
        printAnalyzer(analyzer);

        //关键词分词
        analyzer = new KeywordAnalyzer();
        System.out.println("关键词分词:"+ analyzer.getClass());
        printAnalyzer(analyzer);

        //停用词分词
        analyzer = new StopAnalyzer();
        System.out.println("停用词分词:"+ analyzer.getClass());
        printAnalyzer(analyzer);
    }

    public static void printAnalyzer(Analyzer analyzer) throws IOException {
        StringReader reader = new StringReader(str);

        TokenStream toStream = analyzer.tokenStream(str,reader);
        toStream.reset();//清空流
        CharTermAttribute teAttribute = toStream.getAttribute(CharTermAttribute.class);
        while (toStream.incrementToken()){
            System.out.print(teAttribute.toString() +"|");
        }
        System.out.println("\n");
        analyzer.close();
    }
}

分词结果

标准分词:class org.apache.lucene.analysis.standard.StandardAnalyzer
中|华|人|民|共|和|国|简|称|中|国|是|一|个|有|13|亿|人|口|的|国|家|

空格分词:class org.apache.lucene.analysis.core.WhitespaceAnalyzer
中华人民共和国简称中国,|是一个有13亿人口的国家|

简单分词:class org.apache.lucene.analysis.core.SimpleAnalyzer
中华人民共和国简称中国|是一个有|亿人口的国家|

二分法分词:class org.apache.lucene.analysis.cjk.CJKAnalyzer
中华|华人|人民|民共|共和|和国|国简|简称|称中|中国|是一|一个|个有|13|亿人|人口|口的|的国|国家|

关键词分词:class org.apache.lucene.analysis.core.KeywordAnalyzer
中华人民共和国简称中国, 是一个有13亿人口的国家|

停用词分词:class org.apache.lucene.analysis.core.StopAnalyzer
中华人民共和国简称中国|是一个有|亿人口的国家|

2、两种典型应用广泛的中文分词器

public class IKvsSmartAnalyzer {
   private static String str1 = "公路局正在治理解放大道路面积水问题";
   private static String str2 = "IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包";

    public static void main(String[] args) throws IOException {
        Analyzer analyzer = null;
        System.out.println("句子一:"+str1);
        System.out.println("SmartChineseAnalyzer分词结果:");
        analyzer = new SmartChineseAnalyzer();
        printAnalyzer(analyzer,str1);
        System.out.println("IKAnalyzer分词结果:");
        analyzer = new IKAnalyzer(true);
        printAnalyzer(analyzer,str1);
        System.out.println("------------------");
        System.out.println("句子二 "+ str1);
        System.out.println("SmartChineseAnalyzer分词结果:");
        analyzer = new SmartChineseAnalyzer();
        printAnalyzer(analyzer,str2);
        System.out.println("IKAnalyzer分词结果:");
        analyzer = new IKAnalyzer(true);
        printAnalyzer(analyzer,str2);
        analyzer.close();
    }
    public static void printAnalyzer(Analyzer analyzer,String str) throws IOException {
        StringReader reader = new StringReader(str);

        TokenStream toStream = analyzer.tokenStream(str,reader);
        toStream.reset();//清空流
        CharTermAttribute teAttribute = toStream.getAttribute(CharTermAttribute.class);
        while (toStream.incrementToken()){
            System.out.print(teAttribute.toString() +"|");
        }
        System.out.println("\n");
        analyzer.close();

    }
}

句子一:公路局正在治理解放大道路面积水问题
SmartChineseAnalyzer分词结果:
公路局|正|在|治理|解放|大|道路|面积|水|问题|

IKAnalyzer分词结果:
公路局|正在|治理|大道|路面|积水|问题|

------------------
句子二 IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包
SmartChineseAnalyzer分词结果:
ikanalyz|是|一个|开|源|的|基于|java|语言|开发|的|轻量级|的|中文|分词|工具包|

IKAnalyzer分词结果:
ikanalyzer|是|一个|开源|的|基于|java|语言|开发|的|轻量级|中文|分词|工具包|
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值