接单日记文本处理之词云生成

Posted A-L-Kun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接单日记文本处理之词云生成相关的知识,希望对你有一定的参考价值。

接单日记(三)文本处理之词云生成

此为一个实验报告,故遵守实验报告的格式。

一、 实验目的

  1. 熟悉Python第三方库python-docx、wordcloud、jieba库的安装和使用
  2. 熟悉使用pathlib来获取文件
  3. 熟悉运用Python封装的思想
  4. 熟悉使用join方法对字符串进行拼接操作
  5. 了解字符串的utf-8的编码格式

二、 实验内容

编写一个程序,提取词库里面的所有内容,对其进行分词操作,同时进行词频统计,停用词清洗的操作,最后输出图云到result.jpg中。

三、 程序及结果

1、 运行程序

from docx import Document
from pathlib import Path
from wordcloud import WordCloud
import jieba

font = Path(r"C:\\Windows\\Fonts\\simfang.ttf")
word_dataset = Path("词库.docx")
stop_word = Path("stoplist.txt")


def get_stop_list(stop_word):
    with open(stop_word, "r", encoding="utf-8") as f:
        return set(f.read().split())


def handle_word_dataset(word_dataset):
    str_ = ""
    for j in Document(word_dataset).paragraphs:
        str_ += j.text

    return [w for w in jieba.cut(str_)]

wc = WordCloud(
    font_path=str(font),
    stopwords=get_stop_list(stop_word),
    width=1920,
    height=1080,
    background_color="white",
    max_words=1000,
).generate(" ".join(handle_word_dataset(word_dataset)))
wc.to_file(Path("result.jpg"))

2、 运行结果

python 在线生成词云

效果图

技术分享

 

 大体步骤

1 接收请求中的文本,通过结巴分词处理文本。

    seg_generator = jieba.cut(text)  # 使用结巴分词,也可以不使用
    stopwords = pd.read_csv( path +"/stop_words_zh_UTF-8.txt", index_col=False, quoting=3, sep="\\t", names=[stopword],
                            encoding=utf-8)  # quoting=3全不引用
    seg_list = [i for i in seg_generator if i not in stopwords]
    seg_list = [i for i in seg_list if i != u ]
    seg_list = r .join(seg_list)
    print seg_list
    return seg_list

 

2 生成图片并返回

 

    wc = WordCloud( font_path= path + /simhei.ttf,#设置字体
                background_color="black", #背景颜色
                max_words=2000,# 词云显示的最大词数

                #max_font_size=100, #字体最大值
                random_state=42,
                )
    # 生成词云, 可以用generate输入全部文本(中文不好分词),也可以我们计算好词频后使用generate_from_frequencies函数
    wc.generate(seg_lisg)
    # wc.generate_from_frequencies(txt_freq)
    # txt_freq例子为[(‘词a‘, 100),(‘词b‘, 90),(‘词c‘, 80)]
    # 从背景图片生成颜色值
    #  wc.to_file("b.png")
    img = wc.to_image()
    return img

 

 

Python的web架构用的是Django url配置:

 

  url(r^wordcloud$, word.get),

入口代码:

def get(request):
    text = ""
    try:
        text1 = request.POST[text]
        text = text1
    except Exception,e:
        print "not POST"
    try:
        text2 = request.GET[text]
        text = text2
    except Exception,e:
        print "not GET"
    print text
    img = word.getWordCloud(text)
    #image_data = img.read()
    rand = str(time.strftime("%Y-%m-%d-%H%M%S", time.localtime(time.time())))
    filename = path + "/temp/pic"+ rand +".png"
    img.save(filename)
    image_data = open(filename,"rb").read()
    return HttpResponse(image_data,content_type="image/png")

 

demo

 

以上是关于接单日记文本处理之词云生成的主要内容,如果未能解决你的问题,请参考以下文章

Tableau 图表大全17之词云图

接单日记SMTP发送邮件

接单日记:理解浮点数运算的误差

[Python从零到壹] 十六.文本挖掘之词云热点与LDA主题分布分析万字详解

echarts之词云随机颜色的配置

文本处理+词云