solr4.8中集成mmseg4j1.9.1
要想在Solr中整合mmseg4j其实很容易,只需要如下几个步骤
1、下载(https://code.google.com/p/mmseg4j/downloads/list)并解压mmseg4j-1.9.1.zip,把dist下面的所有jar文件拷贝到你应用服务器下的solr/WEB-INF/lib中。(如果你的应用服务器下面没有solr,请参考《Tomcat中安装Solr》)。
有3个jar文件:mmseg4j-analysis-1.9.1.jar, mmseg4j-core-1.9.1.jar,mmseg4j-solr-1.9.1.jar。
顺便提下,如果是在mmseg4j-1.9.0前,则需要copy data目录到solr_home/solr中(与core平级),并改名为dic。进入到你想使用mmseg4j分词器的core中(此处以solr自带的collection1为例),用编辑器打开collection1/conf/schema.xml配置文件,添加如下代码:
- <!-- mmseg4j分词器 -->
- <fieldType name="text_mmseg4j" class="solr.TextField" >
- <analyzer type="index">
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="../dic" /><!--此处为分词器词典所处位置-->
- </analyzer>
- <analyzer type="query">
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="../dic" /><!--此处为分词器词典所处位置-->
- </analyzer>
- </fieldType>
2、在mmseg4j-1.9.0后,如本例的mmseg4j-1.9.1中,就 可以不用 dicPath 参数,可以使用 mmseg4j-core-1.9.0.jar 里的 words.dic ,在Schema.xml中加入如下配置
- <!-- mmseg4j-->
- <fieldType name="text_mmseg4j_complex" class="solr.TextField" positionIncrementGap="100" >
- <analyzer>
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="complex" dicPath="dic"/>
- </analyzer>
- </fieldType>
- <fieldType name="text_mmseg4j_maxword" class="solr.TextField" positionIncrementGap="100" >
- <analyzer>
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="max-word" dicPath="dic"/>
- </analyzer>
- </fieldType>
- <fieldType name="text_mmseg4j_simple" 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"/>
- -->
- <tokenizer class="com.chenlb.mmseg4j.solr.MMSegTokenizerFactory" mode="simple" dicPath="dic"/>
- </analyzer>
- </fieldType>
- <!-- mmseg4j-->
3、引用mmseg4j分词器
只需要在该schema.xml中加入如下配置便可引用对应的mmseg4j分词器
- <field name="mmseg4j_complex_name" type="text_mmseg4j_complex" indexed="true" stored="true"/>
- <field name="mmseg4j_maxword_name" type="text_mmseg4j_maxword" indexed="true" stored="true"/>
- <field name="mmseg4j_simple_name" type="text_mmseg4j_simple" indexed="true" stored="true"/>
通过以上步骤就可以成功配置mmseg4j分词器到solr中了。
然后就可以打开Solr Admin的Page进行分词分析了。但当输入中文(华南理工大学)并点击“Analyse Values”进行分析时,会发现如下的错误: TokenStream contract violation: reset()/close() call missing, reset() called
multiple times, or subclass does not call super.reset(). Please see Javadocs of TokenStream class for more information about the correct consuming workflow.
该原因是源码的一个bug引起的,需要修改上面下载的mmseg4j-analysis-1.9.1.zip解压后的mmseg4j-analysis目录下的类:MMSegTokenizer.java,修改reset()方法并加上下面注释中的这一句“ super.reset(); ”
- public void reset() throws IOException {
- //lucene 4.0
- //org.apache.lucene.analysis.Tokenizer.setReader(Reader)
- //setReader 自动被调用, input 自动被设置。
- super.reset(); //加这一句
- mmSeg.reset(input);
- }
修改后运行mvn clean package -DskipTests进行打包得到最新的mmseg4j-analysis-1.9.1.jar 并替换Tomcat下的solr下的WEB-INF/lib下的mmseg4j-analysis-1.9.1.jar。
重新启动Tomcat并访问Solr Admin Page,并在“Analysis”中输入中文进行分析,可以看到已经成功的进行分析。
这样这个Bug就解决了。
另外,mmseg4j中文分词和庖丁中文分词的对比效果可以参照下面的结果,从结果可以看出,mmseg4j比起庖丁中文分词来说,是更好的选择。
paoding 几乎把所有的子词都拆出来,有时候还有最长的词,还没搞懂“华南理工大学”会分出“大”;mmseg4j 的 maxword 是在 complex分词后的结果再把子词都拆出来。
如“化装和服装” mmseg4j 的 complex是可以较好的分出来(“化装 | 和 | 服装”),而 paoding 少了字频的信息,比较难到这事。mmseg4j complex 也有个缺点:“都是先从容易的做起” 不能把“容易”分出来,这是因为 mmseg 算法是用 3 个chunk的原因,我认为把整句的 chunk (还是仅仅3个chunk)来处理的话,分词效果要好),当然要更多的开销,选3个可能是效果与性能平衡吧。
mmseg4j 没有加任何 stopword,这东西留给使用者自己加,因为我不认为加 stopword 是好的方法。如音乐搜索,给加上 the,this……,还能找到歌曲?
当然分词效果还与词库有关,sogou 的词库是统计得出,有些高频的单字组合也成了词,如“我们的”。如果还要提高 mmseg4j 的分词效果,还要在整理下词库。
mmseg4j中的词库:(强制使用 UTF-8):
- data/chars.dic 是单字与语料中的频率,一般不用改动,1.5版本中已经加到mmseg4j的jar里了,我们不需要关心它,当然你在词库目录放这个文件可以覆盖它。
- data/units.dic 是单字的单位,默认读jar包里的,你也可以自定义覆盖它,这个功能是试行,如果不喜欢它,可以用空的units.dic文件(放到你的词库目录下)覆盖它。
- data/words.dic 是词库文件,一行一词,当然你也可以使用自己的,1.5版本使用 sogou 词库,1.0的版本是用 rmmseg 自带的词库。
- data/wordsxxx.dic 1.6版支持多个词库文件,data 目录(或你定义的目录)下读到"words"前缀且".dic"为后缀的文件。如:data/words-my.dic。
- 由于 utf-8 文件有带与不带 BOM 之分,建议词库第一行为空行或为无 BOM 格式的 utf-8 文件。
solr4.8中集成mmseg4j1.9.1的更多相关文章
- Solr4.10.2集成Nutch1.9与自带UI界面使用
Solr4.10.2集成Nutch1.9与自带UI界面使用 一.Solr4.10.2与Nutch1.9集成 环境:Solr4.10.2已经配置在Tomcat上 Solr的Tomcat配置详见Solr4 ...
- solr服务中集成IKAnalyzer中文分词器、集成dataimportHandler插件
昨天已经在Tomcat容器中成功的部署了solr全文检索引擎系统的服务:今天来分享一下solr服务在海量数据的网站中是如何实现数据的检索. 在solr服务中集成IKAnalyzer中文分词器的步骤: ...
- [译]MVC网站教程(四):MVC4网站中集成jqGrid表格插件(系列完结)
目录 1. 介绍 2. 软件环境 3. 在运行示例代码之前(源代码 + 示例登陆帐号) 4. jqGrid和AJAX 5. GridSettings 6. ...
- 如何在 ASP.NET MVC 中集成 AngularJS(3)
今天来为大家介绍如何在 ASP.NET MVC 中集成 AngularJS 的最后一部分内容. 调试路由表 - HTML 缓存清除 就在我以为示例应用程序完成之后,我意识到,我必须提供两个版本的路由表 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(2)
在如何在 ASP.NET MVC 中集成 AngularJS(1)中,我们介绍了 ASP.NET MVC 捆绑和压缩.应用程序版本自动刷新和工程构建等内容. 下面介绍如何在 ASP.NET MVC 中 ...
- 如何在ios中集成微信登录功能
在ios中集成微信的登录功能有两种方法 1 用微信原生的api来做,这样做的好处就是轻量级,程序负重小,在Build Settings 中这样设置 然后设置 友盟的设置同上,但是要注意,加入你需要的所 ...
- 在Application中集成Microsoft Translator服务之开发前准备
第一步:准备一个微软账号 要使用Microsoft Translator API需要在Microsoft Azure Marketplace(https://datamarket.azure.com/ ...
- 在Abp中集成Swagger UI功能
在Abp中集成Swagger UI功能 1.安装Swashbuckle.Core包 通过NuGet将Swashbuckle.Core包安装到WebApi项目(或Web项目)中. 2.为WebApi方法 ...
- 如何在 ASP.NET MVC 中集成 AngularJS(1)
介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术.例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API 服务.另外,还有最新的数据库技术.最新 ...
随机推荐
- c#将DataTable内容导出为CSV文件
写了个类: class DataTableAndCSV { public static DataTable csvToDataTable(string file) { string strConn = ...
- 使用javah生成jni 头文件和使用ndk编译so库
1.jni 首先clean Project,在makeProject生成对应的class文件 然后点出命名框,输入命令: cd app/build/intermediates/classes/debu ...
- hdoj-3791-二叉搜索树(二叉搜索树模板题)
#include <cstring> #include <cstdio> #include <iostream> using namespace std; type ...
- nyoj-78-圈水池(Graham算法求凸包)
题目链接 /* Name:nyoj-78-圈水池 Copyright: Author: Date: 2018/4/27 9:52:48 Description: Graham求凸包 zyj大佬的模板, ...
- Django中ORM增删改查
新建模型 class Author(models.Model): nid = models.AutoField(primary_key=True) name=models.CharField( max ...
- 1150 Travelling Salesman Problem(25 分)
The "travelling salesman problem" asks the following question: "Given a list of citie ...
- curl获取图片
<?php set_time_limit(0); //执行30秒超时后继续执行 header("Content-type:text/html;charset=utf-8"); ...
- plsql Developer----plsql软件总结(待续更新)
如何查看数据库所有的表 打开pl/sql Developer连接上数据库了以后,在菜单 Tools 下面有个 Object browser 将其打勾(如果已经打勾了就不用管了),之后在IDE的左边有个 ...
- Weblogic-unable to get file lock, will retry …问题解决
weblogic部署应用出现如下报错: <2017-8-15 下午05时08分44秒 CST> <Info> <Management> <BEA-141281 ...
- dubbo的监控中心
监控中心实际上就是一个web工程. 是dubbo官方给我们提供的一个war包. 只需要部署在Tomcat中就可以了. 推荐把监控中心与注册中心部署在一台服务器上,这样可以不需要任何配置. 部署完成后直 ...