Spring MVCD框架中調用HanLP分詞的方法

項目簡要:關於java web的一個項目,用的Spring MVCd 框架。鑑於參與此次項目的人中並不是所人都做的Spring,爲了能夠提高效率,建議大家是先拋開SPring來寫自己負責的模塊,最後再把各個模塊在Spring裏面集成。
項目裏有一個文本分析的模塊是一個同學用hanlp寫的,由於在最後集成的時候直接使用maven添加的依賴,但最終測試時無法通過。後經分析發現她坐了實體識別,是自己改了hanlp的詞典,手動加了很多詞,而且在後期版本的迭代中還有可能繼續改了hanlp的詞典,這就意味着不能用maven直接導入倉庫裏的包了,只有將修改後的data文件放到本地,然後指定路徑給hanlp。
網上有一些解決的方法,但都是在項目部署的時候,把hanlp的詞典數據放到服務器上一個固定位置上,然後再配置hanlp的配置文件,指定一個固定位置。這種方法雖然比較直接,但是並不能夠把hanlp的詞典數據與整個項目打包到一起,後期的管理也比較麻煩。倘若把數據直接作爲項目的資源文件,部署到Tomcat上後無論怎麼在配置裏寫路徑都會提示找不到詞典文件。
在分析了HanLP的issue之後,發現這個項目支持自定義讀寫文件的IO類。在一個將詞典數據放到HDFS上的一個blog啓發下,嘗試通過重寫一個IOAdapter類,使用讀寫靜態資源文件的方法讀取詞典數據了,這樣不就可以把data跟項目打包到一起了。
代碼如下:
1| package com.car.util.nlp;
2|
3| import com.hankcs.hanlp.corpus.io.IIOAdapter;
4| import org.springframework.core.io.ClassPathResource;
5| import java.io.*;
6|
7| public class ResourcesFileIoAdapter implements IIOAdapter{
8| @Override
9| public InputStream open(String path) throws IOException {
10| ClassPathResource resource = new ClassPathResource(path);
11| InputStream is = new FileInputStream(resource.getFile());
12| return is;
13| }
14| @Override
15| public OutputStream create(String path) throws IOException{
16| ClassPathResource resource = new ClassPathResource(path);
17| OutputStream os = new
18| FileOutputStream(resource.getFile());
19| return os;
20| }
21| }

整好了之後把data文件夾和hanlp.properties放到項目的資源文件夾裏,在配置文件裏修改一下路徑和IOAdapte:
1| root=
2|
3| IOAdapte=com.car.util.nlp.ResourcesFileIoAdapter

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