python數(shù)據(jù)分析:關(guān)鍵字提取方式
TF-IDF
TF-IDF(Term Frequencey-Inverse Document Frequency)指詞頻-逆文檔頻率,它屬于數(shù)值統(tǒng)計(jì)的范疇。使用TF-IDF,我們能夠?qū)W習(xí)一個(gè)詞對(duì)于數(shù)據(jù)集中的一個(gè)文檔的重要性。
TF-IDF的概念
TF-IDF有兩部分,詞頻和逆文檔頻率。首先介紹詞頻,這個(gè)詞很直觀,詞頻表示每個(gè)詞在文檔或數(shù)據(jù)集中出現(xiàn)的頻率。等式如下:
TF(t)=詞t在一篇文檔中出現(xiàn)的次數(shù)/這篇文檔的總詞數(shù)
第二部分——逆文檔頻率實(shí)際上告訴了我們一個(gè)單詞對(duì)文檔的重要性。這是因?yàn)楫?dāng)計(jì)算TF的時(shí)候,我們對(duì)每個(gè)詞賦予了同等的重要性,它出現(xiàn)得越多,它的TF就越高,如果它出現(xiàn)了100次,也許相比其他出現(xiàn)更少的詞,它并不攜帶那么多信息,因此我們需要賦予它們權(quán)重,決定每個(gè)詞的重要性。使用下面的等式得到IDF:
IDF(t)=(log10文檔的篇數(shù)/包含詞t文檔的篇數(shù))
那么,計(jì)算TF-IDF的方法如下:
TF * IDF=(詞t在一篇文檔中出現(xiàn)的次數(shù)/這篇文檔的總詞數(shù))* log10(文檔的篇數(shù)/包含詞t文檔的篇數(shù))
應(yīng)用
TF-IDF可以應(yīng)用于如下場(chǎng)景:
通??梢允褂肨F-IDF進(jìn)行文本數(shù)據(jù)分析,得到最準(zhǔn)確的關(guān)鍵詞信息。
如果你正開(kāi)發(fā)一個(gè)文本摘要應(yīng)用,并正在進(jìn)行統(tǒng)計(jì),TF-IDF是生成摘要最重要的特征。
TF-IDF權(quán)重的變動(dòng)常用于搜索引擎,以求出文檔的得分以及同用戶檢索的相關(guān)性。
文本分類(lèi)應(yīng)用將TF-IDF和BOW一起使用。
TextRank
TextRank 算法是一種用于文本的基于圖的排序算法。其基本思想來(lái)源于谷歌的 PageRank算法, 通過(guò)把文本分割成若干組成單元(單詞、句子)并建立圖模型, 利用投票機(jī)制對(duì)文本中的重要成分進(jìn)行排序, 僅利用單篇文檔本身的信息即可實(shí)現(xiàn)關(guān)鍵詞提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先對(duì)多篇文檔進(jìn)行學(xué)習(xí)訓(xùn)練, 因其簡(jiǎn)潔有效而得到廣泛應(yīng)用。
基于TextRank的關(guān)鍵詞提取
關(guān)鍵詞抽取的任務(wù)就是從一段給定的文本中自動(dòng)抽取出若干有意義的詞語(yǔ)或詞組。TextRank算法是利用局部詞匯之間關(guān)系(共現(xiàn)窗口)對(duì)后續(xù)關(guān)鍵詞進(jìn)行排序,直接從文本本身抽取。其主要步驟如下:
把給定的文本T按照完整句子進(jìn)行分割,即
對(duì)于每個(gè)句子,進(jìn)行分詞和詞性標(biāo)注處理,并過(guò)濾掉停用詞,只保留指定詞性的單詞,如名詞、動(dòng)詞、形容詞,即,其中是保留后的候選關(guān)鍵詞。
構(gòu)建候選關(guān)鍵詞圖G = (V,E),其中V為節(jié)點(diǎn)集,由(2)生成的候選關(guān)鍵詞組成,然后采用共現(xiàn)關(guān)系(co-occurrence)構(gòu)造任兩點(diǎn)之間的邊,兩個(gè)節(jié)點(diǎn)之間存在邊僅當(dāng)它們對(duì)應(yīng)的詞匯在長(zhǎng)度為K的窗口中共現(xiàn),K表示窗口大小,即最多共現(xiàn)K個(gè)單詞。
根據(jù)上面公式,迭代傳播各節(jié)點(diǎn)的權(quán)重,直至收斂。
對(duì)節(jié)點(diǎn)權(quán)重進(jìn)行倒序排序,從而得到最重要的T個(gè)單詞,作為候選關(guān)鍵詞。
python實(shí)現(xiàn):
# 導(dǎo)入庫(kù)
import jieba.analyse # 導(dǎo)入關(guān)鍵字提取庫(kù)
import pandas as pd # 導(dǎo)入pandas
import newspaper
# 讀取文本數(shù)據(jù)
# 獲取文章 銀保監(jiān)會(huì)出臺(tái)新政為例
article = newspaper.Article('https://finance.sina.com.cn/money/bank/bank_hydt/2019-02-25/doc-ihsxncvf7656807.shtml', language='zh')
# 下載文章
article.download()
# 解析文章
article.parse()
# 對(duì)文章進(jìn)行nlp處理
article.nlp()
# nlp處理后的文章拼接
string_data = "".join(article.keywords)
# 關(guān)鍵字提取
def get_key_words(string_data, how=''):
# topK:提取的關(guān)鍵字?jǐn)?shù)量,不指定則提取全部;
# withWeight:設(shè)置為T(mén)rue指定輸出詞對(duì)應(yīng)的IF-IDF權(quán)重
if how == 'textrank':
# 使用TextRank 算法
tags_pairs = jieba.analyse.textrank(string_data, topK=5, withWeight=True) # 提取關(guān)鍵字標(biāo)簽
else:
# 使用TF-IDF 算法
tags_pairs = jieba.analyse.extract_tags(string_data, topK=5, withWeight=True) # 提取關(guān)鍵字標(biāo)簽
tags_list = [] # 空列表用來(lái)存儲(chǔ)拆分后的三個(gè)值
for i in tags_pairs: # 打印標(biāo)簽、分組和TF-IDF權(quán)重
tags_list.append((i[0], i[1])) # 拆分三個(gè)字段值
tags_pd = pd.DataFrame(tags_list, columns=['word', 'weight']) # 創(chuàng)建數(shù)據(jù)框
return tags_pd
keywords = get_key_words(string_data)
print("#####################TF-IDF####################")
print(keywords)
keywords_tr = get_key_words(string_data, how='textrank')
print("#####################textrank####################")
print(keywords_tr)
結(jié)果如下:
#####################TF-IDF#################### word weight 0 民營(yíng)企業(yè) 0.327466 1 貸款 0.112652 2 融資 0.089557 3 商業(yè)銀行 0.084860 4 服務(wù) 0.072322 #####################textrank#################### word weight 0 民營(yíng)企業(yè) 1.000000 1 要 0.553043 2 貸款 0.493173 3 融資 0.379846 4 服務(wù) 0.371273
以上這篇python數(shù)據(jù)分析:關(guān)鍵字提取方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用python傳入不確定個(gè)數(shù)參數(shù)
這篇文章主要介紹了如何使用python傳入不確定個(gè)數(shù)參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
python實(shí)現(xiàn)目錄樹(shù)生成示例
這篇文章主要介紹了python實(shí)現(xiàn)目錄樹(shù)生成示例,需要的朋友可以參考下2014-03-03
pandas預(yù)處理部分地區(qū)數(shù)據(jù)案例
本文主要介紹了pandas預(yù)處理部分地區(qū)數(shù)據(jù)案例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01
200行python代碼實(shí)現(xiàn)2048游戲
這篇文章主要為大家詳細(xì)介紹了200行Python代碼實(shí)現(xiàn)2048游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
Python Selenium截圖功能實(shí)現(xiàn)代碼
這篇文章主要介紹了Python Selenium截圖功能實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
python如何生成隨機(jī)n位數(shù)字與字母組合(創(chuàng)建隨機(jī))
這篇文章主要介紹了python如何生成隨機(jī)n位數(shù)字與字母組合(創(chuàng)建隨機(jī)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08

