張店做網(wǎng)站公司培訓(xùn)機(jī)構(gòu)排名全國(guó)十大教育機(jī)構(gòu)排名
第1關(guān):Jieba 在關(guān)鍵詞提取中的應(yīng)用
任務(wù)描述
本關(guān)任務(wù):根據(jù)本關(guān)所學(xué)有關(guān)使用 Jieba 庫(kù)進(jìn)行關(guān)鍵詞提取的知識(shí),編寫(xiě)使用 Jieba 模塊進(jìn)行關(guān)鍵詞提取的程序,并通過(guò)所有測(cè)試用例。
相關(guān)知識(shí)
為了完成本關(guān)任務(wù),你需要掌握:
-
Jieba 模塊的使用;
-
Jieba 提取關(guān)鍵詞的方法。
Jieba 關(guān)鍵詞提取
jieba 庫(kù)是一款優(yōu)秀的 Python 第三方自然語(yǔ)言處理庫(kù),在我們的實(shí)際開(kāi)發(fā)過(guò)程中,jieba 庫(kù)是我們的好幫手,本實(shí)訓(xùn)將介紹 jieba 在關(guān)鍵詞提取方面的應(yīng)用。再利用 jieba 進(jìn)行關(guān)鍵詞提取時(shí),有兩種方式,一種是基于 TF-IDF 算法,一種是基于 TextRank 算法。接下來(lái)我們具體介紹這兩種方式。
基于 TF-IDF 算法的關(guān)鍵詞抽取
TF-IDF 算法是一種統(tǒng)計(jì)方法,用以評(píng)估一個(gè)詞語(yǔ)對(duì)于一個(gè)文件集或一個(gè)語(yǔ)料庫(kù)中的一份文件的重要程度,即一個(gè)詞語(yǔ)在一篇文章中出現(xiàn)次數(shù)越多,同時(shí)在所有文檔中出現(xiàn)次數(shù)越少,越能夠代表該文章。
示例:使用 jieba 中的 TF-IDF
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
函數(shù)中各個(gè)參數(shù)的具體含義為:
-
sentence 為待提取的文本;
-
topK 為返回幾個(gè) TF/IDF 權(quán)重最大的關(guān)鍵詞,默認(rèn)值為20;
-
withWeight 為是否一并返回關(guān)鍵詞權(quán)重值,默認(rèn)值為 False ;
-
allowPOS 僅包括指定詞性的詞,默認(rèn)值為空,即不篩選。
在使用 jieba 的 TF-IDF 算法時(shí),需要注意的是,idf 的值是通過(guò)語(yǔ)料庫(kù)統(tǒng)計(jì)得到的,所以,實(shí)際使用時(shí),可能需要依據(jù)使用環(huán)境,替換為對(duì)應(yīng)的語(yǔ)料庫(kù)統(tǒng)計(jì)所得 idf 值;需要從分詞結(jié)果中去除停用詞;如果指定了僅提取指定詞性的關(guān)鍵詞,則詞性分割非常重要,詞性分割中準(zhǔn)確程度,影響關(guān)鍵字的提取。
基于 TextRank 算法的關(guān)鍵詞抽取
TextRank 采用圖的思想,將文檔中的詞表示成一張無(wú)向有權(quán)圖,詞為圖的節(jié)點(diǎn),詞之間的聯(lián)系緊密程度體現(xiàn)為圖的邊的權(quán)值;計(jì)算詞的權(quán)重等價(jià)于計(jì)算圖中節(jié)點(diǎn)的權(quán)重;提取關(guān)鍵字,等價(jià)于找出圖中權(quán)重排名 TopK 的節(jié)點(diǎn)。
示例:使用 jieba 中的 TextRank
jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=("ns","n","vn","v")) # 直接使用,接口相同,注意默認(rèn)過(guò)濾詞性。
jieba.analyse.TextRank() # 新建自定義 TextRank 實(shí)例
函數(shù)中各個(gè)參數(shù)的具體含義為:
-
sentence 為待提取的文本;
-
topK 為返回幾個(gè) TextRank 權(quán)重最大的關(guān)鍵詞,默認(rèn)值為20;
-
withWeight 為是否一并返回關(guān)鍵詞權(quán)重值,默認(rèn)值為 False ;
-
allowPOS 僅包括指定詞性的詞,默認(rèn)值非空。
其基本思想為:將待抽取關(guān)鍵詞的文本進(jìn)行分詞;以固定窗口大小(默認(rèn)為5,通過(guò) span 屬性調(diào)整)、詞之間的共現(xiàn)關(guān)系構(gòu)建圖;計(jì)算圖中節(jié)點(diǎn)的 PageRank ,注意是無(wú)向帶權(quán)圖。
編程要求
在右側(cè)編輯器中的 Begin-End 之間補(bǔ)充 Python 代碼,使用 jieba 模塊對(duì)所輸入文本進(jìn)行關(guān)鍵詞提取,并輸出前三個(gè)關(guān)鍵詞。其中文本內(nèi)容通過(guò) input 從后臺(tái)獲取。
測(cè)試說(shuō)明
測(cè)試輸入: 以上信息提示,武漢疫情快速上升態(tài)勢(shì)得到控制,湖北除武漢外,局部爆發(fā)的態(tài)勢(shì)也得到控制,湖北以外省份疫情形勢(shì)積極向好。下一步要從統(tǒng)籌推進(jìn)疫情防控和經(jīng)濟(jì)社會(huì)發(fā)展出發(fā),緊緊圍繞社區(qū)防控和醫(yī)療救治兩個(gè)重點(diǎn),由全面防控向群專結(jié)合,精準(zhǔn)防控轉(zhuǎn)變。
預(yù)期輸出:
Building prefix dict from the default dictionary ...
Dumping model to file cache /tmp/jieba.cache
Loading model cost 1.309 seconds.
Prefix dict has been built successfully. # 接口調(diào)用附加信息
疫情 武漢 湖北
import jieba.analyse
import warnings
warnings.filterwarnings("ignore")
sentence = input()# 任務(wù):基于jieba中的TF-IDF算法完成對(duì)sentence的關(guān)鍵詞提取,提取前三個(gè)關(guān)鍵詞并以一行輸出
# ********** Begin *********#kw = jieba.analyse.extract_tags(sentence,topK=3,withWeight=False,allowPOS=())
ans = ''
for w in kw:ans += w + ' 'print(ans)
# ********** End **********#
第2關(guān):TextRank 算法
任務(wù)描述
本關(guān)任務(wù):根據(jù)所學(xué)有關(guān) TextRank 算法的知識(shí),完成 TextRank 算法程序的編寫(xiě)并通過(guò)所有測(cè)試用例。
相關(guān)知識(shí)
為了完成本關(guān)任務(wù),你需要掌握:
-
PageRank 算法的思想;
-
TextRank 算法的步驟與特點(diǎn)。
PageRank 算法
TextRank 算法的基本思想來(lái)源于 Google 的 PageRank 算法。因此在介紹TextRank 算法之前,我們先了解一下 PageRank 算法。PageRank 算法主要用于對(duì)在線搜索結(jié)果中的網(wǎng)頁(yè)進(jìn)行排序。讓我們通過(guò)一個(gè)例子快速理解這個(gè)算法的基礎(chǔ)。
圖1
假設(shè)我們有4個(gè)網(wǎng)頁(yè)——w1?,w2?,w3?,w4?。這些頁(yè)面包含指向彼此的鏈接。有些頁(yè)面可能沒(méi)有鏈接,這些頁(yè)面被稱為懸空頁(yè)面。
webpage | links |
---|---|
w1 | [w4,w2] |
w2 | [w3,w1] |
w3 | [ ] |
w4 | [w1] |
如上表所示,各個(gè)網(wǎng)頁(yè)之間的關(guān)系有:
-
w1? 有指向 w2?、w4? 的鏈接;
-
w2? 有指向 w3? 和 w1? 的鏈接;
-
w4? 僅指向 w1? ;
-
w3? 沒(méi)有指向的鏈接,因此為懸空頁(yè)面。
為了對(duì)這些頁(yè)面進(jìn)行排名,我們必須計(jì)算一個(gè)稱為 PageRank 的分?jǐn)?shù)。這個(gè)分?jǐn)?shù)是用戶訪問(wèn)該頁(yè)面的概率。
為了獲得用戶從一個(gè)頁(yè)面跳轉(zhuǎn)到另一個(gè)頁(yè)面的概率,我們將創(chuàng)建一個(gè)正方形矩陣 M,如圖2所示,它有 n 行和 n 列,其中 n 是網(wǎng)頁(yè)的數(shù)量。
圖 2 正方形矩陣
矩陣中的每個(gè)元素表示從一個(gè)頁(yè)面鏈接進(jìn)另一個(gè)頁(yè)面的可能性。如圖3所示,高亮的方格包含的是從 w1?跳轉(zhuǎn)到 w2? 的概率。
圖 3 概率正方形矩陣
如下是概率初始化的步驟:
-
從頁(yè)面 i 連接到頁(yè)面 j 的概率,也就是 M[i][j] ,初始化為
1/頁(yè)面i的出鏈接總數(shù)wi
; -
如果頁(yè)面 i 沒(méi)有到頁(yè)面 j 的鏈接,那么 M[i][j] 初始化為 0 ;
-
如果一個(gè)頁(yè)面是懸空頁(yè)面,那么假設(shè)它鏈接到其他頁(yè)面的概率為等可能的,因此 M[i][j] 初始化為
1/頁(yè)面總數(shù)
。
因此在本例中,矩陣 M 初始化后如圖4所示:
圖 4 初始化后的矩陣
最后,這個(gè)矩陣中的值將以迭代的方式更新,以獲得網(wǎng)頁(yè)排名。
TextRank 算法
掌握了 PageRank 算法后,讓我們理解 TextRank 算法。兩種算法的相似之處列舉如下:
-
用句子代替網(wǎng)頁(yè);
-
任意兩個(gè)句子的相似性等價(jià)于網(wǎng)頁(yè)轉(zhuǎn)換概率;
-
相似性得分存儲(chǔ)在一個(gè)方形矩陣中,類(lèi)似于 PageRank 的矩陣 M 。
圖 5 TextRank 算法
TextRank 算法是一種抽取式的無(wú)監(jiān)督的文本摘要方法。其步驟如下:
-
把所有文章整合成文本數(shù)據(jù);
-
把文本分割成單個(gè)句子;
-
為每個(gè)句子找到向量表示(詞向量);
-
計(jì)算句子向量間的相似性并存放在矩陣中;
-
將相似矩陣轉(zhuǎn)換為以句子為節(jié)點(diǎn)、相似性得分為邊的圖結(jié)構(gòu),用于句子 TextRank 計(jì)算;
-
一定數(shù)量的排名最高的句子構(gòu)成最后的摘要。
編程要求
在右側(cè)編輯器中的 Begin-End 之間補(bǔ)充 Python 代碼,實(shí)現(xiàn) TextRank 算法,完成對(duì)所輸入文本的關(guān)鍵詞提取,輸出前三個(gè)關(guān)鍵詞。其中文本內(nèi)容通過(guò) input 從后臺(tái)獲取。
測(cè)試說(shuō)明
平臺(tái)將使用測(cè)試集運(yùn)行你編寫(xiě)的程序代碼,若全部的運(yùn)行結(jié)果正確,則通關(guān)。
測(cè)試輸入: 在抗擊新型冠狀病毒的特殊時(shí)期,有這樣一群人,面對(duì)疫情,他們逆向而行,穿梭在轄區(qū)的街頭巷尾。一只口罩、一雙手套,簡(jiǎn)單的防護(hù)措施,就是他們?yōu)樽约何溲b的勇氣。作為抗擊疫情戰(zhàn)場(chǎng)上不可或缺的組成部分,社區(qū)工作者們用愛(ài)筑起了疫情防控的第一道防線。
預(yù)期輸出:
Building prefix dict from the default dictionary ...
Dumping model to file cache /tmp/jieba.cache
Loading model cost 1.259 seconds.
Prefix dict has been built successfully.# 接口調(diào)用的附加信息
疫情 防護(hù) 手套
from jieba import analyse
text = input() # 原始文本
# 任務(wù):使用jieba模塊中有關(guān)TextRank算法的模塊完成對(duì)text中前三個(gè)關(guān)鍵字的提取并輸出
# ********** Begin *********#kws = analyse.textrank(text)
ans = ''
i = 0
for w in kws:ans+=w+' 'i+=1if i > 2:breakprint(ans)