1. 程式人生 > 其它 >NLP之tfidf與textrank演算法細節對比基於結巴分詞

NLP之tfidf與textrank演算法細節對比基於結巴分詞

-NLP之tfidf與textrank演算法細節對比 注:結巴預設在site-packages目錄 關於結巴分詞的新增停用詞以及增加詞相關操作可參考之前的部落格,這裡重點說下結巴關鍵詞提取的兩個演算法

1.tfidf演算法 官方文件如下:

extract_tags(sentence, topK=20, withWeight=False, allowPOS=(), withFlag=False)
 method of jieba.analyse.tfidf.TFIDF instance
    Extract keywords from sentence using TF-IDF algorithm.
    Parameter:
    - topK: return how many top keywords. `None` for all possible words.
    - withWeight: if True, return a list of (word, weight);f False, return a list of words.
    - allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v','nr']. if the POS of w is not in this list,it will be filtered.
    - withFlag: only work with allowPOS is not empty.
if True, return a list of pair(word, weight) like posseg.cut if False, return a list of words

jieba.analyse.extract_tags –sentence 為待提取的文字 –topK 為返回幾個 TF/IDF 權重最大的關鍵詞,預設值為 20 –withWeight 為是否一併返回關鍵詞權重值,預設值為 False –allowPOS 僅包括指定詞性的詞,預設值為空,即不篩選 -withFlag 顯示詞性,這裡必須要有allowPOS引數時才有效

jieba.analyse.TFIDF(idf_path=None) 新建 TFIDF 例項,idf_path 為 IDF 頻率檔案,關鍵詞提取所使用逆向檔案頻率(IDF)文字語料庫可以切換成自定義語料庫的路徑 用法:jieba.analyse.set_idf_path(file_name)

# file_name為自定義語料庫的路徑,關鍵詞提取所使用停止詞(Stop Words)文字語料庫可以切換成自定義語料庫的路徑 用法: jieba.analyse.set_stop_words(file_name) # file_name為自定義語料庫的路徑 2、-基於TextRank演算法的關鍵詞提取

textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'), withFlag=False) method of jieba.analyse.textrank.TextRank instance
    Extract keywords from sentence using TextRank algorithm.
    Parameter:
        - topK: return how many top keywords. `None` for all possible words.
        - withWeight: if True, return a list of (word, weight);if False, return a list of words.
        - allowPOS: the allowed POS list eg. ['ns', 'n', 'vn', 'v'].if the POS of w is not in this list, it will be filtered.
        - withFlag: if True, return a list of pair(word, weight) like posseg.cut if False, return a list of words

jieba.analyse.TextRank() 新建自定義 TextRank 例項 –基本思想: 1,將待抽取關鍵詞的文字進行分詞 2,以固定視窗大小(預設為5,通過span屬性調整),詞之間的共現關係,構建圖 3,計算圖中節點的PageRank,注意是無向帶權圖

如果不是通過import jieba.analyse而是from textrank4zh import TextRank4Keyword即呼叫textrank那麼需要注意

tr4w = TextRank4Keyword()
tr4w.analyze(text=text, lower=True, window=5,vertex _source='no_filter', edge_source='no_stop_words', pagerank_config={'alpha': 0.85}) 

其中類TextRank4Keyword、TextRank4Sentence在處理一段文字時會將文字拆分成4種格式:

sentences:由句子組成的列表。
words_no_filter:對sentences中每個句子分詞而得到的兩級列表。
words_no_stop_words:去掉words_no_filter中的停止詞而得到的二維列表。
words_all_filters:保留words_no_stop_words中指定詞性的單詞而得到的二維列表。

在這裡並未找到相關可以設定詞性的引數,故

analyze(text, window=2, lower=False, vertex_source ='all_filters', edge_source='no_stop_words', pagerank_ config={'alpha': 0.85}) 
    method of textrank4zh.TextRank4Keyword.TextRank4 Keyword  instance分析文字
    Keyword arguments:
    text     --  文字內容,字串。
    window   --視窗大小,int,用來構造單詞之間的邊。預設為2。
    lower    --  是否將文字轉換為小寫。預設為False。
    vertex_source  --  選擇使用words_no_filter, words_ no_stop_words, words_all_filters中的哪一個來構造pagerank對應的圖中的節點。預設值為`'all_filters'`,可選值為`'no_ filter', 'no_stop_words', 'all_filters'`。關鍵詞也來自`vertex_source`。
    edge_source  --選用words_no_filter, words_no_stop_
words,words_all_filters中的哪一個來構造pagerank對應的圖中的節點之間的邊。 預設值為`'no_stop_words'`,可選值為`'no_ filter', 'no_stop_words', 'all_filters'`。邊的構造要結合`window`引數。

具體對比程式碼整理後回上傳連線

演算法:

-基於字首詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖(DAG) -採用動態規劃查詢最大概率路徑,找出基於詞頻的最大切分組合 -對於未登入詞,採用了基於漢字成詞能力的HMM模型,使用了Viterbi演算法