文档章节

IKAnalyzer分词技术

D
 D-dragon
发布于 2016/05/09 23:45
字数 593
阅读 369
收藏 1

说到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
博文 41
码字总数 40789
作品 0
资阳
程序员
私信 提问
Lucene 自定义分词

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

learn_more
2015/05/13
246
3
IKAnalyzer中文分词器

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

期待变强的菜鸟
2014/09/10
0
0
Lucene的中文分词器IKAnalyzer

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

王国龙_成长
2013/02/05
0
3
IKAnalyzer的分词结果有误

@林良益 你好,想跟你请教个问题: 下面这个程序,使用IKanalyzer进行分词,“你好啊”像这样的“X好啊”形式的词都会出现把X删掉,只出现“好啊”,如下面: 我觉得,分词的话应该不能删减原...

天际流云
2014/11/27
663
2
【PDF分享】IKAnalyzer中文分词器V3.2.3使用手册.pdf

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

红薯
2010/09/13
900
0

没有更多内容

加载失败,请刷新页面

加载更多

进程管理利器Supervisor--centos7下安装与卸载

目录 概述 环境准备 检查python环境 在线安装 配置Supervisor 启动并验证 概述 Supervisor的安装可以有在线安装和离线安装两种方式。安装方式取决于服务器是否联网,联网的话可采用在线安装,...

java_龙
11分钟前
2
0
spring系列汇总

spring spring-基于可扩展Schema的特性自定义标签 springmvc-同一个访问资源,多种视图解析方式 spring cache 配置使用aspectj模式织入 基于注解的spring缓存,轻松无侵入解决cache问题 spri...

细肉云吞
12分钟前
1
0
vsftpd搭建ftp

12月10日任务 14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp exportfs命令 在nfs运行后的一段时间内,如果需要添加共享目录,这时需要修改exports文件,并...

robertt15
14分钟前
2
0
numpy常用操作

水平合并数组 import numpy as npa = [1,2,3]b = [4,5,6]np.hstack((a,b))# array([1, 2, 3, 4, 5, 6])c = [a,['a','b','c']]d = [b,['d','e','f']]np.hstack((c,d))#array([['1'......

datadev_sh
31分钟前
4
0
四种检测异常值的常用技术简述

摘要: 本文介绍了异常值检测的常见四种方法,分别为Numeric Outlier、Z-Score、DBSCAN以及Isolation Forest 在训练机器学习算法或应用统计技术时,错误值或异常值可能是一个严重的问题,它们...

阿里云官方博客
34分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部