前段時間,領導要求出乙個關鍵字提取的微服務,要求輕量級。
對於沒寫過微服務的乙個小白來講。硬著頭皮上也不能說不會啊。
首先了解下公司目前的架構體系,發現並不是分布式開發,只能算是分模組部署。然後我需要寫個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'等待idea自動導包完成後,我們來載入hanlpversion '1.0-snapshot'
war
在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 時間 建議...