Hanlp在java中文分詞中的使用介紹

adnb34g發表於2018-11-30


專案結構

 

 

該專案中, .jar data 資料夾和 .properties 需要從官網 /github 下載, data 資料夾下載

專案配置

修改 hanlp.properties:

 

     1 #/Test/src/hanlp.properties:

     2 # 本配置檔案中的路徑的根目錄

     3 #root=E:/SourceCode/eclipsePlace/Test

     4 root=./

     5 ......

 

配置檔案的作用是告訴 HanLP 資料包即 data 資料夾的位置, root 的值為 data 資料夾的父目錄,可以使用絕對路徑或相對路徑。

測試程式碼

1 package com.test;

2

3 import java.util.List;

4

5 import com.hankcs.hanlp.HanLP;

6 import com.hankcs.hanlp.seg.common.Term;

7 import com.hankcs.hanlp.suggest.Suggester;

8 import com.hankcs.hanlp.tokenizer.NLPTokenizer;

9

10 public class MainTest {

11     public static void main(String[] args) {

12         System.out.println(" 首次編譯執行時, HanLP 會自動構建詞典快取,請稍候…… \n");

13         // 第一次執行會有檔案找不到的錯誤但不影響執行,快取完成後就不會再有了

14         System.out.println(" 標準分詞: ");

15         System.out.println(HanLP.segment(" 你好,歡迎使用 HanLP "));

16        System.out.println("\n");

17

18         List<Term> termList = NLPTokenizer.segment(" 中國科學院計算技術研究所的宗成慶教授正在教授自然語言處理課程 ");

19        System.out.println("NLP 分詞: ");

20         System.out.println(termList);

21         System.out.println("\n");

22

23         System.out.println(" 智慧推薦: ");

24         getSegement();

25         System.out.println("\n");

26

27         System.out.println(" 關鍵字提取: ");

28         getMainIdea();

29         System.out.println("\n");

30

31        System.out.println(" 自動摘要: ");

32       getZhaiYao();

33         System.out.println("\n");

34

35         System.out.println(" 短語提取: ");

36         getDuanYu();

37         System.out.println("\n");

38     }

39

40     /**

41         * 智慧推薦部分

42      */

43     public static void getSegement() {

44         Suggester suggester = new Suggester();

45         String[] titleArray = (" 威廉王子發表演說 呼籲保護野生動物 \n" + " 《時代》年度人物最終入圍名單出爐 普京馬雲入選 \n" + " “黑格比”橫掃菲:菲吸取“海燕”經驗及早疏散 \n"

46                 + " 日本保密法將正式生效 日媒指其損害國民知情權 \n" + " 英報告說空氣汙染帶來“公共健康危機” ").split("\\n");

  47        for (String title : titleArray) {

  48           suggester.addSentence(title);

  49        }

  50        System.out.println(suggester.suggest(" 發言 ", 1)); // 語義

  51        System.out.println(suggester.suggest(" 危機公共 ", 1)); // 字元

  52        System.out.println(suggester.suggest("mayun", 1)); // 拼音

  53    }

54

  55    /**

  56     * 關鍵字提取

  57     */

  58    public static void getMainIdea() {

  59        String content = " 程式設計師 ( 英文 Programmer) 是從事程式開發、維護的專業人員。一般將程式設計師分為程式設計人員和程式編碼人員,但兩者的界限並不非常清楚,特別是在中國。軟體從業人員分為初級程式設計師、高階程式設計師、系統分析員和專案經理四大類。 ";

  60        List<String> keywordList = HanLP.extractKeyword(content, 5);

  62        System.out.println(keywordList);

  63    }

64

  65   /**

  66     * 自動摘要

  67     */

  68    public static void getZhaiYao() {

  69        String document = " 演算法可大致分為基本演算法、資料結構的演算法、數論演算法、計算幾何的演算法、圖的演算法、動態規劃以及數值分析、加密演算法、排序演算法、檢索演算法、隨機化演算法、並行演算法、厄米變形模型、隨機森林演算法。 \n"

  70                + " 演算法可以寬泛的分為三類, \n" + " 一,有限的確定性演算法,這類演算法在有限的一段時間內終止。他們可能要花很長時間來執行指定的任務,但仍將在一定的時間內終止。這類演算法得出的結果常取決於輸入值。 \n"

  71                + " 二,有限的非確定演算法,這類演算法在有限的時間內終止。而,對於一個(或一些)給定的數值,演算法的結果並不是唯一的或確定的。 \n"

   72               + " 三,無限的演算法,是那些由於沒有定義終止定義條件,或定義的條件無法由輸入的資料滿足而不終止執行的演算法。通常,無限演算法的產生是由於未能確定的定義終止條件。 ";

  73        List<String> sentenceList = HanLP.extractSummary(document, 3);

  74        System.out.println(sentenceList);

  75    }

 76

  77    /**

  78     * 短語提取

  79     */

  80    public static void getDuanYu() {

  81        String text = " 演算法工程師 \n"

  82                + " 演算法( Algorithm )是一系列解決問題的清晰指令,也就是說,能夠對一定規範的輸入,在有限時間內獲得所要求的輸出。如果一個演算法有缺陷,或不適合於某個問題,執行這個演算法將不會解決這個問題。不同的演算法可能用不同的時間、空間或效率來完成同樣的任務。一個演算法的優劣可以用空間複雜度與時間複雜度來衡量。演算法工程師就是利用演算法處理事物的人。 \n"

  83               + "\n" + "1 職位簡介 \n" + " 演算法工程師是一個非常高階的職位; \n" + " 專業要求:計算機、電子、通訊、數學等相關專業; \n"

  84                + " 學歷要求:本科及其以上的學歷,大多數是碩士學歷及其以上; \n" + " 語言要求:英語要求是熟練,基本上能閱讀國外專業書刊; \n"

  85                + " 必須掌握計算機相關知識,熟練使用模擬工具 MATLAB 等,必須會一門程式語言。 \n" + "\n" + "2 研究方向 \n"

   86               + " 視訊演算法工程師、影像處理演算法工程師、音訊演算法工程師 通訊基帶演算法工程師 \n" + "\n" + "3 目前國內外狀況 \n"

   87               + " 目前國內從事演算法研究的工程師不少,但是高階演算法工程師卻很少,是一個非常緊缺的專業工程師。演算法工程師根據研究領域來分主要有音訊 / 視訊演算法處理、影像技術方面的二維資訊演算法處理和通訊物理層、雷達訊號處理、生物醫學訊號處理等領域的一維資訊演算法處理。 \n"

   88               + " 在計算機音視訊和圖形影像技術等二維資訊演算法處理方面目前比較先進的視訊處理演算法:機器視覺成為此類演算法研究的核心;另外還有 2D 3D 演算法 (2D-to-3D conversion) ,去隔行演算法 (de-interlacing) ,運動估計運動補償演算法 (Motion estimation/Motion Compensation) ,去噪演算法 (Noise Reduction) ,縮放演算法 (scaling) ,銳化處理演算法 (Sharpness) ,超解析度演算法 (Super Resolution), 手勢識別 (gesture recognition), 人臉識別 (face recognition) \n"

     89             + " 在通訊物理層等一維資訊領域目前常用的演算法:無線領域的 RRM RTT ,傳送領域的調製解調、通道均衡、訊號檢測、網路優化、訊號分解等。 \n" + " 另外資料探勘、網際網路搜尋演算法也成為當今的熱門方向。 \n"

     90             + " 演算法工程師逐漸往人工智慧方向發展。 ";

     91     List<String> phraseList = HanLP.extractPhrase(text, 10);

     92     System.out.println(phraseList);

     93 }

94 }

執行結果

 

 

轉載   lsh呵呵


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

相關文章