整体思路 1.从数据库中取出文本内容,放进列表 2.遍历列表,使用Jieba对文本内容进行关键词抽取 3.使用WordCloud生成词云图片
使用Jieba中基于 TF-IDF 算法的关键词抽取
TF-IDF 算法简介:(1)简单讲,TF(词频)和IDF(逆文档频率)的计算公式如下:
(2)TF为关键词在文章中的出现频率,IDF为关键词在语料库中的常见程度。 (分母+1是为防止关键词在语料库文档中出现次数为0;分母越小,IDF越大,关键词在语料库中越不常见)
(3)最终TF-IDF权重值 = IF * TDF,即关键词在文章中出现次数越多,且在语料库中越不常见,则权重值越高。
在Jieba中使用TF-IDF算法: 为去除一些分析意义不大但出现频率很高的词,可设置停用词表来对取消对相应词汇的统计,代码如下: jieba.analyse.set_stop_words(file_name) # file_name为自定义停用词表路径,每行一个词提取文本关键词代码:
jieba.analyse.extract_tags(text, topK=20, withWeight=False, allowPOS=())各参数含义如下:
参数名作用text要分析的文本内容topK返回权重最大的关键词个数,默认 20withWeight是否返回关键词权重值,默认值为 FalseallowPOS是否返回仅包括指定词性的词,默认值为空其中allowPOS常用的词性有:
缩写词性a形容词d副词e叹词i成语m数词n名词nr人名ns地名nt机构名o拟声词v动词详细可参考 => 词性标注表
附上项目中使用代码:
# 从数据库获取微博内容列表 text = getText() # 存放分词结果列表 words = [] # 使用jieba获取微博内容分词结果 for content in text: jieba.analyse.set_stop_words("stopwords.txt") ##设置停用词表,这些词便不会加入统计计算。 word = list(jieba.analyse.extract_tags(content)) words.extend(word)这部分比较简单,直接附代码:
#参数words为关键词列表,img_file为背景图片文件路径 def generate_img(words, img_file): data = ' '.join(word[0] for word in words) # 将图片作为词云背景 image_coloring = imread(img_file) wc = WordCloud( background_color='white', mask=image_coloring, font_path='C:\Windows\Fonts\msyh.ttc', collocations=False, max_words=150, min_font_size=5, max_font_size=40 ) wc.generate(data) wc.to_file('test.png')结果图如下: 词云生成结果的效果可以根据参数来进行调整,词云生成参数网上一大堆,就不再搬运了。
代码链接先占个坑,项目全部完成后传到github上。
