将分词应用与搜索,通常有“匹配率”和“准确度”的矛盾,有的用户希望输入“人民”能查出“人民币”相关记录,有的用户则希望能提供相对语义精确的信息,这个矛盾大家是如何解决的,有兴趣的一起来讨论一下。为了解决这个矛盾,就写了两种算法的正反向全切分算法: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人死亡&shy;,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 = 无家可归最大匹配切分算法:新增最大分词算法分词器下载地址:
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 = 无家可归

解决方案 »

  1.   

    最新V1.1版分词器,已更新。1.修订了对数量次切分的BUG
    2.修订了对大文本切分时的重复输出BUG下载地址 
    http://groups-beta.google.com/group/SegWord/web/IKAnalyzer.jar
      

  2.   

    如果用户发现google下载不能使用(经常出现下载一半的现象),可以在以下链接下载:http://download.csdn.net/source/160366
      

  3.   

    <href=http://download.csdn.net/source/160366>Lucene中文分词器 V1.1 CSDN下载</href><href=http://groups-beta.google.com/group/SegWord/web/IKAnalyzer.jar>Lucene中文分词器 V1.1 Google 下载</href>
      

  4.   

    新版本V1.2已经发布
    1.优化词典
    2.优化对人名,公司名,未知词汇切分
    <href=http://download.csdn.net/source/160428>Lucene中文分词器 V1.2 CSDN下载</href><href=http://groups-beta.google.com/group/SegWord/web/IKAnalyzer.jar>Lucene中文分词器 V1.2 Google 下载</href>
      

  5.   

    最新V1.3版分词器,已更新。1.优化数词切分
    2.优化算法效率下载地址:
    Lucene中文分词器 V1.3 CSDN下载Lucene中文分词器 V1.3 Google下载
      

  6.   

    最新V1.4版分词器,已更新。
    1.修订特定情况下数量词切分造成指针越界异常的BUG
    2.进一步优化算法效率
    3.优化词典
    4.对英文和数词改为分割处理
    下载地址:
    Lucene中文分词器 V1.4CSDN下载Lucene中文分词器 V1.4 Google下载