文档章节

Lucene的中文分词器IKAnalyzer

王国龙_成长
 王国龙_成长
发布于 2013/02/05 18:26
字数 1167
阅读 1479
收藏 16

分词器对英文的支持是非常好的。

一般分词经过的流程:

1)切分关键词

2)去除停用词

3)把英文单词转为小写

但是老外写的分词器对中文分词一般都是单字分词,分词的效果不好。

国人林良益写的IK Analyzer应该是最好的Lucene中文分词器之一,而且随着Lucene的版本更新而不断更新,目前已更新到IK Analyzer 2012版本。

IK Analyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。到现在,IK发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。在2012版本中,IK实现了简单的分词歧义排除算法,标志着IK分词器从单纯的词典分词向模拟语义分词衍化。

在系统环境:Core2 i7 3.4G双核,4G内存,window 7 64位, Sun JDK 1.6_29 64位 普通pc环境测试,IK2012具有160万字/秒(3000KB/S)的高速处理能力。

特别的,在2012版本,词典支持中文,英文,数字混合词语。

IK Analyzer 2012版本的分词效果示例:

IK Analyzer2012版本支持 细粒度切分 和 智能切分。

我们看两个演示样例:

1)文本原文1:

IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版本开始,IKAnalyzer已经推出了3个大版本。

智能分词结果:

ikanalyzer | 是 | 一个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级 | 的 | 中文 | 分词 | 工具包 | 从 | 2006年 | 12月 | 推出 | 1.0版 | 开始 | ikanalyzer | 已经 | 推 | 出了 | 3个 | 大 | 版本

最细粒度分词结果:

ikanalyzer | 是 | 一个 | 一 | 个 | 开源 | 的 | 基于 | java | 语言 | 开发 | 的 | 轻量级| 量级 | 的 | 中文 | 分词 | 工具包 | 工具 | 包 | 从 | 2006 | 年 | 12 | 月 | 推出 | 1.0 | 版 | 开始 | ikanalyzer | 已经 | 推出 | 出了 | 3 | 个 | 大 | 版本

2)文本原文2:

张三说的确实在理。

智能分词结果:

张三 | 说的 | 确实 | 在理

最细粒度分词结果:

张三 | 三 | 说的 | 的确 | 的 | 确实 | 实在 | 在理

IKAnalyzer的使用

1)下载地址:

GoogleCode开源项目:http://code.google.com/p/ik-analyzer/

GoogleCode下载地址:http://code.google.com/p/ik-analyzer/downloads/list

2)兼容性:

IKAnalyzer 2012版本兼容Lucene3.3以上版本。

3)安装部署:

十分简单,只需要将IKAnalyzer2012.jar引入项目中就可以了。对于"的"、"了"、"着"之类的停用词,它有一个词典stopword.dic。把stopword.dic和IKAnalyzer.cfg.xml复制到class根目录就可以启用停用词功能和扩展自己的词典。

4)测试例子:

新建一个Java Project,引入Lucene所需的jar文件和IKAnalyzer2012.jar文件,把stopword.dic和IKAnalyzer.cfg.xml复制到class根目录,建立一个扩展词典ext.dic和中文停用词词典chinese_stopword.dic。

IKAnalyzer2012发布包自带的stopword.dic里面存的是英文的停用词。所以我们新建一个chinese_stopword.dic,用来存放中文停用词。chinese_stopword.dic需要使用UTF-8编码。词典中,每个中文词汇独占一行。

chinese_stopword.dic内容格式:

IKAnalyzer.cfg.xml:

复制代码

1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
 3 <properties>  
 4     <comment>IK Analyzer 扩展配置</comment>
 5     <!--用户可以在这里配置自己的扩展字典 -->
 6     <entry key="ext_dict">ext.dic;</entry> 
 7 
 8     <!--用户可以在这里配置自己的扩展停止词字典-->
 9     <entry key="ext_stopwords">stopword.dic;chinese_stopword.dic</entry> 
10     
11 </properties>

复制代码

可以配置多个词典文件,文件使用";"号分隔。文件路径为相对java包的起始根路径。

扩展词典ext.dic需要为UTF-8编码。

ext.dic内容:

我把"2012"作为一个词,"欧洲杯四强赛"作为一个词。

测试分词代码:

1 package com.cndatacom.lucene.test;
 2 
 3 import java.io.StringReader;
 4 
 5 import org.apache.lucene.analysis.Analyzer;
 6 import org.apache.lucene.analysis.TokenStream;
 7 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
 8 import org.junit.Test;
 9 import org.wltea.analyzer.lucene.IKAnalyzer;
10 
11 
12 /**
13  * IKAnalyzer 分词器测试
14  * @author Luxh
15  */
16 public class IKAnalyzerTest {
17     
18     @Test
19     public void testIKAnalyzer() throws Exception {
20         
21         String keyWord = "2012年欧洲杯四强赛";
22         
23         IKAnalyzer analyzer = new IKAnalyzer();
24         
25         //使用智能分词
26         analyzer.setUseSmart(true);
27         
28         //打印分词结果
29         printAnalysisResult(analyzer,keyWord);
30         
31     }
32     
33     /**
34      * 打印出给定分词器的分词结果
35      * @param analyzer 分词器
36      * @param keyWord 关键词
37      * @throws Exception
38      */
39     private void printAnalysisResult(Analyzer analyzer, String keyWord) throws Exception {
40         System.out.println("当前使用的分词器:" + analyzer.getClass().getSimpleName());
41         TokenStream tokenStream = analyzer.tokenStream("content", new StringReader(keyWord));
42         tokenStream.addAttribute(CharTermAttribute.class);
43         while (tokenStream.incrementToken()) {
44             CharTermAttribute charTermAttribute = tokenStream.getAttribute(CharTermAttribute.class);
45             System.out.println(new String(charTermAttribute.buffer()));
46         }
47     }
48 }

复制代码

打印出来的分词结果:

可以看到”2012“作为一个词,“欧洲杯四强赛”也是作为一个词,停用词”年“已被过滤掉。

© 著作权归作者所有

王国龙_成长
粉丝 16
博文 35
码字总数 55131
作品 0
南昌
私信 提问
加载中

评论(3)

万标
强烈的顶一下
姜建
姜建
好东西,收藏了
车开源
车开源
赞一个:-)
【PDF分享】IKAnalyzer中文分词器V3.2.3使用手册.pdf

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

红薯
2010/09/13
941
0
lucene4.0与IKAnalyzer的冲突

在网上下载了lucene当前最新版本4.0,以及IKAnalyzer中文分词器的完整发布包。 运行之后发现异常:Exception in thread "main" java.lang.VerifyError: class org.wltea.analyzer.lucene.IKA......

翊骷
2014/08/26
97
0
lucene4.0与IKAnalyzer2012_u6的冲突

在网上下载了lucene当前最新版本4.0,以及IKAnalyzer中文分词器的完整发布包。 一起运行之后发现异常: java.lang.VerifyError: class org.wltea.analyzer.lucene.IKAnalyzer overrides fina...

黄敦仁
2013/01/15
5.9K
4
IKAnalyzer中文分词器

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

期待变强的菜鸟
2014/09/10
2.4K
0
得到文章的关键词后根据它对文章划分类别

使用分词器得到一篇文章的词,例如对一句话“IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出 了3个大版本”分析, 得到...

printf_ll
2014/09/04
606
2

没有更多内容

加载失败,请刷新页面

加载更多

The server time zone value 'EDT' is unrecognized or represents more than one time zone.

2019-10-14 18:07:43.714 ERROR 74363 --- [Druid-ConnectionPool-Create-1855026648] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://10.30......

yizhichao
28分钟前
8
0
html加载顺序以及影响页面二次渲染额的因素

本文转载于:专业的前端网站➱html加载顺序以及影响页面二次渲染额的因素 浏览器请求发往服务器以后,返回HTML页面,页面内容开始渲染,具体的执行顺序为: 1. 浏览器开始载入html代码,发现<...

前端老手
30分钟前
7
0
BeginnersBook JSP、JSTL、Servlet 教程

来源:ApacheCN BeginnersBook 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并...

ApacheCN_飞龙
42分钟前
5
0
Handler和内部类的正确用法

PS:本文摘抄自《Android高级进阶》,仅供学习使用   Android代码中涉及线程间通信的地方经常会使用Handler,典型的代码结构如下。 1 2 3 4 5 6 7 8 9 public class HandlerActivity exten...

shzwork
43分钟前
7
0
centos 7 安装mysql5.6rpm格式

centos 7 安装mysql5.6rpm格式 1查看是否安装了mysql rpm -qa|grep -i mysql 如果安装了请卸载:rpm -e --nodeps MySQL... 2、没有安装则进行如下操作 下载mysql rpm tar包 https://dev.mysq...

Archer99
43分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部