Python下基于Jieba和WordCloud的词云生成(从数据库中直取文本)

整体思路
1.从数据库中取出文本内容,放进列表
2.遍历列表,使用Jieba对文本内容进行关键词抽取
3.使用WordCloud生成词云图片

一、使用SQL语句获取文本内容列表

def getText():
	 # 连接数据库
    db = pymysql.connect("175.24.32.214", "sa", "123456", "weibo", charset='utf8') 
    try:
        # 使用cursor()方法获取操作游标
        cursor = db.cursor()
        # 获取微博内容数据
        sql = 'select text from weibo where user_id="2730402964";'
        cursor.execute(sql)
        # 直接通过数据库查询获取的是((1,张三,男),(2,李四,女))这样的元组格式:
        # 每条记录通过元组记录属性值,同时每条记录作为一个元组元素组成查询结果元组
        results = cursor.fetchall()
        # 将微博内容放入contents列表
        contents = []
        for re in results:
        	#只取了text属性值,可直接extend
            contents.extend(re)
        # 关闭数据库连接
        db.close()
        # 返回微博内容列表contents
        return contents
    except Exception as e:
        print("出错:")
        db.rollback()
        print(e)

二、使用Jieba抽取关键词

使用Jieba中基于 TF-IDF 算法的关键词抽取

  1. TF-IDF 算法简介:

(1)简单讲,TF(词频)和IDF(逆文档频率)的计算公式如下:

计算公式

(2)TF为关键词在文章中的出现频率,IDF为关键词在语料库中的常见程度。
(分母+1是为防止关键词在语料库文档中出现次数为0;分母越小,IDF越大,关键词在语料库中越不常见)

(3)最终TF-IDF权重值 = IF * TDF,即关键词在文章中出现次数越多,且在语料库中越不常见,则权重值越高。

  1. 在Jieba中使用TF-IDF算法:
    为去除一些分析意义不大但出现频率很高的词,可设置停用词表来对取消对相应词汇的统计,代码如下:
jieba.analyse.set_stop_words(file_name) # file_name为自定义停用词表路径,每行一个词

提取文本关键词代码:

jieba.analyse.extract_tags(text, topK=20, withWeight=False, allowPOS=())

各参数含义如下:

参数名作用
text要分析的文本内容
topK返回权重最大的关键词个数,默认 20
withWeight是否返回关键词权重值,默认值为 False
allowPOS是否返回仅包括指定词性的词,默认值为空

其中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)

三、使用WordCloud生成词云

这部分比较简单,直接附代码:

#参数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上。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值