java教程

java IKAnalyzer分词技术使用

位置:首页 > java教程 > java技巧,2016-06-27
说到IKAnalyzer,就得先回顾下,为什么要分词。因为搜索这种东西,不是像字符串查询那样,完全按照关键字去对比。比如有一往篇文章,我们要通过一个关键字来搜索

说到IKAnalyzer,就得先回顾下,为什么要分词。因为搜索这种东西,不是像字符串查询那样,完全按照关键字去对比。比如有一往篇文章,我们要通过一个关键字来搜索这篇文章的内容。首先,我们要对这个文章建立索引,怎么建立的,就是通过分词来建立的,分好词组以后。再通过关键字与每个分词的索引进行比对,有就是有,没得就找不到。如果分词没做好,比如:

在《地藏经》第十二品《见闻利益品》,说读经的时候、没有记忆力

我们用IK分词,结果如下:

在|地藏经|藏经|第|十二|品|见闻|见|闻|利益|品|说|读经|的|时候|没有|有|记忆力|记忆|力|

如果我们输入“地藏”两个字,那么结果就搜索不出来,所以分词对搜索来说,相当重要。

顺便把上面这个分词程序的代码贴出来:

 public static void main(String[] args) throws Exception {
        String text = "在《地藏经》第十二品《见闻利益品》,说读经的时候、没有记忆力";
        //手动添加词组
//        List<String> list = new ArrayList<String>();
//        list.add("地藏");
//        Dictionary.initial(DefaultConfig.getInstance());
//        Dictionary.getSingleton().addWords(list);


//创建分词对象
        Analyzer analyzer = new MyIKAnalyzer();
        StringReader reader = new StringReader(text);


        TokenStream ts = analyzer.tokenStream("", reader);
        CharTermAttribute term = ts.getAttribute(CharTermAttribute.class);
        //incrementToken() 之前必须要调用reset,不然会报错
        ts.reset();
        try {
            while(ts.incrementToken()){
                System.out.print(term.toString()+"|");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            reader.close();
        }
    }

由于IK自带的分词词组,不包含“地藏”两个字,我们可以通过代码来添加词组(如上面代码中注释的部分),也可以通过配置文件来实现,由于在android studio里面没有显示resources这个文件夹,要选择“project”来切换显示模式:

java IKAnalyzer分词技术使用(图1)

在这个文件下,加入IKAnalyzer.cfg.xml、stopword.dic、ext.dic。这三个文件,这个XML文件内容如下:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 
<properties> 
<comment>IK Analyzer 扩展配置</comment> 
<!--用户可以在这里配置自己的扩展字典 --> 
<entry key="ext_dict">ext.dic;</entry>
 <!--用户可以在这里配置自己的扩展停止词字典--> 
<entry key="ext_stopwords">stopword.dic;</entry>
 </properties>


也就是说 ext.dic是添加词组的地方,而stopword.dic是过虑关键字的地方(相当于屏蔽的意思),即我们只需要在ext.dic下加入“地藏”两个字即可。

TAGS:java IKAnalyzer分词

猜你喜欢

NewHot