自然語言處理工具包 HanLP在 Spring Boot中的應用
輕鬆搞定Java中的分詞、文字推薦、關鍵字提取等自然語言處理問題
本文共 782字,閱讀大約需要 2分鐘 !
概 述
ofollow,noindex">HanLP 是基於 Java開發的 NLP工具包,由一系列模型與演算法組成,目標是普及自然語言處理在生產環境中的應用。而且 HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點,因此十分好上手,本文就結合 Spring Boot來將 HanLP用起來!
注:本文首發於 My Personal Blog:CodeSheep·程式羊 ,歡迎光臨 小站
本文內容腦圖如下:
下載 HanLP資料和程式
由於 HanLP庫將資料與程式碼分離,因此我們需要分別下載所需資料和 jar包:
- 所需 data資料包下載地址為 data.zip
- 所需 jar包下載地址為 hanlp-release.zip
工程搭建
-
建立一個普通的 Spring Boot工程,不贅述
-
引入 HanLP資料 和 配置
下載完成以後,首先解壓 hanlp-release.zip
壓縮包,然後將解壓出的 HanLP的 jar包引入 Spring Boot工程,然後需要來放置 HanLP所需配置和資料:
-
將解壓後
hanlp-release.zip
壓縮包中的hanlp.properties
配置檔案置於專案的resources
資源目錄下 -
然後解壓
data.zip
壓縮包,將解壓出的 data目錄同樣至於resources
目錄下( data 中的資料包很重要,是 HanLP工作所需的詞典和模型 )
建立 IO介面卡
HanLP 提供了 IO介面卡,使用者可以實現其提供的 com.hankcs.hanlp.corpus.io.IIOAdapter
介面以在不同的平臺(HDFS、Redis等)上執行HanLP,預設的 IO介面卡 IOAdapter = com.hankcs.hanlp.corpus.io.FileIOAdapter
是基於普通檔案系統的。
接下來我們重寫一下 IOAdapter
類,使用讀寫靜態資原始檔的方法來讀取HanLP所需的詞典和模型資料( 即resources目錄下剛放置的 data目錄 )
public class ResourceFileIoAdapter implements IIOAdapter { @Override public InputStream open(String path) throws IOException { ClassPathResource resource = new ClassPathResource( path ); InputStream is = new FileInputStream( resource.getFile() ); return is; } @Override public OutputStream create(String path) throws IOException { ClassPathResource resource = new ClassPathResource( path ); OutputStream os = new FileOutputStream( resource.getFile() ); return os; } }
然後我們配置一下 HanLP的配置檔案hanlp.properties,有兩處需要改為以下配置:
root=// 我們不再需要這種指定data目錄的方式 IOAdapter=cn.codesheep.springbt_hanlp_userdefine.config.ResourceFileIoAdapter // 指定自定義的IOAdapter
好,現在專案就可以工作了,我們接下來寫幾個測試用例測試體驗一把 !
實驗測試
隨便寫幾個例子來感受一番:
- 分詞功能
@Test public void testSegment() { System.out.println( HanLP.segment("www.codesheep.cn是一個技術部落格!") ); }
分詞結果如下:
[www/nx, ./w, codesheep/nx, ./w, cn/nx, 是/vshi, 一個/mq, 技術/n, 部落格/n, !/w]
每個詞段後的 /nx
, /w
之類的是 HanLP定義的詞性,可以去看 HanLP的介面來獲取詳情
- 文字推薦
@Test public void testSuggest() { Suggester suggester = new Suggester(); String[] titleArray = ( "威廉王子發表演說 呼籲保護野生動物\n" + "《時代》年度人物最終入圍名單出爐 普京馬雲入選\n" + "“黑格比”橫掃菲:菲吸取“海燕”經驗及早疏散\n" + "日本保密法將正式生效 日媒指其損害國民知情權\n" + "人工智慧如今是非常火熱的一門技術”" ).split("\\n"); for (String title : titleArray) { suggester.addSentence(title); } System.out.println(suggester.suggest("機器學習", 1));// 語義 System.out.println(suggester.suggest("危機公共", 1));// 字元 System.out.println(suggester.suggest("mayun", 1));// 拼音 }
三個關鍵字的語句推薦結果為:
機器學習→[人工智慧如今是非常火熱的一門技術”] 危機公共→[威廉王子發表演說 呼籲保護野生動物] mayun→[《時代》年度人物最終入圍名單出爐 普京馬雲入選]
- 關鍵字提取
@Test public void testKeyExtract() { String content = "蘋果公司(Apple Inc. )是美國一家高科技公司。由史蒂夫·喬布斯、斯蒂夫·沃茲尼亞克和羅·韋恩(Ron Wayne)等人於1976年4月1日創立," + "並命名為美國蘋果電腦公司(Apple Computer Inc. ),2007年1月9日更名為蘋果公司,總部位於加利福尼亞州的庫比蒂諾。"; List<String> keywordList = HanLP.extractKeyword(content, 5); System.out.println(keywordList); }
提取結果為:
[公司, 蘋果, 美國, Inc, Apple]
體驗一番我們發現其自帶的模型、字典等資料給出的實驗效果已經是非常不錯了,而且使用者還可以自定義或修改 data目錄下的模型、字典等資料來滿足特定需求,因此還是十分強大的。
後 記
由於能力有限,若有錯誤或者不當之處,還請大家批評指正,一起學習交流!
- My Personal Blog:CodeSheep 程式羊
- 我的半年技術部落格之路
可 長按 或 掃描 下面的 小心心 來訂閱 CodeSheep ,獲取更多 務實、能看懂、可復現的 原創文 ↓↓↓
最後附上個人聯絡方式,歡迎大家交流學習:
個人部落格:www.codesheep.cn
簡 書: https://www.jianshu.com/u/d19536b0189b