hanlp關鍵詞提取演算法TextRank

2021-08-20 05:48:28 字數 2525 閱讀 3500

//長句子

string content = "程式設計師(英文programmer)是從事程式開發、維護的專業人員。" +

"一般將程式設計師分為程式設計人員和程式編碼人員," +

"但兩者的界限並不非常清楚,特別是在中國。" +

"軟體從業人員分為初級程式設計師、高階程式設計師、系統" +

"分析員和專案經理四大類。";

把content 通過乙個的分詞演算法進行分詞,這裡採用的是viterbi演算法也就是hmm演算法,具體請參與我的另篇文章分詞後(當然首先應把停用詞、標點、副詞之類的去除)的結果是:

[程式設計師, 英文, programmer, 從事, 程式, 開發, 維護, 專業, 人員, 程式設計師, 分為, 程式, 設計, 人員, 程式, 編碼, 人員, 界限, 並不, 非常, 清楚, 特別是在, 中國, 軟體, 從業人員, 分為, 程式設計師, 高階, 程式設計師, 系統分析員, 專案經理, 四大]

hanlp的實現**如下:

map> words = new treemap>();

queueque = new linkedlist();

for (string w : wordlist)

// 複雜度o(n-1)

if (que.size() >= 5)

for (string qword : que)

//既然是鄰居,那麼關係是相互的,遍歷一遍即可

words.get(w).add(qword);

words.get(qword).add(w);

}que.offer(w);

}

這個**的功能是為分個詞構造視窗,這個詞前後各四個詞就是這個詞的視窗,如詞分詞後乙個詞出現了多次,像**[程式設計師]**,那就是把每次出現取一次視窗,然後把各次結果合併去重,最後結果是:程式設計師=[programmer, 專業, 中國, 人員, 從業人員, 從事, 分為, 四大, 開發, 程式, 系統分析員, 維護, 英文, 設計, 軟體, 專案經理, 高階]。最後形成的視窗:

map> words = 

每個詞最後的投票得分由這個詞的視窗進行多次迭代投票決定,迭代的結束條件就是大於最大迭代次數這裡是200次,或者兩輪之前某個詞的權重小於某一值這裡是0.001f。看下**:

mapscore = new hashmap();

//依據tf來設定初值

for (map.entry> entry : words.entryset())

system.out.println(score);

for (int i = 0; i < max_iter; ++i)

max_diff = math.max(max_diff, math.abs(m.get(key) - (score.get(key) == null ? 0 : score.get(key))));

}score = m;

if (max_diff <= min_diff) break;

}system.out.println(score);

return score;

}

投票的原理拿programmer=[從事, 開發, 程式, 程式設計師, 維護, 英文],這個詞來說明,programmer最後的得分是由**[從事, 開發, 程式, 程式設計師, 維護, 英文]**,這6個詞依次投票決定的,每個詞投出去的分數是和他本身的權重相關的。

1、投票開始前每個詞初始化了乙個權重,score.put(entry.getkey(),sigmoid(entry.getvalue().size())),這個權重是0到1之間,公式是

//value是每個詞視窗的大小

public static float sigmoid(float value)

這個函式的公式和影象如下,因為value一定是大於0的,所以sigmod值屬於(0,1)

初始化後的分詞是:

進行迭代投票,第一輪投票,[programmer, 專業, 中國, 人員, 從業人員, 從事, 分為, 四大, 開發, 程式, 系統分析員, 維護, 英文, 設計, 軟體, 專案經理, 高階]依給次****程式設計師投票,得分如下:

**[programmer][程式設計師]投票後,程式設計師]**的得分:

**[專業][程式設計師]**投票

HanLP 關鍵詞提取。入門篇

前段時間,領導要求出乙個關鍵字提取的微服務,要求輕量級。對於沒寫過微服務的乙個小白來講。硬著頭皮上也不能說不會啊。首先了解下公司目前的架構體系,發現並不是分布式開發,只能算是分模組部署。然後我需要寫個boot的服務,對外提供乙個介面就行。在上網瀏覽了下分詞概念後,然後我選擇了gradle hanlp...

關鍵詞提取演算法

傳統的tf idf演算法中,僅考慮了詞的兩個統計資訊 出現頻次 在多少個文件出現 因此,其對文字的資訊利用程度顯然也是很少的。演算法本身的定義是死的,但是結合我們的應用場景,對演算法進行合適的重塑及改造,使之更適應對應場景的應用環境,無疑能對我們想要得到的結果起到更好的指導作用。textrank演算...

關鍵詞提取

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