TF-IDF
TF-IDF(Term Frequencey-Inverse Document Frequency)指詞頻-逆文檔頻率,它屬于數值統計的範疇。使用TF-IDF,我們能夠學習一個詞對于資料集中的一個文檔的重要性。
TF-IDF的概念
TF-IDF有兩部分,詞頻和逆文檔頻率。首先介紹詞頻,這個詞很直覺,詞頻表示每個詞在文檔或資料集中出現的頻率。等式如下:
TF(t)=詞t在一篇文檔中出現的次數/這篇文檔的總詞數
第二部分——逆文檔頻率實際上告訴了我們一個單詞對文檔的重要性。這是因為當計算TF的時候,我們對每個詞賦予了同等的重要性,它出現得越多,它的TF就越高,如果它出現了100次,也許相比其他出現更少的詞,它并不攜帶那麼多資訊,是以我們需要賦予它們權重,決定每個詞的重要性。使用下面的等式得到IDF:
IDF(t)=(log10文檔的篇數/包含詞t文檔的篇數)
那麼,計算TF-IDF的方法如下:
TF * IDF=(詞t在一篇文檔中出現的次數/這篇文檔的總詞數)* log10(文檔的篇數/包含詞t文檔的篇數)
應用
TF-IDF可以應用于如下場景:
通常可以使用TF-IDF進行文本資料分析,得到最準确的關鍵詞資訊。
如果你正開發一個文本摘要應用,并正在進行統計,TF-IDF是生成摘要最重要的特征。
TF-IDF權重的變動常用于搜尋引擎,以求出文檔的得分以及同使用者檢索的相關性。
文本分類應用将TF-IDF和BOW一起使用。
TextRank
TextRank 算法是一種用于文本的基于圖的排序算法。其基本思想來源于谷歌的 PageRank算法, 通過把文本分割成若幹組成單元(單詞、句子)并建立圖模型, 利用投票機制對文本中的重要成分進行排序, 僅利用單篇文檔本身的資訊即可實作關鍵詞提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先對多篇文檔進行學習訓練, 因其簡潔有效而得到廣泛應用。
基于TextRank的關鍵詞提取
關鍵詞抽取的任務就是從一段給定的文本中自動抽取出若幹有意義的詞語或詞組。TextRank算法是利用局部詞彙之間關系(共現視窗)對後續關鍵詞進行排序,直接從文本本身抽取。其主要步驟如下:
把給定的文本T按照完整句子進行分割,即
對于每個句子,進行分詞和詞性标注處理,并過濾掉停用詞,隻保留指定詞性的單詞,如名詞、動詞、形容詞,即,其中是保留後的候選關鍵詞。
建構候選關鍵詞圖G = (V,E),其中V為節點集,由(2)生成的候選關鍵詞組成,然後采用共現關系(co-occurrence)構造任兩點之間的邊,兩個節點之間存在邊僅當它們對應的詞彙在長度為K的視窗中共現,K表示視窗大小,即最多共現K個單詞。
根據上面公式,疊代傳播各節點的權重,直至收斂。
對節點權重進行倒序排序,進而得到最重要的T個單詞,作為候選關鍵詞。
python實作:
# 導入庫
import jieba.analyse # 導入關鍵字提取庫
import pandas as pd # 導入pandas
import newspaper
# 讀取文本資料
# 擷取文章 銀保監會出台新政為例
article = newspaper.Article('https://finance.sina.com.cn/money/bank/bank_hydt/2019-02-25/doc-ihsxncvf7656807.shtml', language='zh')
# 下載下傳文章
article.download()
# 解析文章
article.parse()
# 對文章進行nlp處理
article.nlp()
# nlp處理後的文章拼接
string_data = "".join(article.keywords)
# 關鍵字提取
def get_key_words(string_data, how=''):
# topK:提取的關鍵字數量,不指定則提取全部;
# withWeight:設定為True指定輸出詞對應的IF-IDF權重
if how == 'textrank':
# 使用TextRank 算法
tags_pairs = jieba.analyse.textrank(string_data, topK=5, withWeight=True) # 提取關鍵字标簽
else:
# 使用TF-IDF 算法
tags_pairs = jieba.analyse.extract_tags(string_data, topK=5, withWeight=True) # 提取關鍵字标簽
tags_list = [] # 空清單用來存儲拆分後的三個值
for i in tags_pairs: # 列印标簽、分組和TF-IDF權重
tags_list.append((i[0], i[1])) # 拆分三個字段值
tags_pd = pd.DataFrame(tags_list, columns=['word', 'weight']) # 建立資料框
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)
複制
結果如下:
#####################TF-IDF####################
word weight
0 民營企業 0.327466
1 貸款 0.112652
2 融資 0.089557
3 商業銀行 0.084860
4 服務 0.072322
#####################textrank####################
word weight
0 民營企業 1.000000
1 要 0.553043
2 貸款 0.493173
3 融資 0.379846
4 服務 0.371273
複制
以上這篇python資料分析:關鍵字提取方式就是小編分享給大家的全部内容了,希望能給大家一個參考。