我的日常

登录/注册
您现在的位置:论坛 资料库 开源社区 > Solr4.10如何配置IK扩展词/自定义词库
总共48087条微博

动态微博

查看: 8633|回复: 1

Solr4.10如何配置IK扩展词/自定义词库

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2014-11-04 11:04:11 |只看该作者 |倒序浏览
    一:首先在solr目录WEB—INF下新建classes文件夹 默认情况下不存在此文件 然后将 IK Analyzer 2012FF_hf1.zip 解压 把IKAnalyzer.cfg.xml拷贝到classes目录下。
    二:修改IKAnalyzer.cfg.xml
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">  
    3. <properties>  
    4.         <comment>IK Analyzer 扩展配置</comment>
    5.         <!--用户可以在这里配置自己的扩展字典 如果您是你想分多个扩展词文件,只需要用分号隔开
    6.         <entry key="ext_dict">ext.dic;</entry>
    7.         -->
    8.         <!--用户可以在这里配置自己的扩展停止词字典-->
    9.         <entry key="ext_stopwords">stopword.dic;</entry>
    10. </properties>
    复制代码

    三:将ext.dic 跟IKAnalyzer.cfg.xml 放到同一目录下(ext.dic文件中第一行为空行,之后每行放一个词,词典文件的编辑与部署
    分词器的词典文件格式是无BOM 的UTF-8 编码的中文文本文件,你可以选用Notepad工具设置格式以UTF-8无BOM格式编码然后保存即可)
    这里设置分词为秋瓷炫。
    配置前测试结果:


    四:重启solr
    配置后测试结果:

    测试源码下载: IK扩展分词测试成功.zip (1.11 MB, 下载次数: 23, 售价: 2 IT币)




    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    本帖被以下淘专辑推荐:

    • · solr|主题: 8, 订阅: 0
    admin    

    1244

    主题

    544

    听众

    1万

    金钱

    管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    沙发
    发表于 2014-11-04 11:09:51 |只看该作者
    附录: IK分词处理过程

    IK的整个分词处理过程首先,介绍一下IK的整个分词处理过程:

    1. Lucene的分词基类是Analyzer,所以IK提供了Analyzer的一个实现类IKAnalyzer。首先,我们要实例化一个IKAnalyzer,它有一个构造方法接收一个参数isMaxWordLength,这个参数是标识IK是否采用最大词长分词,还是采用最细粒度切分两种分词算法。实际两种算法的实现,最大词长切分是对最细粒度切分的一种后续处理,是对最细粒度切分结果的过滤,选择出最长的分词结果。

    2. IKAnalyzer类重写了Analyzer的tokenStream方法,这个方法接收两个参数,field name和输入流reader,其中filed name是Lucene的属性列,是对文本内容进行过分词处理和创建索引之后,索引对应的一个名称,类似数据库的列名。因为IK仅仅涉及分词处理,所以对field name没有进行任何处理,所以此处不做任何讨论。

    3. tokenStream方法在Lucene对文本输入流reader进行分词处理时被调用,在IKAnalyzer的tokenStream方法里面仅仅实例化了一个IKTokenizer类,该类继承了Lucene的Tokenizer类。并重写了incrementToken方法,该方法的作用是处理文本输入流生成token,也就是Lucene的最小词元term,在IK里面叫做Lexeme。

    4. 在IKtokenizer的构造方法里面实例化了IK里面最终要的分词类IKSegmentation,也称为主分词器。它的构造方法接收两个参数,reader和isMaxWordLength。

    5. IKsegmentation的构造方法里面,主要做了三个工作,创建上下文对象Context,加载词典,创建子分词器。

    6. Contex主要是存储分词结果集和记录分词处理的游标位置。

    7. 词典是作为一个单例被创建的,主要有量词词典、主词典和停词词典。词典是被存储在字典片段类DictSegment 这个字典核心类里面的。DictSegment有一个静态的存储结构charMap,是公共词典表,用来存储所有汉字,key和value都是一个中文汉字,目前IK里面的charMap大概有7100多的键值对。另外,DictSegment还有两个最重要的数据结构,是用来存储字典树的,一个是DictSegment的数组childrenArray,另一个是key为单个汉字(每个词条的第一个汉字),value是DictSegment的HashMap childrenMap。这两个数据结构二者取其一,用来存储字典树。

    8. 子分词器才是真正的分词类,IK里面有三个子分词器,量词分词器,CJK分词器(处理中文),停词分词器。主分词器IKSegmentation遍历这三个分词器对文本输入流进行分词处理。

    9. IKTokenizer的incrementToken方法调用了IKSegmentation的next方法,next的作用是获得下一个分词结果。next在第一次被调用的时候,需要加载文本输入流,并将其读入buffer,此时便遍历子分词器,对buffer种的文本内容进行分词处理,然后把分词结果添加到context的lexemeSet中。
    回复

    使用道具 举报

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表