2008-02-26
lucene开源中文分词器 IKAnalyzer2.0.2 共享及源码发布
关键字: lucene 开源 中文分词 源码下载 ikanalyzer
使用说明:
IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的正反向全切分算法,是Lucene Analyzer接口的实现,代码使用例子如下:
分词效果测试,命令行如下:
java -classpath IKAnalyzer.jar;lucene-core-2.0.0.jar org.mira.lucene.analysis.IK_CAnalyzer 中华人民共和国香港特别行政区
性能与特性:
1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP)
2. 对数量词、地名、路名的优化处理
3. 对未知词汇采用自识别结合二元切分算法,确保搜索召回率
V 2.0.2 修订 Bata版对二元切分的缺陷
正向全切分分词器:org.mira.lucene.analysis.IK_CAnalyzer(适合建索引时使用)
正向最大全切分分词器:org.mira.lucene.analysis.MIK_CAnalyzer(适合用户输入检索时使用)
下面演示“正向最大全切分分词器”效果:
例子:中华人民共和国香港特别行政区
0 - 7 = 中华人民共和国
7 - 14 = 香港特别行政区
例子:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发
生的里氏6.2级地震已经造成至少5427人死亡?,20000余人受伤,近20万人无家可归。
1 - 4 = 路透社
4 - 6 = 报道
7 - 12 = 印度尼西亚
12 - 14 = 社会
14 - 17 = 事务部
17 - 18 = 一
18 - 20 = 官员
20 - 23 = 星期二
24 - 27 = 29日
28 - 30 = 表示
31 - 34 = 日惹市
34 - 36 = 附近
36 - 40 = 当地时间
40 - 43 = 27日
43 - 44 = 晨
44 - 46 = 5时
46 - 49 = 53分
48 - 50 = 分发
49 - 51 = 发生
52 - 54 = 里氏
54 - 58 = 6.2级
58 - 60 = 地震
60 - 62 = 已经
62 - 64 = 造成
64 - 66 = 至少
66 - 71 = 5427人
71 - 73 = 死亡
74 - 79 = 20000
79 - 81 = 余人
81 - 83 = 受伤
84 - 85 = 近
85 - 89 = 20万人
89 - 93 = 无家可归
IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的正反向全切分算法,是Lucene Analyzer接口的实现,代码使用例子如下:
import org.mira.lucene.analysis.IK_CAnalyzer <------- 引用类
import .....
public class IKAnalyzerTest extends TestCase {
RAMDirectory directory;
private IndexSearcher searcher;
public void setUp() throws Exception {
directory = new RAMDirectory();
IndexWriter writer = new IndexWriter(directory,
new IK_CAnalyzer(), <------- 实例化类
true);
Document doc = new Document();
doc.add(Field.Keyword("title", "中文分词测试"));
doc.add(Field.Text("description", "Illidium Space Modulator"));
writer.addDocument(doc);
writer.close();
searcher = new IndexSearcher(directory);
}
public void testTermQuery() throws Exception {
Query query = new TermQuery(new Term("title", "中文分词"));
Hits hits = searcher.search(query);
assertEquals(1, hits.length());
}
}
分词效果测试,命令行如下:
java -classpath IKAnalyzer.jar;lucene-core-2.0.0.jar org.mira.lucene.analysis.IK_CAnalyzer 中华人民共和国香港特别行政区
性能与特性:
1. 正向全切分算法,42万汉字字符/每秒的处理能力(IBM ThinkPad 酷睿I 1.6G 1G内存 WinXP)
2. 对数量词、地名、路名的优化处理
3. 对未知词汇采用自识别结合二元切分算法,确保搜索召回率
V 2.0.2 修订 Bata版对二元切分的缺陷
正向全切分分词器:org.mira.lucene.analysis.IK_CAnalyzer(适合建索引时使用)
正向最大全切分分词器:org.mira.lucene.analysis.MIK_CAnalyzer(适合用户输入检索时使用)
下面演示“正向最大全切分分词器”效果:
例子:中华人民共和国香港特别行政区
0 - 7 = 中华人民共和国
7 - 14 = 香港特别行政区
例子:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发
生的里氏6.2级地震已经造成至少5427人死亡?,20000余人受伤,近20万人无家可归。
1 - 4 = 路透社
4 - 6 = 报道
7 - 12 = 印度尼西亚
12 - 14 = 社会
14 - 17 = 事务部
17 - 18 = 一
18 - 20 = 官员
20 - 23 = 星期二
24 - 27 = 29日
28 - 30 = 表示
31 - 34 = 日惹市
34 - 36 = 附近
36 - 40 = 当地时间
40 - 43 = 27日
43 - 44 = 晨
44 - 46 = 5时
46 - 49 = 53分
48 - 50 = 分发
49 - 51 = 发生
52 - 54 = 里氏
54 - 58 = 6.2级
58 - 60 = 地震
60 - 62 = 已经
62 - 64 = 造成
64 - 66 = 至少
66 - 71 = 5427人
71 - 73 = 死亡
74 - 79 = 20000
79 - 81 = 余人
81 - 83 = 受伤
84 - 85 = 近
85 - 89 = 20万人
89 - 93 = 无家可归
评论
linliangyi2007
2008-09-05
引用
我向 dict.word.wordbase.dic 文件中添加了 3G 这个新词,分 "3G时代" 时,分成了
3|G|时代, 添加的新词竟然不起作用? 我哪里弄错了?
3|G|时代, 添加的新词竟然不起作用? 我哪里弄错了?
这个跟辞典没有关系哒,是分词器的处理规则决定的,呵呵,为了搜索的方便,将英文和数字拆开了
shguan@toptimetech.com
2008-08-28
我向 dict.word.wordbase.dic 文件中添加了 3G 这个新词,分 "3G时代" 时,分成了
3|G|时代, 添加的新词竟然不起作用? 我哪里弄错了?
3|G|时代, 添加的新词竟然不起作用? 我哪里弄错了?
linliangyi2007
2008-08-26
引用
谢谢,je 分词的一些API挺好用的,如果能做成那样,就更好了,但感觉到 IK的分词要好于 JE
哈哈,je分词的作者就坐我身后上班呢,我们之前就是觉得好玩,各自作了一个分词器,还有庖丁分词的,我们仨一起玩哒
shguan@toptimetech.com
2008-08-25
谢谢,je 分词的一些API挺好用的,如果能做成那样,就更好了,但感觉到 IK的分词要好于 JE
linliangyi2007
2008-08-25
引用
你好,如果我想外加自定义的词库该怎么办?
目前一个很土的方式,就是可以向jar包中的dict文件直接添加词语!
本来准备在2.1的时候完善这块接口的,一直没有时间哈!
shguan@toptimetech.com
2008-08-24
你好,如果我想外加自定义的词库该怎么办?
linliangyi2007
2008-08-24
引用
请问楼主没有org.mira.lucene.lib.TokenTree
怎么办啊,可否传一个包,zdrong2007@yahoo.com.cn
目前的IK分词器实际上用不上org.mira.lucene.lib.TokenTree这个类的,去掉就好了。
目前这个类一直没完整编写完,其主要针对排歧义算法而言的,尚未想好。不好意思!
linliangyi2007
2008-08-24
引用
我没有使用到RangeFilter呀,
可是搜索“解决方案”返回的页面也是一片空白:(
可是搜索“解决方案”返回的页面也是一片空白:(
这个跟用不用RangeFilter无关,你可以将“解决方案”放入IK中测试一下到底分词分出了什么结果,如果分词结果正确,但查询结果不对,就有两种可能:
1.对分词结果生成的Query逻辑有问题;
2.你的文档在做索引的时候,切分的结果不是你预想的那样,这样查询的时候匹配不上。
biy
2008-08-21
我没有使用到RangeFilter呀,
可是搜索“解决方案”返回的页面也是一片空白:(
可是搜索“解决方案”返回的页面也是一片空白:(
zdr2004
2008-08-14
请问楼主没有org.mira.lucene.lib.TokenTree
怎么办啊,可否传一个包,zdrong2007@yahoo.com.cn
怎么办啊,可否传一个包,zdrong2007@yahoo.com.cn
linliangyi2007
2008-08-10
引用
garrylam 2008-08-05
例如: "中國政治文化的演變" , 分詞結果 中國/政治/文化/演變
如果用"中國文化"去做匹配, 由於""中國文化"被分爲"中國/中國文化/文化",
因此無法找到.
我想這個問題無法解決吧.
例如: "中國政治文化的演變" , 分詞結果 中國/政治/文化/演變
如果用"中國文化"去做匹配, 由於""中國文化"被分爲"中國/中國文化/文化",
因此無法找到.
我想這個問題無法解決吧.
楼上说的这个问题,实际上已经与分词无关了,它由lucene的queryparser造成的,解决的方案是你可以使用分词器的分词结果,根据自己实际需要,编写Query对象。QueryParser老实说太简单,不好用
garrylam
2008-08-05
例如: "中國政治文化的演變" , 分詞結果 中國/政治/文化/演變
如果用"中國文化"去做匹配, 由於""中國文化"被分爲"中國/中國文化/文化",
因此無法找到.
我想這個問題無法解決吧.
如果用"中國文化"去做匹配, 由於""中國文化"被分爲"中國/中國文化/文化",
因此無法找到.
我想這個問題無法解決吧.
kweiwang
2008-06-24
试用了以下, 非常好。多谢。有一个问题,关于 .dic 文件的分类和用途,及其扩展。我的理解如下, 请确认是否正确:
过滤类
c_number.dic
connector.dic
count.dic
noisechar.dic
number_sign.dic
other_digit.dic
suffix.dic
stopword.dic
匹配类
local.dic
wordbase.dic
(1)上述理解是否正确?
(2)是否每个文件都已经被您的analyzer采用?
(3)如果需要扩展,我将在目标文件的前方加入字符或词组(pre-append)。这样做有何问题?
再谢!
过滤类
c_number.dic
connector.dic
count.dic
noisechar.dic
number_sign.dic
other_digit.dic
suffix.dic
stopword.dic
匹配类
local.dic
wordbase.dic
(1)上述理解是否正确?
(2)是否每个文件都已经被您的analyzer采用?
(3)如果需要扩展,我将在目标文件的前方加入字符或词组(pre-append)。这样做有何问题?
再谢!
xiao193xue
2008-05-18
还是觉得没有把自己要问的问题说清楚,如果方便的话请给我您的联系方式(E-mail:xiao193xue@126.com).我想具体问一下,打扰时间绝对不会超过10分钟
请理解一下我的求知心情
谢谢,切盼回复
请理解一下我的求知心情
谢谢,切盼回复
xiao193xue
2008-05-18
刚开始学习有关分词的咚咚,想问一下,既然这是个以词典分词为基础的分词器,就是说对一段文字分词时,是依据词典来判断一个词是否可以被分出来的,那么词典放在哪里?词典的内容可以是自己创建的吗?JAVA程序中怎样与词典建立连接?
谢谢回答
谢谢回答
sansan
2008-05-10
恩,谢谢楼主。
linliangyi2007
2008-05-09
地名是用一定规律的名词的,如:xx路,xx大厦,xx楼,xx里,xx巷。通过对这些地名关键字的识别,在结合分词上下文的状态,就能估算出相应的结果。但不是绝对哦,因为中文词汇的特例太多了。
sansan
2008-05-06
很好的东西,赞,谢谢分享。
不过楼主能不能简单介绍下对于地名等的识别原理,我现在也想给我的分词增加对于人名地名的识别的功能,谢谢了。
不过楼主能不能简单介绍下对于地名等的识别原理,我现在也想给我的分词增加对于人名地名的识别的功能,谢谢了。
sifen
2008-05-01
我理解楼主的意思,但是在实际搜索过程中,往往会碰到一种问题,特别是短语搜索,用户可能会搜索“际搜索过程” 这样的语句,分词之后“际搜|搜索|过程”,而在索引过程中是整句索引,未曾分出 “际搜” 这样就造成搜索不到结果的现象。
linliangyi2007
2008-04-28
楼上的兄弟,你知不知道有一种分词方式叫二元分词哩!如果简单的拆单字就没有意义了,中文分词难就难在不能按字分
发表评论
- 浏览: 85935 次
- 性别:

- 来自: 福州

- 详细资料
搜索本博客
我的相册
Olympic2008-002
共 155 张
共 155 张
链接
最新评论
-
jBPM-jPDL学习笔记——流 ...
我们的项目是和老系统结合,邻导想定义一个接口,开发者不需要知道流程代码,只需调入 ...
-- by cdtpf -
jBPM-jPDL学习笔记——流 ...
引用 楼主我有个问题,如果填写借款金额以后,等待manage审批,但流定义可以在 ...
-- by cdtpf -
jBPM-jPDL学习笔记——流 ...
我始终在想:页面上组织是个大问题 程序控制倒不是非常的麻烦,数据库设计好了,直 ...
-- by igogo007 -
jBPM-jPDL学习笔记——流 ...
引用我用的就是帖子中提供的源码, firstFlowProcessTest可以成 ...
-- by linliangyi2007 -
jBPM-jPDL学习笔记——流 ...
我用的就是帖子中提供的源码, firstFlowProcessTest可以成功测 ...
-- by runner1977






评论排行榜