HanLP介紹:http://hanlp.linrunsoft.com/
github地址:https://github.com/hankcs/HanLP
說明:使用hanlp實現分詞、智能推薦、關鍵字提取、摘要等,更多功能參考官網 java
項目結構
該項目中,.jar和data文件夾和.properties須要從官網/github下載,data文件夾下載git
項目配置
修改hanlp.properties:程序員
#/Test/src/hanlp.properties: #本配置文件中的路徑的根目錄 #root=E:/SourceCode/eclipsePlace/Test root=./ ......
配置文件的做用是告訴HanLP數據包即data文件夾的位置,root的值爲data文件夾的父目錄,可使用絕對路徑或相對路徑。github
測試代碼
package com.test; import java.util.List; import com.hankcs.hanlp.HanLP; import com.hankcs.hanlp.seg.common.Term; import com.hankcs.hanlp.suggest.Suggester; import com.hankcs.hanlp.tokenizer.NLPTokenizer; public class MainTest { public static void main(String[] args) { System.out.println("首次編譯運行時,HanLP會自動構建詞典緩存,請稍候……\n"); //第一次運行會有文件找不到的錯誤但不影響運行,緩存完成後就不會再有了 System.out.println("標準分詞:"); System.out.println(HanLP.segment("你好,歡迎使用HanLP!")); System.out.println("\n"); List<Term> termList = NLPTokenizer.segment("中國科學院計算技術研究所的宗成慶教授正在教授天然語言處理課程"); System.out.println("NLP分詞:"); System.out.println(termList); System.out.println("\n"); System.out.println("智能推薦:"); getSegement(); System.out.println("\n"); System.out.println("關鍵字提取:"); getMainIdea(); System.out.println("\n"); System.out.println("自動摘要:"); getZhaiYao(); System.out.println("\n"); System.out.println("短語提取:"); getDuanYu(); System.out.println("\n"); } /** * 智能推薦部分 */ public static void getSegement() { 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)); // 拼音 } /** * 關鍵字提取 */ public static void getMainIdea() { String content = "程序員(英文Programmer)是從事程序開發、維護的專業人員。通常將程序員分爲程序設計人員和程序編碼人員,但二者的界限並不很是清楚,特別是在中國。軟件從業人員分爲初級程序員、高級程序員、系統分析員和項目經理四大類。"; List<String> keywordList = HanLP.extractKeyword(content, 5); System.out.println(keywordList); } /** * 自動摘要 */ public static void getZhaiYao() { String document = "算法可大體分爲基本算法、數據結構的算法、數論算法、計算幾何的算法、圖的算法、動態規劃以及數值分析、加密算法、排序算法、檢索算法、隨機化算法、並行算法、厄米變形模型、隨機森林算法。\n" + "算法能夠寬泛的分爲三類,\n" + "一,有限的肯定性算法,這類算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在必定的時間內終止。這類算法得出的結果常取決於輸入值。\n" + "二,有限的非肯定算法,這類算法在有限的時間內終止。然而,對於一個(或一些)給定的數值,算法的結果並非惟一的或肯定的。\n" + "三,無限的算法,是那些因爲沒有定義終止定義條件,或定義的條件沒法由輸入的數據知足而不終止運行的算法。一般,無限算法的產生是因爲未能肯定的定義終止條件。"; List<String> sentenceList = HanLP.extractSummary(document, 3); System.out.println(sentenceList); } /** * 短語提取 */ public static void getDuanYu() { String text = "算法工程師\n" + "算法(Algorithm)是一系列解決問題的清晰指令,也就是說,可以對必定規範的輸入,在有限時間內得到所要求的輸出。若是一個算法有缺陷,或不適合於某個問題,執行這個算法將不會解決這個問題。不一樣的算法可能用不一樣的時間、空間或效率來完成一樣的任務。一個算法的優劣能夠用空間複雜度與時間複雜度來衡量。算法工程師就是利用算法處理事物的人。\n" + "\n" + "1職位簡介\n" + "算法工程師是一個很是高端的職位;\n" + "專業要求:計算機、電子、通訊、數學等相關專業;\n" + "學歷要求:本科及其以上的學歷,大多數是碩士學歷及其以上;\n" + "語言要求:英語要求是熟練,基本上能閱讀國外專業書刊;\n" + "必須掌握計算機相關知識,熟練使用仿真工具MATLAB等,必須會一門編程語言。\n" + "\n" + "2研究方向\n" + "視頻算法工程師、圖像處理算法工程師、音頻算法工程師 通訊基帶算法工程師\n" + "\n" + "3目前國內外情況\n" + "目前國內從事算法研究的工程師很多,可是高級算法工程師卻不多,是一個很是緊缺的專業工程師。算法工程師根據研究領域來分主要有音頻/視頻算法處理、圖像技術方面的二維信息算法處理和通訊物理層、雷達信號處理、生物醫學信號處理等領域的一維信息算法處理。\n" + "在計算機音視頻和圖形圖像技術等二維信息算法處理方面目前比較先進的視頻處理算法:機器視覺成爲此類算法研究的核心;另外還有2D轉3D算法(2D-to-3D conversion),去隔行算法(de-interlacing),運動估計運動補償算法(Motion estimation/Motion Compensation),去噪算法(Noise Reduction),縮放算法(scaling),銳化處理算法(Sharpness),超分辨率算法(Super Resolution),手勢識別(gesture recognition),人臉識別(face recognition)。\n" + "在通訊物理層等一維信息領域目前經常使用的算法:無線領域的RRM、RTT,傳送領域的調製解調、信道均衡、信號檢測、網絡優化、信號分解等。\n" + "另外數據挖掘、互聯網搜索算法也成爲當今的熱門方向。\n" + "算法工程師逐漸往人工智能方向發展。"; List<String> phraseList = HanLP.extractPhrase(text, 10); System.out.println(phraseList); } }
運行結果
文章來源於lsh呵呵的博客算法