文档章节

IKAnalyzer分词技术

D
 D-dragon
发布于 2016/05/09 23:45
字数 593
阅读 341
收藏 1
点赞 2
评论 0

说到IKAnalyzer,就得先回顾下,为什么要分词。因为搜索这种东西,不是像字符串查询那样,完全按照关键字去对比。比如有一往篇文章,我们要通过一个关键字来搜索这篇文章的内容。首先,我们要对这个文章建立索引,怎么建立的,就是通过分词来建立的,分好词组以后。再通过关键字与每个分词的索引进行比对,有就是有,没得就找不到。如果分词没做好,比如:

在《地藏经》第十二品《见闻利益品》,说读经的时候、没有记忆力

我们用IK分词,结果如下:

在|地藏经|藏经|第|十二|品|见闻|见|闻|利益|品|说|读经|的|时候|没有|有|记忆力|记忆|力|

如果我们输入“地藏”两个字,那么结果就搜索不出来,所以分词对搜索来说,相当重要。

顺便把上面这个分词程序的代码贴出来:

public static void main(String[] args) throws Exception {
        String text = "在《地藏经》第十二品《见闻利益品》,说读经的时候、没有记忆力";
        //手动添加词组
//        List<String> list = new ArrayList<String>();
//        list.add("地藏");
//        Dictionary.initial(DefaultConfig.getInstance());
//        Dictionary.getSingleton().addWords(list);

//创建分词对象
        Analyzer analyzer = new MyIKAnalyzer();
        StringReader reader = new StringReader(text);

        TokenStream ts = analyzer.tokenStream("", reader);
        CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);
        //incrementToken() 之前必须要调用reset,不然会报错
        ts.reset();
        try {
            while(ts.incrementToken()){
                System.out.print(term.toString()+"|");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            reader.close();
        }
    }

由于IK自带的分词词组,不包含“地藏”两个字,我们可以通过代码来添加词组(如上面代码中注释的部分),也可以通过配置文件来实现,由于在android studio里面没有显示resources这个文件夹,要选择“project”来切换显示模式:

在这个文件下,加入IKAnalyzer.cfg.xml、stopword.dic、ext.dic。这三个文件,这个XML文件内容如下:

<?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">ext.dic;</entry> 
	<!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords">stopword.dic;</entry> 
</properties>

也就是说 ext.dic是添加词组的地方,而stopword.dic是过虑关键字的地方(相当于屏蔽的意思),即我们只需要在ext.dic下加入“地藏”两个字即可。

© 著作权归作者所有

共有 人打赏支持
D
粉丝 6
博文 37
码字总数 35994
作品 0
资阳
程序员
solr搜索之demo和集成IKAnalyzer(二)

1 新建demo-solr 关闭运行的solr应用。 进入solr目录:D:solr-4.10.2example 1、在example目录下创建demo-solr文件夹; 2、将./solr下的solr.xml拷贝到demo-solr目录下; 3、在demo-solr下创...

技术小阿哥 ⋅ 2017/11/27 ⋅ 0

学习笔记CB011:lucene搜索引擎库、IKAnalyzer中文切词工具、检索服务、查询索引、导流、word2vec

影视剧字幕聊天语料库特点,把影视剧说话内容一句一句以回车换行罗列三千多万条中国话,相邻第二句很可能是第一句最好回答。一个问句有很多种回答,可以根据相关程度以及历史聊天记录所有回答...

利炳根 ⋅ 04/21 ⋅ 0

lucene&solr-day1

全文检索课程 Lucene&Solr(1) 1. 计划 第一天:Lucene的基础知识 1、案例分析:什么是全文检索,如何实现全文检索 2、Lucene实现全文检索的流程 a) 创建索引 b) 查询索引 3、配置开发环境 ...

狂小白 ⋅ 2017/07/31 ⋅ 0

小白学习建站 该学习些什么?

我是小白,想建一个网站,网上有很多网站源码,每个网站源码都有他可取的亮点之处,那么,我的问题该学习些什么,能让我快速高效的,组合或者减增这些源码,成为自己的网站 ,我想学习,但不...

菜先生 ⋅ 02/23 ⋅ 0

lucene搜索之拼写检查和相似度查询提示(spellcheck)

suggest应用场景 用户的输入行为是不确定的,而我们在写程序的时候总是想让用户按照指定的内容或指定格式的内容进行搜索,这里就要进行人工干预用户输入的搜索条件了;我们在用百度谷歌等搜索...

xiaomin0322 ⋅ 04/17 ⋅ 0

Lucene的中文分词器IKAnalyzer

分词器对英文的支持是非常好的。 一般分词经过的流程: 1)切分关键词 2)去除停用词 3)把英文单词转为小写 但是老外写的分词器对中文分词一般都是单字分词,分词的效果不好。 国人林良益写...

王国龙_成长 ⋅ 2013/02/05 ⋅ 3

IKAnalyzer分词

一、IKAnalyzer介绍 IK Analyzer 是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了4个大版本。最初,它是以开源项目Luence为应用...

白志华 ⋅ 2015/12/30 ⋅ 0

Lucene 自定义分词

各位大神,帮菜鸟看个问题! 使用Lucene3.5版本以及 IKAnalyzer 分词, 在对IP字段(192.168.2.240)分词时,结果为 : 192.168.2.240;其他表字段同样采用IKAnalyzer 分词; 我的问题是:如何...

learn_more ⋅ 2015/05/13 ⋅ 3

IKAnalyzer中文分词器

IKAnalyzer3.0介绍 IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体...

期待变强的菜鸟 ⋅ 2014/09/10 ⋅ 0

有人知道android上分词方法吗?

我要做一个android平台的自动问答软件 我想对中文句子进行分词 请问有人知道能运用到android平台上的分词技术吗?IKanalyzer和庖丁能用到android上吗?

yuwentao ⋅ 2012/05/03 ⋅ 7

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

Java8新增的DateTimeFormatter与SimpleDateFormat的区别

两者最大的区别是,Java8的DateTimeFormatter也是线程安全的,而SimpleDateFormat并不是线程安全。 在并发环境下使用SimpleDateFormat 为了能够在多线程环境下使用SimpleDateFormat,有这三种...

人觉非常君 ⋅ 今天 ⋅ 0

多线程如何控制执行顺序

线程的生命周期说明: 当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New)、就绪(Runnable)、运行(Running)、...

MarinJ_Shao ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Django第一期

安装Django 去https://www.djangoproject.com/download/ 下载最新版的Django,然后解压放到Anaconda\Lib\site-packages目录下,然后cmd进入此目录,输入安装命令: python setup.py install ...

大不了敲一辈子代码 ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部