自然語言處理工具包 HanLP在 Spring Boot中的應(yīng)用

全新的 Mac Mini

本文共 782字,閱讀大約需要 2分鐘 !


概 述

HanLP 是基于 Java開發(fā)的 NLP工具包,由一系列模型與算法組成,目標(biāo)是普及自然語言處理在生產(chǎn)環(huán)境中的應(yīng)用。而且 HanLP具備功能完善、性能高效、架構(gòu)清晰、語料時新、可自定義的特點,因此十分好上手,本文就結(jié)合 Spring Boot來將 HanLP用起來!

注: 本文首發(fā)于 My Personal Blog:CodeSheep·程序羊,歡迎光臨 小站

本文內(nèi)容腦圖如下:

本文內(nèi)容腦圖

下載 HanLP數(shù)據(jù)和程序

由于 HanLP庫將數(shù)據(jù)與代碼分離,因此我們需要分別下載所需數(shù)據(jù)和 jar包:


工程搭建

  • 創(chuàng)建一個普通的 Spring Boot工程,不贅述

  • 引入 HanLP數(shù)據(jù) 和 配置

下載完成以后,首先解壓 hanlp-release.zip壓縮包,然后將解壓出的 HanLP的 jar包引入 Spring Boot工程,然后需要來放置 HanLP所需配置和數(shù)據(jù):

  1. 將解壓后 hanlp-release.zip壓縮包中的 hanlp.properties配置文件置于項目的 resources資源目錄下

  2. 然后解壓 data.zip壓縮包,將解壓出的 data目錄同樣至于 resources目錄下( data 中的數(shù)據(jù)包很重要,是 HanLP工作所需的詞典和模型 )


創(chuàng)建 IO適配器

HanLP 提供了 IO適配器,用戶可以實現(xiàn)其提供的 com.hankcs.hanlp.corpus.io.IIOAdapter 接口以在不同的平臺(HDFS、Redis等)上運(yùn)行HanLP,默認(rèn)的 IO適配器 IOAdapter = com.hankcs.hanlp.corpus.io.FileIOAdapter 是基于普通文件系統(tǒng)的。

接下來我們重寫一下 IOAdapter類,使用讀寫靜態(tài)資源文件的方法來讀取HanLP所需的詞典和模型數(shù)據(jù)( 即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

好,現(xiàn)在項目就可以工作了,我們接下來寫幾個測試用例測試體驗一把 !


實驗測試

隨便寫幾個例子來感受一番:

  • 分詞功能
@Test
public void testSegment() {
    System.out.println( HanLP.segment("www.codesheep.cn是一個技術(shù)博客!") );
}

分詞結(jié)果如下:

[www/nx, ./w, codesheep/nx, ./w, cn/nx, 是/vshi, 一個/mq, 技術(shù)/n, 博客/n, !/w]

每個詞段后的 /nx,/w之類的是 HanLP定義的詞性,可以去看 HanLP的接口來獲取詳情

  • 文本推薦
@Test
public void testSuggest() {
    Suggester suggester = new Suggester();
    String[] titleArray =
            (
                    "威廉王子發(fā)表演說 呼吁保護(hù)野生動物\n" +
                            "《時代》年度人物最終入圍名單出爐 普京馬云入選\n" +
                            "“黑格比”橫掃菲:菲吸取“海燕”經(jīng)驗及早疏散\n" +
                            "日本保密法將正式生效 日媒指其損害國民知情權(quán)\n" +
                            "人工智能如今是非?;馃岬囊婚T技術(shù)”"
            ).split("\\n");
    for (String title : titleArray)
    {
        suggester.addSentence(title);
    }

    System.out.println(suggester.suggest("機(jī)器學(xué)習(xí)", 1));   // 語義
    System.out.println(suggester.suggest("危機(jī)公共", 1));   // 字符
    System.out.println(suggester.suggest("mayun", 1));     // 拼音
}

三個關(guān)鍵字的語句推薦結(jié)果為:

機(jī)器學(xué)習(xí)  →  [人工智能如今是非?;馃岬囊婚T技術(shù)”]
危機(jī)公共  →  [威廉王子發(fā)表演說 呼吁保護(hù)野生動物]
mayun     →  [《時代》年度人物最終入圍名單出爐 普京馬云入選]
  • 關(guān)鍵字提取
@Test
public void testKeyExtract() {
    String content = "蘋果公司(Apple Inc. )是美國一家高科技公司。由史蒂夫·喬布斯、斯蒂夫·沃茲尼亞克和羅·韋恩(Ron Wayne)等人于1976年4月1日創(chuàng)立," +
            "并命名為美國蘋果電腦公司(Apple Computer Inc. ),2007年1月9日更名為蘋果公司,總部位于加利福尼亞州的庫比蒂諾。";
    List<String> keywordList = HanLP.extractKeyword(content, 5);
    System.out.println(keywordList);
}

提取結(jié)果為:

[公司, 蘋果, 美國, Inc, Apple]

體驗一番我們發(fā)現(xiàn)其自帶的模型、字典等數(shù)據(jù)給出的實驗效果已經(jīng)是非常不錯了,而且用戶還可以自定義或修改 data目錄下的模型、字典等數(shù)據(jù)來滿足特定需求,因此還是十分強(qiáng)大的。


后 記

由于能力有限,若有錯誤或者不當(dāng)之處,還請大家批評指正,一起學(xué)習(xí)交流!



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容