浏览 4044 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-11
IKAnalyzer基于lucene2.0版本API开发,实现了以词典分词为基础的 正反向全切分 以及 正反向最大匹配切分 两种算法,是Lucene Analyzer接口的实现,代码使用例子如下: 下载地址: http://groups-beta.google.com/group/SegWord/web/IKAnalyzer.jar 正反向全切分算法: 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()); } } 分词效果测试,命令行如下: 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 = 无家可归 最大匹配分词算法 实现类 : 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 = 香港特别行政区 例子:据路透社报道,印度尼西亚社会事务部一官员星期二(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 = 无家可归 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1492380 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-06-27
正向,逆向,全向 切分 ,他们的区别是什么?详细点
比如 我输入 中华人民共和国 分词结果是 中华人民共和国 中华人民 中华 这是为什么呢? |
|
返回顶楼 | |
发表时间:2008-08-01
if I have no chinese dictionary, the analyzer is useless.
but where can I get the dictionary? would you share yours? |
|
返回顶楼 | |