zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Docker入门系列4:命令行小结
    Docker入门系列3:使用
    Docker入门系列2 安装
    Docker入门系列1:简介
    在VMware下安装CentOS系列1:配置VMware
    bugzilla 系列1安装
    查看SELinux状态并关闭SELinux
    Qt 编程指南 5 丰富文本编辑控件
    Qt 编程指南 4 单行编辑控件
    Qt 编程指南 4 按钮2 打开网页和文件夹
  • 原文地址:https://www.cnblogs.com/yjc1605961523/p/12361327.html
Copyright © 2011-2022 走看看