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 = 无家可归
评论
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
楼上的兄弟,你知不知道有一种分词方式叫二元分词哩!如果简单的拆单字就没有意义了,中文分词难就难在不能按字分
sifen
2008-04-23
有个小问题,例如在对无意义的词汇分词 “析方” 一般的分词器能分成 “析”“方” ,你这个好像分不了,似乎不太合理。
zr0243
2008-04-22
在使用您的分词器时,发现如下一个问题:
如:我有一段文字为 "中国电信拟收购北京电信",建立索引后
使用MIK_CAnalyzer搜索关键词"中国北京"搜不到,必须使用"中国 北京"才能搜到.
中间好像必须要有空格.
如何不用加空格,使用"中国北京"也能搜索到呢.google和百度不要空格也能搜到
如:我有一段文字为 "中国电信拟收购北京电信",建立索引后
使用MIK_CAnalyzer搜索关键词"中国北京"搜不到,必须使用"中国 北京"才能搜到.
中间好像必须要有空格.
如何不用加空格,使用"中国北京"也能搜索到呢.google和百度不要空格也能搜到
dipi1234567
2008-04-22
源代码中没有org.mira.lucene.lib.TokenTree
请问是怎么回事呢?? 急需知道 谢谢
请问是怎么回事呢?? 急需知道 谢谢
billgmh
2008-04-18
我最近也在想如何优化自己的分词器,有空多交流……
linliangyi2007
2008-04-18
楼上的哥么,好啊,你也用过je啊!
嘻嘻,我跟je的作者是穿开裆裤的死党了,呵呵,我们的分词故意在这方面上做的区别得。如果你需要排歧义的算法,我可以单独给你一个试验中的开发类,或许对你有帮助
嘻嘻,我跟je的作者是穿开裆裤的死党了,呵呵,我们的分词故意在这方面上做的区别得。如果你需要排歧义的算法,我可以单独给你一个试验中的开发类,或许对你有帮助
sole
2008-04-15
和je分词比较:
北京时间4月15日消息,据国外媒体报道,雅虎周一宣布,将推出第三代网络爬虫Slurp 3.0。
“目前所有的准备工作已经就绪,正式推出活动已经启动。”雅虎搜索部门的沙拉德·维玛(Sharad Verma)和约拉姆·阿伦(Yoram Arnon)周一在雅虎搜索博客中表示。
上周五,雅虎主要竞争对手谷歌披露,其最新的网络爬虫软件采用嵌入网页的方式,可以发现那些此前被遗漏的被隐藏的网页。不过雅虎并没有对其最新的爬虫软件做详细介绍。
雅虎建议关注网络爬虫软件的相关用户尽快升级现有的Slurp 2.0版本。
您的IKAnalyzer 分词结果:
北京时间 | 4月 | 15日 | 消息 | 国外 | 媒体报道 | 雅虎 | 周一 | 宣布 | 将推 | 推出 | 第三代 | 网络 | 爬虫 | slurp | 3.0 | 目前 | 前所 | 所有 | 准备工作 | 已经 | 就绪 | 正式 | 推出 | 出活 | 活动 | 已经 | 启动 | 雅虎 | 搜索 | 部门 | 沙拉 | 拉德 | 维玛 | sharad | verma | 和约 | 拉姆 | 阿伦 | yoram | arnon | 周一 | 一在 | 雅虎 | 搜索 | 博客 | 中表 | 表示 | 上周 | 周五 | 雅虎 | 主要 | 竞争对手 | 谷歌 | 披露 | 最新 | 网络 | 爬虫 | 软件 | 采用 | 嵌入 | 入网 | 网页 | 方式 | 可以 | 发现 | 那些 | 此前 | 遗漏 | 隐藏 | 网页 | 不过 | 雅虎 | 并没有 | 最新 | 爬虫 | 软件 | 做详 | 详细 | 介绍 | 雅虎 | 建议 | 关注 | 网络 | 爬虫 | 软件 | 相关 | 用户 | 尽快 | 快升 | 升级 | 现有 | slurp | 2.0版 | 版本 |
耗时(毫秒):26
je分词结果:
北京时间 | 4月 | 15日 | 消息 | 据 | 国外 | 媒体报道 | 雅虎 | 周一 | 宣布 | 将 | 推出 | 第三代 | 网络 | 爬虫 | slurp | 3.0 | 目前 | 所有 | 准备工作 | 已经 | 就绪 | 正式 | 推出 | 活动 | 已经 | 启动 | 雅虎 | 搜索 | 部门 | 沙拉德 | 维玛 | sharad | verma | 和约 | 拉姆 | 阿伦 | yoram | arnon | 周一 | 雅虎 | 搜索 | 博客 | 中 | 表示 | 周五 | 雅虎 | 主要 | 竞争对手 | 谷歌 | 披露 | 最新 | 网络 | 爬虫 | 软件 | 采用 | 嵌入 | 网页 | 方式 | 可以 | 发现 | 那些 | 此前 | 遗漏 | 隐藏 | 网页 | 不过 | 雅虎 | 并没有 | 对其 | 最新 | 爬虫 | 软件 | 做 | 详细 | 介绍 | 雅虎 | 建议 | 关注 | 网络 | 爬虫 | 软件 | 相关 | 用户 | 尽快 | 升级 | 现有 | slurp | 2.0 | 版本 |
耗时(毫秒):26
还需完善阿
北京时间4月15日消息,据国外媒体报道,雅虎周一宣布,将推出第三代网络爬虫Slurp 3.0。
“目前所有的准备工作已经就绪,正式推出活动已经启动。”雅虎搜索部门的沙拉德·维玛(Sharad Verma)和约拉姆·阿伦(Yoram Arnon)周一在雅虎搜索博客中表示。
上周五,雅虎主要竞争对手谷歌披露,其最新的网络爬虫软件采用嵌入网页的方式,可以发现那些此前被遗漏的被隐藏的网页。不过雅虎并没有对其最新的爬虫软件做详细介绍。
雅虎建议关注网络爬虫软件的相关用户尽快升级现有的Slurp 2.0版本。
您的IKAnalyzer 分词结果:
北京时间 | 4月 | 15日 | 消息 | 国外 | 媒体报道 | 雅虎 | 周一 | 宣布 | 将推 | 推出 | 第三代 | 网络 | 爬虫 | slurp | 3.0 | 目前 | 前所 | 所有 | 准备工作 | 已经 | 就绪 | 正式 | 推出 | 出活 | 活动 | 已经 | 启动 | 雅虎 | 搜索 | 部门 | 沙拉 | 拉德 | 维玛 | sharad | verma | 和约 | 拉姆 | 阿伦 | yoram | arnon | 周一 | 一在 | 雅虎 | 搜索 | 博客 | 中表 | 表示 | 上周 | 周五 | 雅虎 | 主要 | 竞争对手 | 谷歌 | 披露 | 最新 | 网络 | 爬虫 | 软件 | 采用 | 嵌入 | 入网 | 网页 | 方式 | 可以 | 发现 | 那些 | 此前 | 遗漏 | 隐藏 | 网页 | 不过 | 雅虎 | 并没有 | 最新 | 爬虫 | 软件 | 做详 | 详细 | 介绍 | 雅虎 | 建议 | 关注 | 网络 | 爬虫 | 软件 | 相关 | 用户 | 尽快 | 快升 | 升级 | 现有 | slurp | 2.0版 | 版本 |
耗时(毫秒):26
je分词结果:
北京时间 | 4月 | 15日 | 消息 | 据 | 国外 | 媒体报道 | 雅虎 | 周一 | 宣布 | 将 | 推出 | 第三代 | 网络 | 爬虫 | slurp | 3.0 | 目前 | 所有 | 准备工作 | 已经 | 就绪 | 正式 | 推出 | 活动 | 已经 | 启动 | 雅虎 | 搜索 | 部门 | 沙拉德 | 维玛 | sharad | verma | 和约 | 拉姆 | 阿伦 | yoram | arnon | 周一 | 雅虎 | 搜索 | 博客 | 中 | 表示 | 周五 | 雅虎 | 主要 | 竞争对手 | 谷歌 | 披露 | 最新 | 网络 | 爬虫 | 软件 | 采用 | 嵌入 | 网页 | 方式 | 可以 | 发现 | 那些 | 此前 | 遗漏 | 隐藏 | 网页 | 不过 | 雅虎 | 并没有 | 对其 | 最新 | 爬虫 | 软件 | 做 | 详细 | 介绍 | 雅虎 | 建议 | 关注 | 网络 | 爬虫 | 软件 | 相关 | 用户 | 尽快 | 升级 | 现有 | slurp | 2.0 | 版本 |
耗时(毫秒):26
还需完善阿
linliangyi2007
2008-04-09
是这样的值,在标准分词器中,对日期的处理2008-03-20,就是输出2008-03-20,因此你可以用RangFilter作字符窜比较,但是放在IK中2008-03-20被拆分成了2008,03,20这样肯定不能range了啊!!
解决方法很简单,对日期field设置成key word不分词就好
解决方法很简单,对日期field设置成key word不分词就好
kangsg219
2008-04-09
反过来说,和分词无关那就和你的分词器无关了,再次不明白?
kangsg219
2008-04-09
Filter rangeFilter = new RangeFilter("sendDate", "2008-03-20", "2008-03-28", true, true);RangeFilter是一个过滤器,主要是对时间过滤,比如说我要搜索2008-03-20到2008-03-28的数据。因此不应该会扯到分词的问题。不明白?
linliangyi2007
2008-04-08
RangeFilter能说说是具体如何使用的嘛?
IK输出的将是一系列的分词词元(词组),是可以灵活处理的。
StandardAnalyzer是采用单字切分的,
所以。。。对与RangeFilter,单字和词组是否存在区别呢?!可以从这个思路着手看看
IK输出的将是一系列的分词词元(词组),是可以灵活处理的。
StandardAnalyzer是采用单字切分的,
所以。。。对与RangeFilter,单字和词组是否存在区别呢?!可以从这个思路着手看看
kangsg219
2008-04-08
非常感谢,你的东西太好了
但我再使用过程中碰到一个棘手的问题,用你的分词器建索引并搜索,当我不使用RangeFilter的时候一切正常,当我使用RangeFilter的时候就搜索不到任何结果;用lucene自带的StandardAnalyzer则不会出现类似的问题,由此可知IK_CAnalyzer和RangeFilter之间存在着bug,请问有什么解决办法吗?
谢谢
但我再使用过程中碰到一个棘手的问题,用你的分词器建索引并搜索,当我不使用RangeFilter的时候一切正常,当我使用RangeFilter的时候就搜索不到任何结果;用lucene自带的StandardAnalyzer则不会出现类似的问题,由此可知IK_CAnalyzer和RangeFilter之间存在着bug,请问有什么解决办法吗?
谢谢
linliangyi2007
2008-04-07
是DJ反编译的阿,这与源码有冲突嘛?!
反编译后可以去掉很多测试代码和注释,这样就整齐啦!
反编译后可以去掉很多测试代码和注释,这样就整齐啦!
manmoon
2008-04-06
兄弟
这个是源码吗?
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov Date: 2007-12-14 17:41:37
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: IKTokenizer.java
感觉是dj反编译的结果。
这个是源码吗?
// Decompiled by DJ v2.9.9.60 Copyright 2000 Atanas Neshkov Date: 2007-12-14 17:41:37
// Home Page : http://members.fortunecity.com/neshkov/dj.html - Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: IKTokenizer.java
感觉是dj反编译的结果。
linliangyi2007
2008-03-31
主要是优化的对字典搜索的速度,将原先对String的操作变成Character树的操作,速度提高了一个数量级!
前一段时间已经开始了对排歧义算法的研究,准备2.5版本推出的,但最近刚刚换地方,跟原来公司相比,任务重了不少,算法作了个雏形就搁置了,呵呵!
前一段时间已经开始了对排歧义算法的研究,准备2.5版本推出的,但最近刚刚换地方,跟原来公司相比,任务重了不少,算法作了个雏形就搁置了,呵呵!
YuLimin
2008-03-30
这么好的Blog居然被人踩了一脚,实在是不应当,我要顶。
2.0.2与1.4相比开放了所有的源代码了,不错,可否总结一下增强了哪些功能了呢?
2.0.2与1.4相比开放了所有的源代码了,不错,可否总结一下增强了哪些功能了呢?
发表评论
- 浏览: 27100 次
- 性别:

- 来自: 福州

- 详细资料
搜索本博客
我的相册
2008五一南江滨 050S
共 117 张
共 117 张
链接
最新评论
-
jBPM-jPDL学习笔记—框架 ...
请问 jbpm针对 fork和join节点如何回退,直接用程序生成一根从join ...
-- by g_bon_jovi -
JA-SIG(CAS)学习笔记1 ...
javax.net.ssl.SSLHandshakeException: jav ...
-- by lsqlister -
JA-SIG(CAS)学习笔记1 ...
<filter> <filter-name>CAS Filter& ...
-- by lsqlister -
lucene开源中文分词器 IKA ...
恩,谢谢楼主。
-- by sansan -
lucene开源中文分词器 IKA ...
地名是用一定规律的名词的,如:xx路,xx大厦,xx楼,xx里,xx巷。通过对这 ...
-- by linliangyi2007






评论排行榜