solr anjl整合

mlcsseg下載:

https://github.com/mlcsdev/mlcsseg/tree/4.7

 

mlcsseg使用說明:

http://mlcsdev.iteye.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分詞效果

    

不是ansj的分詞效果

     
 

特別注意:以上所有的操作都是初試而已

 

測試代碼:

//增加新詞

/*
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

 

不過這裏還有個疑問 爲什麼我在詞庫中添加 “北京好藥師” “好藥師” 這兩個詞 按理分詞後應該會出現這兩個,但是實際上不會,只會出現“北京好藥師”這個詞,不明白爲什麼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章