设为首页 收藏本站
查看: 733|回复: 0

[经验分享] solr 中文分词相关(转载)

[复制链接]

尚未签到

发表于 2017-12-19 10:44:54 | 显示全部楼层 |阅读模式
  smartcn和ik的对比,来自http://www.cnblogs.com/hadoopdev/p/3465556.html
  一、引言:
  中文分词一直是自然语言处理的一个痛处,早在08年的时候,就曾经有项目涉及到相关的应用(Lunce构建全文搜索引擎),那时的痛,没想到5年后的今天依然存在,切分效果、扩展支持、业务应用等方面依然不甚理想。收费的版本不提了,原因自不必言表,开源版本中,发现之前曾经活跃的版本,大多已经没落(好几年没更新了),存活下来的寥寥无几。我是一个守旧的人,评估版本的选择有些保守,至少目前为止,只看1.0正式版本之后的版本,0.XX的不在考虑范围之内,用了一个周末的时间,对比了十多款的样子,个人感觉源于中科院ICTCLAS的smartcn和IKAnanlyzer效果还是不错的。
  二、结果对比
  2.1 原始文本
  "lucene\分析器\使用\分词器\和\过滤器\构成\一个\"管道",文本\在\流经\这个\管道\后\成为\可以\进入\索引\的\最小单位,因此,一个\标准\的分析器有两个部分组成,一个是分词器tokenizer,它用于将文本按照规则切分为一个个可以进入索引的最小单位。另外一个是TokenFilter,它主要作用是对切出来的词进行进一步的处理(如去掉敏感词、英文大小写转换、单复数处理)等。lucene中的Tokenstram方法首先创建一个tokenizer对象处理Reader对象中的流式文本,然后利用TokenFilter对输出流进行过滤处理";
  2.2 smartcn
  lucen\分析器\使用\分词\器\和\过滤器\构成\一个\管道\文本\流经\这个\管道\后\成为\可以\进入\索引\最\小\单位\因此\一个\标准\分析器\有\两\个\部分\组成\一个\分词\器\token\它\用于\将\文本\按照\规则\切分\为\一个\个\可以\进入\索引\最\小\单位\另外\一个\tokenfilt\它\主要\作用\对\切\出来\词\进行\进一步\处理\如\去掉\敏感\词\英文\大小写\转换\单\复数\处理\等\lucen\中\tokenstram\方法\首先\创建\一\个\token\对象\处理\reader\对象\中\式\文本\然后\利用\tokenfilt\对\输出\进行\过滤\处理\
  2.3 IKanalyzer
  lucene\分析器\分析\器使\使用\分词器\分词\器\和\过滤器\过滤\滤器\构成\一个\一\个\管道\文本\在\流经\这个\管道\后\成为\可以\进入\索引\的\最小\单位\因此\一个\一\个\标准\的\分析器\分析\器\有\两个\两\个\部分\分组\组成\一个是\一个\一\个\是\分词器\分词\器\tokenizer\它用\用于\将\文本\按照\规则\切分\切\分为\一个个\一个\一\个个\个\个\可以\进入\索引\的\最小\单位\另外\一个是\一个\一\个\是\tokenfilter\它\主要\作用\用是\对\切出来\切出\切\出来\的\词\进行\行进\进一步\进一\一步\一\步\的\处理\如\去掉\敏感\词\英文\大小写\大小\小写\转换\单\复数\处理\等\lucene\中\的\tokenstram\方法\首先\创建\一个\一\个\tokenizer\对象\处理\reader\对象\中\的\流式\文本\然后\利用\tokenfilter\对\输出\流进\进行\过滤\处理\
  我的选择:虽然IK有很多碎片,但是可以提高查询的准确率。碎片带来的效果就是,需要占用更大的空间。最终仍然选择IK,原因如下:
  比如我输入"北京市美食",如果使用smartcn,将会分词为"北京市""美食",那么如果文档中存储的是"北京美食"就查询不到了。
  以下介绍solr 5.X版本中IK的配置,来自http://www.cnblogs.com/zhangweizhong/p/5593909.html
  1. 首先,下载IKAnalyzer ,下载
  注意:以前老的IK 不支持Solr 5.3的版本,请注意下载最新的。
  2. 将ik的相关文件拷贝到 webapps\solr\WEB-INF\lib 目录下
  3. 在 solr_home\mycore1\conf\schema.xml 增加如下配置
  <!-- 我添加的IK分词 -->
  <fieldType name="text_ik"class="solr.TextField">   
  <analyzer type="index" isMaxWordLength="false"class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
  <analyzer type="query" isMaxWordLength="true"class="org.wltea.analyzer.lucene.IKAnalyzer"/>   
  </fieldType>
  同时,把需要分词的字段,设置为text_ik,
  <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="name" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="category" type="int" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="content" type="text_ik" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="price" type="double" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="color" type="string" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="orderBy" type="int" indexed="true" stored="true" required="true" multiValued="false" />
  <field name="updatetime" type="date" indexed="true" stored="true" required="true" multiValued="false" />
  4. 重启服务
  注意:如果之前已经创建了索引,需要将之前的索引删掉,重新创建分词后的索引。
  5. 在admin后台, analysis 下查看分词效果
  1. 中文分词效果
  2. 索引查询效果
  6. 配置IKAnalyzer分词器的扩展词典,停止词词典
  1. 将文件夹下的IKAnalyzer.cfg.xml , ext.dic和stopword.dic 三个文件 复制到/webapps/solr/WEB-INF/classes 目录下,并修改IKAnalyzer.cfg.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>
  2. 在ext.dic 里增加自己的扩展词典,例如,婴儿奶粉3段
  注意:  记得将stopword.dic,ext.dic的编码方式为UTF-8 无BOM的编码方式。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-425648-1-1.html 上篇帖子: solr之functionQuery(函数查询)【转】 下篇帖子: solr-6.4.2安装+分词器配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表