HanLP 關鍵詞提取。入門篇

2022-08-26 13:06:14 字數 3130 閱讀 8166

前段時間,領導要求出乙個關鍵字提取的微服務,要求輕量級。

對於沒寫過微服務的乙個小白來講。硬著頭皮上也不能說不會啊。

首先了解下公司目前的架構體系,發現並不是分布式開發,只能算是分模組部署。然後我需要寫個boot的服務,對外提供乙個介面就行。

在上網瀏覽了下分詞概念後,然後我選擇了gradle & hanlp & springboot & jdk1.8 & tomcat8 & idea工具來實現。

然後準備就緒後,在idea裡配置一下gradle路徑

hanlp分為詞典 和模型,其中詞典(dictionary)是詞法分析必備,模型(model)是句法分析必需。解壓好準備data的上級目錄 的絕對路徑下面會提到用途

這裡為g:/kaipu/data-for-1.7.3

一切準備就緒,開始建立專案

輸入專案id:keyword,next

選擇本地的gradle

此刻專案就建立好了。

開啟根目錄下的

dependencies
前三個jar 是整合springboot外部tomcat用的,第四個是junit單元測試依賴,第五個就是我們要用的hanlp依賴。

ps:這裡我著重說下打包的事情,因為我沒用過gradle打包,專案時間緊,我就延用了war包格式,這裡先記錄下過程,這個專案後,再回頭來研究gradle打jar包。

group 'keyword'

version '1.0-snapshot'

war

等待idea自動導包完成後,我們來載入hanlp

在resources下,出現乙個hanlp.properties,開啟編輯這個檔案,更改root路徑。這個路徑就是上面我們提到的 data上級目錄的絕對路徑。

建立第乙個測試類

說明詞庫引入成功。

分析如下:

public class phrase implements comparable

}

/**全域性邏輯
一、     * 因為要計算每個句子的分數值需要句子裡的所有詞累加計算score,所以這裡都需要打標分數。

* @param terms 分詞列表

* @param title 文章標題

* @param firstparagraphend 對於正文處理,表示正文第一段結尾位置

* @param lastparagraphbegin 對於正文處理,表示正文最後一段開始位置

*/

int index= 0;
while (index < terms.size())  

二、

treemapscoremap = new treemap<>();

for (phrase phrase : phrases)

if (phrase.getprefixwordpos().startswith("v") && phrase.getword().contains("的"))

score += math.log(weight(phrase, content, title) * freqmap.get(phrase.getword()) / phrase.getfreqofdict());

scoremap.put(phrase, score);

}}

三、

倒排

listsentences = new arraylist<>();

int i = 0;

int lastsentenceend = 0;

while (i <= content.length() - 1) else if (i > lastparagraphbegin)

int begin = lastsentenceend + 1;

if (sentences.isempty()) begin = 0; // 對第一句,應該從0開始

sentence sentence = new sentence(begin, i, location);

sentences.add(sentence);

lastsentenceend = i;

}i++;

}

五,分句後,對每句含有的詞,在三的基礎上,進行分數累加。(有個小邏輯:句子長度對分數比例的影響 || 單個句子包含多個命名實體 人名等對分數比例的影響。|| 。。。)這些需要大量的場景測for (sentence sentence : sentences) {
sentence.setscore(sumscore);

然後同理,根據sublist()取出想要的幾個句子。再根據句子所在正文的位置,進行乙個先後順序的排列。

還有一些可增刪的業務邏輯:

hanlp關鍵詞提取演算法TextRank

長句子 string content 程式設計師 英文programmer 是從事程式開發 維護的專業人員。一般將程式設計師分為程式設計人員和程式編碼人員,但兩者的界限並不非常清楚,特別是在中國。軟體從業人員分為初級程式設計師 高階程式設計師 系統 分析員和專案經理四大類。把content 通過乙個...

關鍵詞提取

隱含主題模型優缺點 隱含主題模型可以很好地表示文件和標籤主題,有效降低標籤系統中噪音的影響。但是另外乙個方面,隱含主題相對於詞而言粒度較粗,對於具體實體 如人名 地名 機構名和產品名 的標籤沒有辦法做到很好地區分,因此對這些細粒度標籤推薦效果較差 典型的聚類演算法 層次聚類 hierarchical...

關鍵詞提取

encoding utf 8 import jieba.analyse as analyse lines 1 open nba.txt encoding utf 8 read print join analyse.extract tags lines 1,topk 20,allowpos 時間 建議...