原理:
依托HanLP的核心詞典和自定義詞典根據TF*IDF算法計算
每個命名實體和名詞短語的得分score,按score倒排返回前面若干個關鍵詞
解釋: TF 稱為詞頻,表示詞在一篇文檔中出現的頻率=詞在該文檔中出現的次數 / 該文檔中單詞的總數---TF越大,表示該詞對文檔越重要
DF稱為文檔頻率,一個詞在多少篇文章中出現過
本系統用的公式是:比重 k * 關鍵詞在本文出現的次數 t / 詞典中的詞頻 f
IDF 稱為逆文檔頻率=Ln(總文檔數/出現該次的文檔數)
首先解析出標題和正文
用HanLP的分詞器一句詞典,初始化內容,生成一個數組 wordList,里面是分好的詞,有各自的詞性,和各自詞在內容中所在的位置 index
把標題里的詞單獨分一下,降低詞頻 f
關鍵詞:
先分短語:
遍歷wordList,取每個詞的詞性和下詞詞性,可以組合起來的,拼接為一個短語,降低詞頻f,放到候選關鍵詞數組 parsePhrase 里面
機構名不做組合
形容詞,名形詞,動名詞,習用語,簡稱略語,后跟助詞,名詞,動詞,動名詞 且詞的長度都大於1 則組合為短語
動詞后跟助詞,名詞,動名詞,則組合短語
名詞后跟助詞,名詞,動名詞,動詞,則組合短語
數詞后跟量詞,名詞,專有名詞,或者形容詞則組合短語
其余都不進行組合
組合短語長度大於8或者構成的某個單詞在詞庫詞頻超過300,則此短語詞頻為5
其余的短語默認詞頻為3
再分單詞:
遍歷wordlist,取每個單獨的詞,根據詞性,降低或者增加詞頻。同時判斷是否已存在於parsePhrase的某個短語里,避免重復放入 parsePhrase。
名詞,動詞,形容詞,長度大於2的動名詞,習用語,人名,簡稱略語,從核心詞典和擴展詞典取,取不到就默認詞頻為3.或4
排除單字符 的關鍵字,去除
包含有第+數詞的,詞頻增大
帶**訊,**攝等不進行添加
所以想添加自定義詞典的關鍵詞,只需要設定為單詞為名詞 n,動詞 v,形容詞 a,長度大於2的動名詞 vn,習用語 l,人名 nr,簡稱略語 j
在自定義詞.txt里 詞頻 < 3 即可。
最后算分:
權重k,根據詞性設定的,初始值是1,根據不同的詞性 擴大或者縮小
在本文出現次數t,遍歷wordList,有重復則加1即可
根據公式:比重 k * 關鍵詞在本文出現的次數 t / 詞典中的詞頻 f,算出parsePhrase里各個候選詞的分值,排序取前N個關鍵詞,就是要提取的
摘要:
思想:句子短,代表性強(特殊性高、分高)
復用上面的 parsePhrase 。
根據段落符號 \n 和一些標點符號 識別出標題,首段,尾段,中間的正文,以及是否是帶段落編號的文章。
根據標點符號,把文章分詞一個個的句子,包含每個句子的首尾位置(在文章中的前后順序),所在段落位置(是否首段,尾段等)。
在這期間處理句子里的特殊字,詞,
證明是至少含有2個段落編號的 正文文本,此時,需要去掉編號。把首段 的分值設置很大,加上標題
每個句子都分詞,從parsePhrase 找出分值想加。得到每個句子的值。
對句子進行分詞,找出每個詞在候選關鍵詞 數組里的分數,累加
同時對於同一句中重復出現的nr 等超過3個,進行降權
對於句子長度大於50的 進行降權
首段 FIRST 如果首句 開始位置<10(為了給去掉的記者,某報訊等等留位置)包含很多標題中詞匯,
就加入摘要,其實已經在候選句子里,只不過吧分數加多一些,排名靠前點
當判定為帶編號文章,增加首尾段落的分值權重
取一些特殊詞作為標識,截取后面的特殊符號以后的句子內容作為句子。即去除;[記者:***] 等句子內容
等等邏輯處理完后,得到一個句子數組。先按分值大小排序
提取思想:找分高的幾個句子,其總字數加起來剛剛大於要提取的摘要字數 length
length 和200有個對比
當文章字數 size <200:
當length > size 提取全文
當length < size 提取length字數的句子
當size >200
當length > 200 提取200字數的句子
當length < 200 提取length字數句子
提取后的句子,按照在文中出現的先后順序,排序。
記錄一下。