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

[经验分享] solr anjl整合

[复制链接]

尚未签到

发表于 2016-12-15 09:02:09 | 显示全部楼层 |阅读模式
mlcsseg下载:
  https://github.com/mlcsdev/mlcsseg/tree/4.7
   
  mlcsseg使用说明:
  http://mlcsdev.iyunv.com/blog/2037109
 
ansj中文分词下载:
  https://github.com/ansjsun/ansj_seg
  参考文章:
  http://www.abyssss.com/?p=62
   
        由于ansj不支持solr,所以选择了使用mlcsseg封装包,目前mlcsseg版本是4.7,支持ansj版本是1.4,所以如果你需要使用ansj的最新版本2.0,需要自己修改一下.

        mlcsseg项目总共包含4个子项目,由于ik我没用到,所以pom里面可以考虑去除,最后就剩下3个项目

<module>mlcsseg-common</module>
<module>mlcsseg-filter</module>
<module>mlcsseg-ansj</module>
        在这三个项目里面,需要这样调整一下(调整只是稍微测试了一下,还不知道改得有没有问题)
         1.mlcsseg-ansj的pom修改

<version>1.4</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/ansj_seg-1.4-min.jar</systemPath>
修改为
<version>2.0.6</version>
<!------------------------------------------------------------------------->
<version>1.3</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/tree_split-1.3.jar</systemPath>
修改为
<version>1.4</version>
   
         2.mlcsseg-ansj项目中AnsjTokenizerFactory.update方法修改如下:
   

UserDefineLibrary.loadLibrary(inputStreams);
修改为
UserDefineLibrary.loadLibrary(UserDefineLibrary.FOREST, path);
   
   
          3.mlcsseg-common项目中ReloaderRegister.loadAndUpdate方法修改如下:
         

if (!dicts.isEmpty()){
List<InputStream> insFromLoader = new ArrayList<InputStream>(dicts.size());
for(String dictName : dicts){
try{
insFromLoader.add(loader.openResource(dictName));
}catch(IOException e){
System.out.println("missing dict source : " + dictName);
}
}
reloadFactory.update(insFromLoader);
System.out.println("reload finish! " + dicts);
}
//---------------------------------------------------------------------------
//以上代码修改为下面的代码
if (!dicts.isEmpty()){
for(String dictPath : dicts){
reloadFactory.update(dictPath);
System.out.println("reload finish! " + dictPath);
}
}
   
          代码修改完成后,maven install一下,把jar包:tree_split-1.4.jar,nlp-lang-0.2.jar,ansj_seg-2.0.6.jar,mlcsseg-common-4.6.0-SNAPSHOT.jar,mlcsseg-filter-4.6.0-SNAPSHOT.jar,mlcsseg-ansj-4.6.0-SNAPSHOT.jar放入你的solr web项目WEB-INF/lib文件夹中



        4.在mlcsseg项目中有test1和test2文件夹,test1为ik的配置,可以不用,我们选用test2文件夹,找到ansj.conf文件files的值修改为词库的路径(原先是词库的具体文件名,现在修改为路径),可以扩展自己的词库
   
          5.把test2文件夹中的conf文件夹,copy到上篇文章中提到的new_core中(直接覆盖)
          6.ansj_seg-master项目中(即ansj项目),把library文件夹copy到上篇文章中提到的new_core中
          7.ansj_seg-master项目中,把library.properties文件复制到你的solr web项目WEB-INF/classes中,同时修改ambiguityLibrary和userLibrary的词库路径(指上一点中提到的library路径)
          至此,配置算是完成了,重启一下resin(希望没有遗漏什么要点,因为都是跑通后,重新回忆补上文档的)
  ansj分词效果
       DSC0000.png
  不是ansj的分词效果
DSC0001.png
 

  特别注意:以上所有的操作都是初试而已
  测试代码:

//增加新词
/*
String nature = "aaaaa";
String str = "上海电力2012年财务报表如下怎爸爸去哪儿么办";
UserDefineLibrary.insertWord("怎爸爸去哪儿", nature, 2000);
UserDefineLibrary.insertWord("爸爸去哪", nature, 2000);
String[] paramers = new String[2];
paramers[0] = nature;
paramers[1] = String.valueOf(2000);
Value value = new Value(newWord, paramers);
Library.insertWord(UserDefineLibrary.FOREST, value);
*/
String str = "北京好药师大药房连锁有限公司";
//String newWord =  "北京好药师";
//String nature = "111";
/*
String[] paramers = new String[2];
paramers[0] = nature;
paramers[1] = String.valueOf(2000);
Value value = new Value(newWord, paramers);
Library.insertWord(UserDefineLibrary.FOREST,value);
*/
String path = "/home/resin/data/jsp/solr.ehaoyao.com/WebRoot/cores/multicore/new_core/conf/extDic.txt";
UserDefineLibrary.loadLibrary(UserDefineLibrary.FOREST, path);
//Value value2 = new Value("好药师", "222", "1000");
//Library.insertWord(UserDefineLibrary.FOREST, value2);
//Value value = new Value("北京好药师", "111", "1000");
//Library.insertWord(UserDefineLibrary.FOREST, value);
out.println(ToAnalysis.parse(str));
//out.println("<br/>");
//out.println(UserDefineAnalysis.parse(str));
  或者 直接看ansj项目中的测试类
  /ansj_seg-master/src/test/java/org/ansj/test/UserDefinedAnalysisTest.java
  不过这里还有个疑问 为什么我在词库中添加 “北京好药师” “好药师” 这两个词 按理分词后应该会出现这两个,但是实际上不会,只会出现“北京好药师”这个词,不明白为什么

运维网声明 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-314492-1-1.html 上篇帖子: solr问题整理 下篇帖子: solr schema.xml是否有BigDecimalField? 我们探索下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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