Spring MVCD框架中呼叫HanLP分詞的方法

adnb34g發表於2019-07-10


專案簡要:關於 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

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31524777/viewspace-2650066/,如需轉載,請註明出處,否則將追究法律責任。

相關文章