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

原文地址:https://www.cnblogs.com/chx9832/p/12363091.html

时间: 2024-10-13 15:16:34

Lucene使用IKAnalyzer分词的相关文章

Lucene使用IKAnalyzer分词实例 及 IKAnalyzer扩展词库

文章转载自:http://www.cnblogs.com/dennisit/archive/2013/04/07/3005847.html 方案一: 基于配置的词典扩充 项目结构图如下: IK分词器还支持通过配置IKAnalyzer.cfg.xml文件来扩充您的专有词典.谷歌拼音词库下载: http://ishare.iask.sina.com.cn/f/14446921.html?from=like在web项目的src目录下创建IKAnalyzer.cfg.xml文件,内容如下 <?xml v

Lucene使用IKAnalyzer中文分词笔记

本文主要讲解IKAnalyzer(以下简称'IK')在Lucene中的具体使用,关于Lucene和IK分词器的背景及其作用在这里就不再熬述.不得不感叹下Lucene版本变更的快速,如今最新已经到了4.9.0,相信任何技术的发展壮大都不可避免有这一过程.本文使用的是Lucene4.0,IKAnalyzer使用的是2012FF版. Lucene下载请移步官网,IK下载地址如下: http://code.google.com/p/ik-analyzer/downloads/list IK下载完成够拷贝

Apache Lucene 几种分词系统

1. StopAnalyzer StopAnalyzer能过滤词汇中的特定字符串和词汇,并且完成大写转小写的功能. 2. StandardAnalyzer StandardAnalyzer根据空格和符号来完成分词,还可以完成数字.字母.E-mail地址.IP地址以及中文字符的分析处理,还可以支持过滤词表,用来代替StopAnalyzer能够实现的过滤功能. 3. SimpleAnalyzer SimpleAnalyzer具备基本西文字符词汇分析的分词器,处理词汇单元时,以非字母字符作为分割符号.

IKAnalyzer 分词

IK Analyzer 3.0特性 采用了特有的"正向迭代最细粒度切分算法",具有80万字/秒的高速处理能力 采用了多子处理器分析模式,支持:英文字母(IP地址.Email.URL).数字(日期,常用中文数量词,罗马数字,科学计数法),中文词汇(姓名.地名处理)等分词处理. 优化的词典存储,更小的内存占用.支持用户词典扩展定义 针对Lucene全文检索优化的查询分析器IKQueryParser:采用歧义分析算法优化查询关键字的搜索排列组合,能极大的提高Lucene检索的命中率. IK

搜索引擎系列四:Lucene提供的分词器、IKAnalyze中文分词器集成

一.Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer 1.新建一个测试Lucene提供的分词器的maven项目LuceneAnalyzer 2. 在pom.xml里面引入如下依赖 <!-- lucene 核心模块 --> <dependency> <groupId>org.apache.lucene</groupId> <artifactId>lucene-core</artifactId&

Solr配置Ikanalyzer分词器

上一篇文章讲解在win系统中如何安装solr并创建一个名为test_core的Core,接下为text_core配置Ikanalyzer 分词器 1.打开text_core的instanceDir目录,并进入conf文件夹: 2.修改managed-schema文件,在里边添加如下配置: <fieldType name="text_ik" class="solr.TextField"> <analyzer type="index"

重写lucene.net的分词器支持3.0.3.0版本

lucene.net中每个分词器都是一个类,同时有一个辅助类,这个辅助类完成分词的大部分逻辑.分词类以Analyzer结尾,辅助类通常以Tokenizer结尾.分类词全部继承自Analyzer类,辅助类通常也会继承某个类. 首先在Analysis文件夹下建立两个类,EasyAnalyzer和EasyTokenizer. 1 using Lucene.Net.Analysis; 2 using System.IO; 3 4 namespace LuceneNetTest 5 { 6 public

Lucene的中文分词器IKAnalyzer

分词器对英文的支持是非常好的. 一般分词经过的流程: 1)切分关键词 2)去除停用词 3)把英文单词转为小写 但是老外写的分词器对中文分词一般都是单字分词,分词的效果不好. 国人林良益写的IK Analyzer应该是最好的Lucene中文分词器之一,而且随着Lucene的版本更新而不断更新,目前已更新到IK Analyzer 2012版本. IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包.到现在,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时

IKAnalyzer 分词流程粗览

没有开头语我会死啊~好的,IK是啥.怎么用相信看这篇文章的人都不需要我过多解释了,我也解释不好.下面开始正文: IK的官方结构图: 从上至下的来看: 最上层是我们不需要过度关心的,它们是一些Adapter供Lucene调用. IK Segmentation对应的主类应该是IKSegmenter,是IK工作的核心组件.提供了分词流程的控制. 词元处理子单元:多个不同算法的词元分词器,实现了对不同类型词元的识别. 词典:主要是给CJKSegmenter提供中文词识别能力的Dictionary封装,词