本文教程主要用于用python 生成文章关键字词云图如下:
运用的是python 的TF-IDF算法
- TF算法
TF --某个词语出现的词频率
为了统一数据,进行标准化处理
TF = 词语出现的数量/总的词语数 = 词语数/出现最多的词语数
IDF = log(总样本数/包含该次的样本数 + 1) +1 是为了不让分母为0
可以发现,如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)的平滑处理。log表示对得到的值取对数(此处为自然对数)
注:如果这个词没有出现在词表中,那么其对应的TF-IDF则为0
上面我们已经介绍完了TF-IDF的计算原理,下面我们再通过sklearn中实现的TfidfVectorizer类方法来做一个具体的文本处理示例
# -*- coding: utf-8 -*-
import jieba
from sklearn.feature_extraction.text import TfidfVectorizer
from wordcloud import WordCloud
import matplotlib.pyplot as plt
import re
def model(s):
tf = TfidfVectorizer(stop_words=None, token_pattern=r'(?u)\b\w\w+\b', max_features=20)
weight = tf.fit_transform(s)
word = tf.get_feature_names()
vocab = tf.vocabulary_.items()
print(len(s))
vocab = sorted(vocab, key= lambda v: v)
dir = {}
print(weight)
for i in vocab:
print(i)
dir[i[0]] = i[1]
print(dir)
return dir
def showImg(weight):
wordClould = WordCloud(font_path='./SimHei.ttf', background_color='white', max_font_size=70)
wordClould.fit_words(weight)
plt.imshow(wordClould)
plt.xticks([])
plt.yticks([])
plt.show()
if __name__ == '__main__':
article = ""
with open('./article.txt', encoding= "utf-8") as f:
article = f.read()
article = re.sub("[1-9\,\。\:\.\、\·\—\“\”]","", article)
seg_list = jieba.cut(article, cut_all = False)
arr = []
for i in seg_list:
arr.append(i)
print(arr)
weight = model(arr)
showImg(weight)