solr 中文分词 mmseg4j 使用例子

版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原文出处, 即下面的声明.

原文出处:http://blog.chenlb.com/2009/04/solr-chinese-segment-mmseg4j-use-demo.html

mmseg4j 第一个版本就可以方便地与 solr 集成,在 google code 上面有简单的说明,第一版的发布博客也有简单的使用说明:中文分词 mmseg4j。为了更清楚说明在 solr 中使用 mmseg4j 中文分词,还是写篇博客吧。

目前有两个版本的 mmseg4j,1.7 版比较耗内存(一个词库目录就要 50M 左右),所以在默认jvm内存大小会抛出 OutOfMemoryErroy。我这里示例两个词库目录,所以不用目前最新版 1.7.2。而用 1.6.2 版。下载:mmseg4j-1.6.2 和 词库,或就下载一个源码包(包括了词库,从源码构建请看:中文分词 mmseg4j 1.7.2 版发布),把 mmseg4j-all-1.6.2.jar 放到 solr.home/lib 。

mmseg4j 在 solr 中主要支持两个参数:mode、dicPath。mode 表示是什么模式分词(有效值:simplex、complex、max-word,如果输入了无效的默认用 max-word。)。dicPath 是词库目录可以是绝对目录,也可以是相对目录(是相对 solr.home 目录下的,dic 就会在 solr.home/dic 目录下找词库文件),如果不指定就是默认在 CWD/data 目录(程序运行当前目录的data子目录)下找。

改 solr 配置文件,主要是修改 schema.xml,我添加三个 field type,如下:

  1. <fieldType name="textComplex" class="solr.TextField" positionIncrementGap="100" >
  2. <analyzer>
  3. <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>
  4. <filter class="solr.LowerCaseFilterFactory"/>
  5. </analyzer>
  6. </fieldType>
  7. <fieldType name="textMaxWord" class="solr.TextField" positionIncrementGap="100" >
  8. <analyzer>
  9. <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="dic"/>
  10. <filter class="solr.LowerCaseFilterFactory"/>
  11. </analyzer>
  12. </fieldType>
  13. <fieldType name="textSimple" class="solr.TextField" positionIncrementGap="100" >
  14. <analyzer>
  15. <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="n:/OpenSource/apache-solr-1.3.0/example/solr/my_dic"/>
  16. <filter class="solr.LowerCaseFilterFactory"/>
  17. </analyzer>
  18. </fieldType>
<fieldType name="textComplex" class="solr.TextField" positionIncrementGap="100" >  <analyzer>        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>      <filter class="solr.LowerCaseFilterFactory"/>  </analyzer> </fieldType> <fieldType name="textMaxWord" class="solr.TextField" positionIncrementGap="100" >   <analyzer>        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="dic"/>         <filter class="solr.LowerCaseFilterFactory"/>  </analyzer> </fieldType> <fieldType name="textSimple" class="solr.TextField" positionIncrementGap="100" >    <analyzer>        <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="n:/OpenSource/apache-solr-1.3.0/example/solr/my_dic"/>       <filter class="solr.LowerCaseFilterFactory"/>  </analyzer> </fieldType> 

说明:有多少不同的词库目录就会有多少个词库数组结构的实例,由上面的配置,会有两个实例。注意用 1.7.2 版会内存溢出。

定义几个字段:

  1. <field name="simple" type="textSimple" indexed="true" stored="true"/>
  2. <field name="complex" type="textComplex" indexed="true" stored="true"/>
  3. <field name="text" type="textMaxWord" indexed="true" stored="true"/>
<field name="simple" type="textSimple" indexed="true" stored="true"/> <field name="complex" type="textComplex" indexed="true" stored="true"/> <field name="text" type="textMaxWord" indexed="true" stored="true"/> 

再添加个 copyField(最后面加吧):

  1. <copyField source="text" dest="simple" />
  2. <copyField source="text" dest="complex" />
<copyField source="text" dest="simple" /> <copyField source="text" dest="complex" /> 

现在 mmseg4j 在 solr 中的使用配置好了。接下来安装 solr 到 tomcat。

solr 1.3 版早就出了,我就用它为示例的 solr。下载:solr-1.3.0,如:解压放到 N:/OpenSource/apache-solr-1.3.0。在 tomcat 中怎么安装 solr 请看:Solr 使用入门介绍,以搜索论坛帖子为示例, solr install , solr tomcat, solr on tomcat。

我是用 TOMCAT_HOME/conf/Catalina/localhost/solr.xml 的安装方式,指到 n:/OpenSource/apache-solr-1.3.0/example/solr。tomcat 6 可能没有这个目录,手动创建这目录。

启动 tomcat 可以看到 mmseg4j 的相关日志,然后在 http://localhost:8080/solr/admin/analysis.jsp 可以看 mmseg4j 的分词效果。在 Field 的下拉菜单选择 name,然后在应用输入 complex。分词的结果,如下图:

mmseg4j solr analysis 调试,点击放大

好了,可以运行起来了,那就添加个文档试下,在 n:/OpenSource/apache-solr-1.3.0/example/exampledocs 下创建 mmseg4j-solr-demo-doc.xml 文档:

  1. <add>
  2. <doc>
  3. <field name="id">1</field>
  4. <field name="text">京华时报2009年1月23日报道 昨天,受一股来自中西伯利亚的强冷空气影响,本市出现大风降温天气,白天最高气温只有零下7摄氏度,同时伴有6到7级的偏北风。</field>
  5. </doc>
  6. <doc>
  7. <field name="id">2</field>
  8. <field name="text">昨日金正日抵达长春市,进行两天的长春市内电话系统考察。</field>
  9. </doc>
  10. <doc>
  11. <field name="id">3</field>
  12. <field name="text">陈教授正在研究生命起源,他的研究生正在打球。</field>
  13. </doc>
  14. <doc>
  15. <field name="id">4</field>
  16. <field name="text">中国人民银行是中华人民共和国的中央银行。</field>
  17. </doc>
  18. </add>
<add>  <doc>         <field name="id">1</field>       <field name="text">京华时报2009年1月23日报道 昨天,受一股来自中西伯利亚的强冷空气影响,本市出现大风降温天气,白天最高气温只有零下7摄氏度,同时伴有6到7级的偏北风。</field>     </doc>    <doc>         <field name="id">2</field>       <field name="text">昨日金正日抵达长春市,进行两天的长春市内电话系统考察。</field>    </doc>    <doc>         <field name="id">3</field>       <field name="text">陈教授正在研究生命起源,他的研究生正在打球。</field>     </doc>    <doc>         <field name="id">4</field>       <field name="text">中国人民银行是中华人民共和国的中央银行。</field>  </doc> </add> 

然后提交到 solr,在 cmd 下运行 post.jar,如下:

N:\OpenSource\apache-solr-1.3.0\example\exampledocs>java -Durl=http://localhost:8080/solr/update -Dcommit=yes -jar post.jar mmseg4j-solr-demo-doc.xml
SimplePostTool: version 1.2
SimplePostTool: WARNING: Make sure your XML documents are encoded in UTF-8, other encodings are not currently supported
SimplePostTool: POSTing files to http://localhost:8080/solr/update..
SimplePostTool: POSTing file mmseg4j-solr-demo-doc.xml
SimplePostTool: COMMITting Solr index changes..

注意:mmseg4j-solr-demo-doc.xml 要是 UTF-8 格式,不然提交后会乱码。

看下是否有数据:http://localhost:8080/solr/select/?q=*:*,有数据,应该正常。

然后,找“西伯利亚”.

simple:http://localhost:8080/solr/select?indent=on&q=simple:%E8%A5%BF%E4%BC%AF%E5%88%A9%E4%BA%9A&hl=on&hl.fl=simple%2Ccomplex%2Ctext&fl=id,结果如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <response>
  3. <lst name="responseHeader">
  4. <int name="status">0</int>
  5. <int name="QTime">0</int>
  6. <lst name="params">
  7. <str name="fl">id</str>
  8. <str name="indent">on</str>
  9. <str name="q">simple:西伯利亚</str>
  10. <str name="hl.fl">simple,complex,text</str>
  11. <str name="hl">on</str>
  12. </lst>
  13. </lst>
  14. <result name="response" numFound="0" start="0"/>
  15. <lst name="highlighting"/>
  16. </response>
<?xml version="1.0" encoding="UTF-8"?> <response>  <lst name="responseHeader">  <int name="status">0</int>  <int name="QTime">0</int>  <lst name="params">   <str name="fl">id</str>   <str name="indent">on</str>   <str name="q">simple:西伯利亚</str>   <str name="hl.fl">simple,complex,text</str>   <str name="hl">on</str>  </lst> </lst> <result name="response" numFound="0" start="0"/> <lst name="highlighting"/> </response> 

comlex:http://localhost:8080/solr/select?indent=on&q=complex:%E8%A5%BF%E4%BC%AF%E5%88%A9%E4%BA%9A&hl=on&hl.fl=simple%2Ccomplex%2Ctext&fl=id,结果如:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <response>
  3. <lst name="responseHeader">
  4. <int name="status">0</int>
  5. <int name="QTime">0</int>
  6. <lst name="params">
  7. <str name="fl">id</str>
  8. <str name="indent">on</str>
  9. <str name="q">complex:西伯利亚</str>
  10. <str name="hl.fl">simple,complex,text</str>
  11. <str name="hl">on</str>
  12. </lst>
  13. </lst>
  14. <result name="response" numFound="1" start="0">
  15. <doc>
  16. <str name="id">1</str>
  17. </doc>
  18. </result>
  19. <lst name="highlighting">
  20. <lst name="1">
  21. <arr name="complex">
  22. <str>京华时报2009年1月23日报道 昨天,受一股来自中<em>西伯利亚</em>的强冷空气影响,本市出现大风降温天气,白天最高气温只有零下7摄氏度,同时伴有6到7级的偏北风。</str>
  23. </arr>
  24. </lst>
  25. </lst>
  26. </response>
<?xml version="1.0" encoding="UTF-8"?> <response>  <lst name="responseHeader">  <int name="status">0</int>  <int name="QTime">0</int>  <lst name="params">   <str name="fl">id</str>   <str name="indent">on</str>   <str name="q">complex:西伯利亚</str>   <str name="hl.fl">simple,complex,text</str>   <str name="hl">on</str>  </lst> </lst> <result name="response" numFound="1" start="0">  <doc>   <str name="id">1</str>  </doc> </result> <lst name="highlighting">  <lst name="1">   <arr name="complex">  <str>京华时报2009年1月23日报道 昨天,受一股来自中<em>西伯利亚</em>的强冷空气影响,本市出现大风降温天气,白天最高气温只有零下7摄氏度,同时伴有6到7级的偏北风。</str>   </arr>  </lst> </lst> </response> 

text(其实是 max-word):http://localhost:8080/solr/select?indent=on&q=text:%E8%A5%BF%E4%BC%AF%E5%88%A9%E4%BA%9A&hl=on&hl.fl=simple%2Ccomplex%2Ctext&fl=id,结果:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <response>
  3. <lst name="responseHeader">
  4. <int name="status">0</int>
  5. <int name="QTime">15</int>
  6. <lst name="params">
  7. <str name="fl">id</str>
  8. <str name="indent">on</str>
  9. <str name="q">text:西伯利亚</str>
  10. <str name="hl.fl">simple,complex,text</str>
  11. <str name="hl">on</str>
  12. </lst>
  13. </lst>
  14. <result name="response" numFound="1" start="0">
  15. <doc>
  16. <str name="id">1</str>
  17. </doc>
  18. </result>
  19. <lst name="highlighting">
  20. <lst name="1">
  21. <arr name="text">
  22. <str>京华时报2009年1月23日报道 昨天,受一股来自中<em>西</em><em>伯利亚</em>的强冷空气影响,本市出现大风降温天气,白天最高气温只有零下7摄氏度,同时伴有6到7级的偏北风。</str>
  23. </arr>
  24. </lst>
  25. </lst>
  26. </response>

下面是NGramTokenizerFactory分词设置

NGramTokenizerFactory
 <fieldType name="text" class="solr.TextField"  positionIncrementGap="100">      <analyzer type="index" >        <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="2"/>        <filter class="solr.LowerCaseFilterFactory"/>      </analyzer>      <analyzer type="query"  >        <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="2"/>            <filter class="solr.LowerCaseFilterFactory"/>      </analyzer>    </fieldType>

转载于:https://www.cnblogs.com/likwo/archive/2010/01/25/1656090.html

solr 中文分词 mmseg4j 使用例子 ,NGramTokenizerFactory相关推荐

  1. Apache Solr 中文分词

    中文分词 (Chinese Word Segmentation) 指的是将一个汉字序列切分成一个一个单独的词.分词就是将连续的字序列按照一定的规范重新组合成词序列的过程.我们知道,在英文的行文中,单词 ...

  2. solr 中文分词器IKAnalyzer和拼音分词器pinyin

    solr分词过程: Solr Admin中,选择Analysis,在FieldType中,选择text_en 左边框输入 "冬天到了天气冷了小明不想上学去了",点击右边的按钮,发现 ...

  3. Solr - 中文分词器IK Analyzer的简介及配置

    简介 IK Analyzer 是一个开源的,基于 java 语言开发的轻量级的中文分词工具包.它是以开源项目Luence 为应用主体的,结合词典分词和文法分析算法的中文分词组件,IK 实现了简单的分词 ...

  4. solr 中文分词mmeseg4j与ik analyzer效果对比

    摘要: 之前用solr6成功集成了中文分词mmeseg4j,也顺利整合了ik analyzer,对比一下他们分词的效果. 1884年,中法战争时被派福建会办海疆事务. ik analyzer:1884 ...

  5. Solr 3.5:配置mmseg4j同义词(已经配置好中文分词)

    2019独角兽企业重金招聘Python工程师标准>>> 前提,已经安装配置好Tomcat8与Solr3.5,并且配置好mmseg4j中文分词 1.修改 conf/schema.xml ...

  6. 给solr配置中文分词器

    Solr的中文分词器 中文分词在solr里面是没有默认开启的,需要我们自己配置一个中文分词器. 目前可用的分词器有smartcn,IK,Jeasy,庖丁.其实主要是两种,一种是基于中科院ICTCLAS ...

  7. 1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入

    一.下载solr,下载地址是:http://archive.apache.org/dist/lucene/solr/,选择自己想要的solr的版本,本项目使用的版本是4.10.3 二.如果想下载Luc ...

  8. Solr4.3整合到Tomcat中并添加MMSeg4j中文分词器

    2019独角兽企业重金招聘Python工程师标准>>> Solr4.3整合到Tomcat中并添加MMSeg4j中文分词器 1.新建一个文件夹命名为Solr并在里面建两个文件夹分别命名 ...

  9. SOLR配置默认的一元分词与安装主流的中文分词扩展

    引言:SOLR用的好不好,分词是关键,分词分的好不好,词库是关键.没有完美的分词和词库,只有更适合你网站的分词和词库. 目前网络上主流的SOLR分词模块: 1.庖丁分词:PAODING 参考地址:ht ...

最新文章

  1. python3基础知识点_入门Python3基础教程-知识点摘要
  2. CODEVS 1205 单词反转
  3. 一、创建Assetbundle 在unity3d开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新。
  4. [Github项目推荐] 机器学习 Python 知识点速查表
  5. 【华为云技术分享】【昇腾】【玩转Atlas200DK系列】基于Pycharm专业版构建开发板python开发运行环境
  6. pythonguitkinter编程入门_Python Tkinter GUI编程入门介绍
  7. 知识融合(实体对齐)笔记
  8. MTK如何烧录IMEI码(俗称串号)
  9. css磨砂效果背景和特殊背景
  10. 网站怎么移动适配?这些小技巧你必须要会
  11. Python调用图灵机器人
  12. 干涉光强公式怎么计算_光强及计算
  13. PLUS模型教程2:数据前期准备和土地利用数量预测
  14. ORBSLAM论文翻译
  15. 创投日报:3月28日收录投融资项目19起
  16. 小程序快速生成朋友圈海报分享图
  17. GS108E+GS105E+TP-LINK TL-WDR5620实现联通家庭宽带IPTV单线复用教程
  18. 别翻了,Lambda 表达式入门,看这篇就够了
  19. IntelliJ Idea --- 翻译插件Translation
  20. arcgis图斑尖角检查_arcgis 定位图斑,并且高亮显示

热门文章

  1. 74ls390设计任意进制计数器_利用数字频率合成技术设计高速任意波形发生器(上)...
  2. css 旋转 animation动画
  3. expected at least 1 bean which qualifies as autowire candidate for this dependency
  4. ajax获得excel文件流在前端打开_Javascript前端开发:jsonp的原理你真的懂吗?
  5. 嵌入式linux opengl6,利用winSSHD实现Windows和Linux间的文件互传
  6. 沃特玛采集均衡模块_云原生在京东丨云原生时代下的监控:如何基于云原生进行指标采集?...
  7. java innerexception_java – 为什么使用反射访问外部类的私有成员抛出IllegalAccessException?...
  8. float gpu 加速_Javascript如何实现GPU加速?
  9. mybatisplus多表关联查询_ET工具_KETTLE多表关联
  10. python3.9新特性_Python3.9又更新了:dict内置新功能