HanLP使用教程——NLP初體驗

XSpringSun發表於2021-07-15

話接上篇NLP的學習坑 自然語言處理(NLP)——簡介 ,使用HanLP進行分詞標註處詞性。

HanLP使用簡介

HanLP是一系列模型與演算法組成的NLP工具包,目標是普及自然語言處理在生產環境中的應用。HanLP具備功能完善、效能高效、架構清晰、語料時新、可自定義的特點。
目前,基於深度學習的HanLP 2.0正處於alpha測試階段。如果是java使用者我們搜尋的時候進入到官網可能看回浪費一些事件去搞清楚怎麼使用,因為2.0目前貌似是python可以使用,而且在測試階段,並且現在做了線上商業化api呼叫。
多數文件是圍繞2.0的線上api呼叫的,所以截至目前如果你是使用java那麼直接看1.x分支進行使用就好了。github 地址:https://github.com/hankcs/HanLP/tree/1.x
根據文件說明有兩種方式使用HanLP,第一是直接 maven 依賴,第二種就是 下載jar和配置檔案。現在我們來體驗下HanLP的使用,let's go

Maven使用

1、我們先建一個簡單的maven專案 hanlpdemo

為了方便使用者,特提供內建了資料包的Portable版,pom.xml加入依賴,maven reload一下,下載包。

<dependency>
    <groupId>com.hankcs</groupId>
    <artifactId>hanlp</artifactId>
    <version>portable-1.8.2</version>
</dependency>

2、寫一個簡單的測試方法

/**
 * HanLP分詞
 *
 * @param inputStr
 */
public static void HanLpSegment(String inputStr) {
    //標準分詞
    List<Term> termList = StandardTokenizer.segment(inputStr);
    System.out.println(termList);
    //標準分詞封裝
    System.out.println(HanLP.segment(inputStr));
    // NLP分詞 詞性標註和命名實體識別
    System.out.println(NLPTokenizer.segment(inputStr));
}

3、run一下看看結果

分詞有多種方式:標準分詞、NLP分詞、索引分詞、 N-最短路徑分詞等等,其它的這裡先不測試了。
上面三種方法的分詞中,前面兩個已經出來結果了,並且標註了詞性,而第三個為什麼報錯(開啟失敗:data/model/perceptron/large/cws.bin)?
因為Maven的方式零配置,即可使用基本功能(除由字構詞、依存句法分析外的全部功能)。如果使用者有自定義的需求,可以參考方式二,使用hanlp.properties進行配置(Portable版同樣支援hanlp.properties)。
所以NLPTokenizer.segment方法應該是用到了其中的功能,我們使用第二種方式,配置hanlp.properties。既然已經依賴了maven就不用新增jar包了,直接下載data和配置hanlp.properties就行了。

下載jar、data、hanlp.properties

1、下載: data.zip

下載解壓後我們將data資料夾放到src/main/resources 下面,放到其它位置也可以,hanlp.properties裡面要配置data的路徑。

2、下載jar和配置檔案:hanlp-release.zip

解壓後我們只需要hanlp.properties檔案,放到src/main/resources 下面,修改 root=D:/JavaProjects/HanLP/root=./src/main/resources


這是第二種配置使用HanLP的方法,因為我們已經Maven依賴了所以這裡就不用新增jar包了,如果不用maven還需要將jar新增進專案引用。

3、再run一下

成功執行起來了,大家可以看到NLPTokenizer.segment方法分詞的結果和標準分詞的結果不同。“2021年7月15日” 被標註成了時間/t,文件說NLPTokenizer會執行詞性標註和命名實體識別,所以被標註成了時間/t命名實體。
再來看下詞性標註和命名實體是什麼,這個說明更能解釋這篇文章而已,看我上篇也有定義,反正定義不是我定義的,神似型不似而已怎麼說都有理!

詞性標註是什麼:

詞性是詞彙基本的語法屬性,也稱為詞類。詞性標註是在給定句子中判定每個詞的語法範疇,確定其詞性並加以標註的過程。

命名實體是什麼:

命名實體識別(Named Entity Recognition,簡稱NER),又稱作“專名識別”,是指識別文字中具有特定意義的實體,其目的是識別語料中人名、地名、組織機構名等命名實體。
命名實體是命名實體識別的研究主體,一般包括三大類(實體類、時間類和數字類)和七小類(人名、地名、機構名、時間、日期、貨幣和百分比)命名實體。

最後

有了NLP的概念瞭解,也有了NLP的工具,所以也算是要入門 NLP 了(囧)。目前沒有實戰的需求,只是個人興趣學習下,反正時間浪費了也是浪費,希望後面又更多的學習和實踐分享!

參考:
1、維基百科
2、HanLp 官網
3、HanLP github

相關文章