• IKAnalyzer的下载和使用


    IKAnalyzer下载地址

    链接:https://pan.baidu.com/s/1bNqXh8B7suT1rAUm_ZZ7gw 
    提取码:c08j

    文件夹结构如下

    在Lucene中默认的分析器StandardAnalyzer对于汉字进行分析的时候是拆成一个字,一个字的,每个字算上一个词

            //用于配置分词器
            IndexWriterConfig config = new IndexWriterConfig();

    在IndexWriterConfig的构造方法中使用的是StandardAnalyzer

        public IndexWriterConfig() {
            this(new StandardAnalyzer());
        }

    我们要使用中文的分词器的话就要把他替换掉,

    先来测试一下使用默认的StandardAnalyzer分词效果

    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.apache.lucene.analysis.tokenattributes.OffsetAttribute;
    import org.wltea.analyzer.lucene.IKAnalyzer;
    
    import java.io.IOException;
    
    public class MyTokenStream {
        public static void main(String[] args) throws IOException {
            //创建一个标准分析器对象
            Analyzer analyzer=new StandardAnalyzer();
            //获取tokenStream对象
            //参数1域名 2要分析的文本内容
            TokenStream tokenStream=analyzer.tokenStream("","test a lucene 程序,杯莫停");
            //添加引用,用于获取每个关键词
            CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
            //添加一个偏移量的引用,记录了关键词的开始位置以及结束位置
            OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
            //将指针调整到列表的头部
            tokenStream.reset();
            //遍历关键词列表,incrementToken判断是否结束
            while (tokenStream.incrementToken()) {
                System.out.println("开始--->"+offsetAttribute.startOffset());
                System.out.println(charTermAttribute);
                System.out.println("结束--->"+offsetAttribute.endOffset());
            }
            tokenStream.close();
        }
    }

    测试结果如下

    "程序"一词被分成了两个单独的字

    接下来使用第三方的IKAnalyzer,导入maven依赖或者关联jar包

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

    然后将下面标红线的代码进行修改

      public static void main(String[] args) throws IOException {
            //创建一个标准分析器对象
            Analyzer analyzer=new IKAnalyzer();
            //获取tokenStream对象
            //参数1域名 2要分析的文本内容
            TokenStream tokenStream=analyzer.tokenStream("","test a lucene 程序,杯莫停");
            //添加引用,用于获取每个关键词
            CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
            //添加一个偏移量的引用,记录了关键词的开始位置以及结束位置
            OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
            //将指针调整到列表的头部
            tokenStream.reset();
            //遍历关键词列表,incrementToken判断是否结束
            while (tokenStream.incrementToken()) {
                System.out.println("开始--->"+offsetAttribute.startOffset());
                System.out.println(charTermAttribute);
                System.out.println("结束--->"+offsetAttribute.endOffset());
            }
            tokenStream.close();
        }

     可以看出来分析器把"程序"当成一个词语来看待了,但是"杯莫停",还是拆成了单个字,而且"杯"字还没有进行显示,因为"杯"字在停用词列表里

     接下来在扩展词典里添加一个词语"杯莫停"

     测试结果

     TIP:在自定义扩展词典和停用词词典的过程当中,千万不要使用windows记事本编辑,因为windows记事本是UTF-8+BOM编码,文件保存的格式应当是UTF-8

  • 相关阅读:
    Linux设备驱动第六篇:高级字符驱动操作之iotcl
    Stack的三种含义
    用vs2013+velt-0.1.4进行嵌入式开发 进行海思平台 UBOOT 开发
    学会思考技术背后的那些思想和本质
    Rails 4.0.0 开发环境一切正常,到生成环境发现 无法找到 css 和 js
    一加手机,迟到的惊喜
    附近的人计算方法-----使用mysql脚本计算方法
    如何将Superset嵌入后台系统之实践
    这里是纯干货!2018年深度学习的10个发展预测
    这里是纯干货!2018年深度学习的10个发展预测
  • 原文地址:https://www.cnblogs.com/yjc1605961523/p/12361327.html
Copyright © 2020-2023  润新知