項目簡要:關於java web的一個項目,用的Spring MVCd 框架。鑑於參與這次項目的人中並非所人都作的Spring,爲了可以提升效率,建議你們是先拋開SPring來寫本身負責的模塊,最後再把各個模塊在Spring裏面集成。java
項目裏有一個文本分析的模塊是一個同窗用hanlp寫的,因爲在最後集成的時候直接使用maven添加的依賴,但最終測試時沒法經過。後經分析發現她坐了實體識別,是本身改了hanlp的詞典,手動加了不少詞,並且在後期版本的迭代中還有可能繼續改了hanlp的詞典,這就意味着不能用maven直接導入倉庫裏的包了,只有將修改後的data文件放到本地,而後指定路徑給hanlp。web
網上有一些解決的方法,但都是在項目部署的時候,把hanlp的詞典數據放到服務器上一個固定位置上,而後再配置hanlp的配置文件,指定一個固定位置。這種方法雖然比較直接,可是並不可以把hanlp的詞典數據與整個項目打包到一塊兒,後期的管理也比較麻煩。假若把數據直接做爲項目的資源文件,部署到Tomcat上後不管怎麼在配置裏寫路徑都會提示找不到詞典文件。spring
在分析了HanLP的issue以後,發現這個項目支持自定義讀寫文件的IO類。在一個將詞典數據放到HDFS上的一個blog啓發下,嘗試經過重寫一個IOAdapter類,使用讀寫靜態資源文件的方法讀取詞典數據了,這樣不就能夠把data跟項目打包到一塊兒了。服務器
代碼以下:框架
1| package com.car.util.nlp;maven
2|ide
3| import com.hankcs.hanlp.corpus.io.IIOAdapter;測試
4| import org.springframework.core.io.ClassPathResource;spa
5| import java.io.*;.net
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