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);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值