lucene中文分词组件(词典全切分算法)下载

06-12-11 linliangyi2006
下载地址:

http://groups-beta.google.com/group/SegWord/web/IKAnalyzer.jar

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("partnum", "Q36"));
		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("partnum", "Q36"));
		Hits hits = searcher.search(query);
		assertEquals(1, hits.length());
	}
}
<p>

分词效果测试,命令行如下:

java -classpath IKAnalyzer.jar;lucene-core-2.0.0.jar org.mira.lucene.analysis.IK_CAnalyzer 中华人民共和国香港特别行政区

该算法适合与互联网用户的搜索习惯和企业知识库检索,用户可以用句子中涵盖的中文词汇搜索,如用“人民”搜索含“人民币”的文章,这是大部分用户的搜索思维;

不适合用于知识挖掘和网络爬虫技术,全切分法容易造成知识歧义,因为在语义学上“人民”和“人民币”是完全搭不上关系的。

分词效果:

1.实现中文单词细粒度全切分

如:中华人民共和国

0 - 2 = 中华

0 - 4 = 中华人民

0 - 7 = 中华人民共和国

1 - 3 = 华人

2 - 4 = 人民

2 - 7 = 人民共和国

4 - 6 = 共和

4 - 7 = 共和国

2.实现对专有名词的识别和切分(人名,公司名)

如:陈文平是开睿动力通讯科技有限公司董事长

0 - 3 = 陈文平 <------ 人名,非汉语词汇

4 - 6 = 开睿 <------ 公司名,非汉语词汇

6 - 8 = 动力

8 - 10 = 通讯

10 - 12 = 科技

12 - 14 = 有限

12 - 16 = 有限公司

14 - 16 = 公司

16 - 18 = 董事

16 - 19 = 董事长

18 - 19 = 长

3.对数词和量词的合理切分

如:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发生的里氏6.2级地震已经造成至少5427人死亡,20000余人受伤,近20万人无家可归。

0 - 1 = 据

1 - 4 = 路透社

4 - 6 = 报道

。。。。。。

18 - 20 = 官员

20 - 22 = 星期

20 - 23 = 星期二

22 - 23 = 二

24 - 26 = 29

24 - 27 = 29日

26 - 27 = 日

28 - 30 = 表示

31 - 33 = 日惹

33 - 34 = 市

。。。。。。

40 - 42 = 27

40 - 43 = 27日

43 - 44 = 晨

44 - 45 = 5

44 - 46 = 5时

45 - 46 = 时

46 - 48 = 53

46 - 49 = 53分

48 - 50 = 分发

。。。。。。

52 - 54 = 里氏

54 - 57 = 6.2

54 - 58 = 6.2级

57 - 58 = 级

58 - 60 = 地震

。。。。。。

66 - 70 = 5427

66 - 71 = 5427人

71 - 73 = 死亡

72 - 73 = 亡

74 - 79 = 20000

79 - 81 = 余人

81 - 83 = 受伤

84 - 85 = 近

85 - 87 = 20

85 - 89 = 20万人

87 - 89 = 万人

89 - 93 = 无家可归

    

1
linliangyi2006
2006-12-14 14:37
新增最大分词算法分词器

下载地址:

http://groups-beta.google.com/group/SegWord/web/IKAnalyzer.jar

实现类 : org.mira.lucene.analysis.MIK_CAnalyzer

效果测试命令行:

java -classpath IKAnalyzer.jar;lucene-core-2.0.0.jar org.mira.lucene.analysis.MIK_CAnalyzer 中华人民共和国香港特别行政区

分词效果:

例子:中华人民共和国香港特别行政区

0 - 7 = 中华人民共和国

7 - 14 = 香港特别行政区

例子:陈文平是开睿动力通讯科技有限公司董事长

0 - 3 = 陈文平

4 - 6 = 开睿

6 - 8 = 动力

8 - 10 = 通讯

10 - 12 = 科技

12 - 16 = 有限公司

16 - 19 = 董事长

例子:据路透社报道,印度尼西亚社会事务部一官员星期二(29日)表示,日惹市附近当地时间27日晨5时53分发生的里氏6.2级地震已经造成至少5427人死亡?,20000余人受伤,近20万人无家可归。

1 - 4 = 路透社

4 - 6 = 报道

7 - 12 = 印度尼西亚

12 - 14 = 社会

14 - 16 = 事务

18 - 20 = 官员

20 - 23 = 星期二

24 - 27 = 29日

28 - 30 = 表示

31 - 33 = 日惹

34 - 36 = 附近

36 - 40 = 当地时间

40 - 43 = 27日

44 - 46 = 5时

46 - 49 = 53分

48 - 50 = 分发

49 - 51 = 发生

50 - 52 = 生的

52 - 54 = 里氏

54 - 58 = 6.2级

58 - 60 = 地震

60 - 62 = 已经

62 - 64 = 造成

64 - 66 = 至少

66 - 71 = 5427人

71 - 73 = 死亡

75 - 80 = 20000

80 - 82 = 余人

82 - 84 = 受伤

86 - 90 = 20万人

90 - 94 = 无家可归

banq
2006-12-14 16:06
不错,中文切分词很重要,决定了站内搜索的质量。推荐到首页。

另外,整理一些lucene相关文章,Compass开始引人注目,主要是其将index放在数据库实现,这样,对于应付大访问负载,进行服务器集群cluster提供了基本条件。

最新11月份老外的一篇Compass文章介绍:

Compass: Integrate Search into your apps

http://www.infoq.com/articles/compass-search-tutorial

linliangyi2006
2006-12-21 13:29
最新V1.1版分词器,已更新。

1.修订了对数量次切分的BUG

2.修订了对大文本切分时的重复输出BUG

下载地址

http://groups-beta.google.com/group/SegWord/web/IKAnalyzer.jar

猜你喜欢
3Go 1 2 3 下一页