基於 TF-IDF 算法的關鍵詞抽取
import jieba.analyse
- jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
- sentence 爲待提取的文本
- topK 爲返回幾個 TF/IDF 權重最大的關鍵詞,默認值爲 20
- withWeight 爲是否一併返回關鍵詞權重值,默認值爲 False
- allowPOS 僅包括指定詞性的詞,默認值爲空,即不篩選
提取例子:
import jieba.analyse as analyse
import pandas as pd
df = pd.read_csv('./origin_data/technology_news.csv')
df = df.dropna()
lines = df.content.values.tolist()
content = "".join(lines)
print(" ".join(analyse.extract_tags(content, topK=30, withWeight=False, allowPOS=())))
基於 TextRank 算法的關鍵詞抽取
- jieba.analyse.textrank(sentence, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v')) 直接使用,接口相同,注意默認過濾詞性。
- jieba.analyse.TextRank() 新建自定義 TextRank 實例
算法論文:http://web.eecs.umich.edu/~mihalcea/papers/mihalcea.emnlp04.pdf
基本思想:
- 將待抽取關鍵詞的文本進行分詞
- 以固定窗口大小(默認爲5,通過span屬性調整),詞之間的共現關係,構建圖
- 計算圖中節點的PageRank,注意是無向帶權圖
TextRank的核心就是PageRank,PageRank介紹:https://www.jianshu.com/p/f6d66ab97332
提取例子:
import jieba.analyse as analyse
import pandas as pd
df = pd.read_csv("./origin_data/military_news.csv", encoding='utf-8')
df = df.dropna()
lines=df.content.values.tolist()
content = "".join(lines)
print(" ".join(analyse.textrank(content, topK=20, withWeight=False, allowPOS=('ns', 'n', 'vn', 'v'))))
print("---------------------我是分割線----------------")
print(" ".join(analyse.textrank(content, topK=20, withWeight=False, allowPOS=('ns', 'n'))))