python

python  - 从excel 数据提取问答字段生产词云

准备工作:

1.数据表,这里需要截取的是数据表ceshi提问内容 这个列的数据

2.字体

windwos环境下 可以从 C:WindowsFonts 获取

3.无背景的图

3.代码

v1.0

from PIL import Image
from RemoveWord.rword import rw as rws
import matplotlib.pyplot as plt
import wordcloud as wc
import numpy as np
import matplotlib.image as mpimg
import wordcloud
import pandas as pd
import jieba


wenjian = ''
object_list = []
# 通过键值对的形式存储词语及其出现的次数
counts = {}

# 从外部引入
# remove_words = [u'的', u',',u'和', u'是', u'随着', u'对于', u'对',u'等',u'能',u'都',u'。',u' ',u'、',u'中',u'在',u'了',
#                 u'通常',u'如果',u'我们',u'需要', u'无法', u'怎么',u'连接',u'设置',u'文件',u'进不去',u'怎么办',u'问题',
#                 u'申请',u'公司',u'加入',u'请问',u'查看',u'文件夹',u'不到',u'修改',u'哥哥',u'错误',u'什么',u'办公',u'哪里',u'不了',
#                 u'查询',u'多少',u'反应',u'哪儿',u'没有',u'资料',u'御家',u'出现',u'不能',u'一直',u'报错',u'技术',
#                 u'自动',u'同时',u'收不到',u'如何','可以',u'使用指南',u'默认',u'原始',u'处理',u'这个',u'线条',u'成功',u'不是',u'10'
#                 ] # 自定义去除词库

# 读取文件,获取相应列的所有字符合集
df = pd.read_excel("ceshi.xls")
for i in range(df.__len__()):
    wenjian += df['提问内容'].values[i]

# 分词
alist = jieba.lcut(wenjian)

# 分词过滤不需要的词
for word in alist:                 # 循环读出每个分词
    if word not in rws:   # 如果不在去除词库中
        object_list.append(word)   # 分词追加到列表

#计算分词的次数
for word in object_list:
    if len(word) == 1:  # 单个词语不计算在内
        continue
    else:
        counts[word] = counts.get(word, 0) + 1  # 遍历所有词语,每出现一次其对应的值加 1
items = list(counts.items())  # 将键值对转换成列表
items.sort(key=lambda x: x[1], reverse=True)  # 根据词语出现的次数进行从大到小排序
items2 = dict(items)

# 基本使用,将文字转换为图的形式显示
img = mpimg.imread("333.jpg")
c = wordcloud.WordCloud(
    # prefer_horizontal=0.5,                #词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )
    scale=4,                                #默认为1,按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍
    background_color='white',               #背景颜色
    # width=400,                            #生成的图片宽度
    # height=300,                           #生成的图片高度
    # min_font_size=10,                     #指定词云中字体的最小字号,默认4号
    # max_font_size=20,                     #指定词云中字体的最大字号,根据高度自动调节
    # font_step=2,                          #指定词云中字体字号的步进间隔,默认为1
    font_path=r'D:python_projectT1msyhl.ttc',    #指定字体文件的路径,默认None
    # max_words=5,                          #指定词云显示的最大单词数量,默认200
    # stopwords=[],                         #指定词云的排除词列表,即不显示的单词列表
    mask=img,                               #指定词云形状,默认为长方形,需要引用imread()函数
    collocations=1,                         #bool, default=True 是否包括两个词的搭配
    colormap='viridis',                     #string or matplotlib colormap, default=”viridis” #给每个单词随机分配颜色,若指定color_func,则忽略该方法
    random_state=None                       #int or None  #为每个单词返回一个PIL颜色
    # regexp=None                           #string or None (optional)使用正则表达式分隔输入的文本
)
c.generate_from_frequencies(items2)         #根据词频生成词云
# c.generate(items2)                        #根据文本生成词云
# c.generate_from_text(text)                #根据文本生成词云
# c.fit_words(frequencies)                  #根据词频生成词云
# c.process_text(text)                      #将长文本分词并去除屏蔽词(此处指英语,中文分词还是需要自己用别的库先行实现,使用上面的 fit_words(frequencies) )
# c.recolor([random_state, color_func, colormap])   #对现有输出重新着色。重新上色会比重新生成整个词云快很多
# c.to_array()  #转化为 numpy array
# c.to_file(filename)   #输出到文件

# 保存为图片
c.to_file("ciyun.png")

# # # 打印显示图片
# plt.imshow(c)
# plt.axis("off")
# plt.show()
原文地址:https://www.cnblogs.com/Anec/p/13697011.html