目录

Python 中文分词,根据词频和背景图片生成词云

读取本地文件内容,对文本内容进行中文分词,统计词频后,生成词云图。

一、生成矩形颜色随机的词云图

读取本地文件内容,对文本内容进行中文分词,统计词频后,生成矩形随机颜色的词云图。

import logging
import collections
import re
import math
 
import jieba
from wordcloud import WordCloud
 
jieba.setLogLevel(logging.INFO)
 
 
# 创建停用词列表
def stopwordslist():
    # 按行读入
    stopwords = [line.strip() for line in open('chinsesstop.txt', encoding='UTF-8').readlines()]
 
    # 分割为单个字符(列表解析)
    stopwords = [k for s in stopwords for k in s]
    return stopwords
 
 
# # 指定字符串方式
# text = "collections在python官方文档中的解释是High-performance container datatypes,直接的中文翻译解释高性能容量数据类型。它总共包含五种数据类型"
 
# 文件读取方式
f = open("./article.txt", "r", encoding="utf-8")
text = f.read()
f.close()
 
# 生成词云的词频限制,选取前30%
TopWordFrequencyPercentage = 30
TopWordFrequencyPercentage /= 100
 
# 词云图片生成路径(当前目录下的 wordcloud_rectangle.png 文件)
PicSavePath = "./wordcloud_rectangle.png"
 
# jieba分词
seg = jieba.cut(text)
 
seg = " ".join(seg)
seg = seg.strip()
 
# 去除标点符号
seg = re.sub(r"[0-9\s+\.\!\/_,$%^*()?;;:-【】+\"\']+|[+——!,;::。?、~@#¥%……&*()]+", " ", seg)
# 只取中文
# seg = re.sub(r'[^\u4e00-\u9fa5]', ' ', seg)
 
# 转换为list
seg = seg.split(" ")
 
# 过滤空字符和None
seg = list(filter(None, seg))
# print(seg)
 
# 创建一个停用词列表
stopwords = stopwordslist()
# print(stopwords)
 
# 过滤停用词(列表解析)
seg = [v for v in seg if v not in stopwords]
# print(seg)
 
# 统计词频
word_counts = collections.Counter(seg)
# print(word_counts)
# print(math.ceil(len(word_counts) * 0.3))
 
# # 获取词频降序排列的前30%
# word_counts_top_50_percent = word_counts.most_common(math.ceil(len(word_counts) * 0.3))
# print(word_counts_top_50_percent)
 
# 生成词云
wc = WordCloud(
    # 限制词数(根据词频限制,计算个数,向上取整)
    max_words=math.ceil(len(word_counts) * TopWordFrequencyPercentage),
    # 设置背景宽
    width=500,
    # 设置背景高
    height=350,
    # 最大字体
    max_font_size=50,
    # 最小字体
    min_font_size=10,
    # 设置字体文件路径,不指定就会出现乱码。
    font_path='./MSYH.TTC',
    # 设置背景色
    background_color='white',
)
 
# 根据词频产生词云
wc.generate_from_frequencies(word_counts)
 
# 生成词云图片文件
wc.to_file(PicSavePath)

效果图:

/post_images/c87194e3bad48.png

二、根据图片生成规定形状的颜色相近的词云图

读取本地文件内容,对文本内容进行中文分词,统计词频后,根据背景图片生成规定形状和颜色的词云图。

import logging
import collections
import re
import math
from random import randint
 
import jieba
from wordcloud import WordCloud
from wordcloud import ImageColorGenerator
 
from PIL import Image
import numpy as np
 
jieba.setLogLevel(logging.INFO)
 
 
# 创建停用词列表
def stopwordslist():
    # 按行读入
    stopwords = [line.strip() for line in open('chinsesstop.txt', encoding='UTF-8').readlines()]
 
    # 分割为单个字符(列表解析)
    stopwords = [k for s in stopwords for k in s]
    return stopwords
 
 
# 自定义颜色函数(在绘制词云图时发现有的字颜色为黄色导致看不清因此需要修改整个词云图的色调为冷色调 蓝绿色)
def random_color_func(word=None, font_size=None, position=None, orientation=None, font_path=None,
                      random_state=None):
    # what is HSL? https://baike.baidu.com/item/HSL/1443144?fr=aladdin
    H = randint(120, 250)
    S = int(100.0 * 255.0 / 255.0)
    L = int(100.0 * float(randint(60, 120)) / 255.0)
    return "hsl({}, {}%, {}%)".format(H, S, L)
 
 
# # 指定字符串方式
# text = "collections在python官方文档中的解释是High-performance container datatypes,直接的中文翻译解释高性能容量数据类型。它总共包含五种数据类型"
 
# 文件读取方式
f = open("./article.txt", "r", encoding="utf-8")
text = f.read()
f.close()
 
# 生成词云的词频限制,选取前30%
TopWordFrequencyPercentage = 30
TopWordFrequencyPercentage /= 100
 
# 词云图片生成路径(当前目录下的 wordcloud_arbitrary_shape.png 文件)
PicSavePath = "./wordcloud_arbitrary_shape.png"
 
# jieba分词
seg = jieba.cut(text)
 
seg = " ".join(seg)
seg = seg.strip()
 
# 去除标点符号
seg = re.sub(r"[0-9\s+\.\!\/_,$%^*()?;;:-【】+\"\']+|[+——!,;::。?、~@#¥%……&*()]+", " ", seg)
# 只取中文
# seg = re.sub(r'[^\u4e00-\u9fa5]', ' ', seg)
 
# 转换为list
seg = seg.split(" ")
 
# 过滤空字符和None
seg = list(filter(None, seg))
# print(seg)
 
# 创建一个停用词列表
stopwords = stopwordslist()
# print(stopwords)
 
# 过滤停用词(列表解析)
seg = [v for v in seg if v not in stopwords]
# print(seg)
 
# 统计词频
word_counts = collections.Counter(seg)
# print(word_counts)
# print(math.ceil(len(word_counts) * 0.3))
 
# # 获取词频降序排列的前30%
# word_counts_top_50_percent = word_counts.most_common(math.ceil(len(word_counts) * 0.3))
# print(word_counts_top_50_percent)
 
# 词云形状
mask = np.array(Image.open("./background1.png"))
# 根据图片颜色设置词云颜色(如果背景图片是纯色背景会报 NotImplementedError: Gray-scale images TODO 错误)
bg_color_func = ImageColorGenerator(mask)
 
# 生成词云
wc = WordCloud(
    # 词云形状
    mask=mask,
    # 限制词数(根据词频限制,计算个数,向上取整)
    max_words=math.ceil(len(word_counts) * TopWordFrequencyPercentage),
    # 设置图片宽度(单位:像素)
    width=500,
    # 设置图片高度(单位:像素)
    height=350,
    # 最大字体
    max_font_size=50,
    # 最小字体
    min_font_size=10,
    # 字体文件路径,不指定就会出现乱码。(windows系统字体文件路径:C:\Windows\Fonts,可以从这里拷贝出来)
    font_path='./MSYH.TTC',
    # 设置背景色
    background_color='white',
    # 颜色模式(默认为RBG)当参数为“RGBA”并且background_color为None时,背景为黑色
    mode='RGBA',
 
    # 词语水平方向排版出现的频率,默认 0.9 (所以词语垂直方向排版出现频率为 0.1 )
    prefer_horizontal=0.9,
    # 按照比例进行放大画布,如设置为1.5,则长和宽都是原来画布的1.5倍
    scale=1,
    # 词频和字体大小的关联性
    relative_scaling=0.5,
    # 生成新颜色的函数(默认为None)
    # color_func=None,
    color_func=bg_color_func,
    # color_func=random_color_func,
    # 给每个单词随机分配颜色,若指定color_func,则忽略该方法
    colormap=None,
    # colormap='pink',
)
 
# 根据词频产生词云
wc.generate_from_frequencies(word_counts)
 
# 生成词云图片文件
wc.to_file(PicSavePath)

效果图:

/post_images/6d37a040f0964.png

原背景图:

/post_images/64bc996b78a5f.png

三、版本依赖 requirements.txt

certifi==2020.6.20
cycler==0.10.0
jieba==0.42.1
kiwisolver==1.3.1
matplotlib==3.3.3
numpy==1.19.3
Pillow==8.0.1
pyparsing==2.4.7
python-dateutil==2.8.1
six==1.15.0
wincertstore==0.2
wordcloud==1.8.1

四、停止词 / 过滤词(chinsesstop.txt)

这里其实我只对单字过滤了,没有对词组做过滤。

的地得
了就在与也为更而之由以把吧巴去过被搞或每及几
不让到等从人请叫和最当例本
干拿取说做给靠按受收记
但又及并另只则既即将
一二三四五六七八九
是非
大小
时分秒
前后左右
东西南北中
你我他她它们
年月日
进出
新旧
有无
对错
开关
里外
多少
上下
个头

五、字体文件(MSYH.TTC)

windows 系统字体文件路径:C:\Windows\Fonts,可以从这里拷贝出来

六、测试文章

戴着眼镜,文质彬彬,我们很难把刘聪和传统印象里的农人联系起来。但实际上,35岁的“新农人”刘聪,已经在重庆田间地头种了近十年的葡萄。
 
2009年毕业于西南农业大学,从事的销售工作需要经常出差,漂泊生活无法给刘聪带来安定感。一次偶然,刘聪看了电影《林中漫步》,被影片中祥和宁静的森林景色所打动,于是辞去了原有的工作,和朋友回乡种起了葡萄。
 
然而,刘聪理想中田园生活的“美轮美奂”,在现实里被各种鸡飞狗跳替代。因为资金链缺乏、设施落后,在对抗自然灾害、虫害方面抗风险能力较低,导致第一年出品的葡萄品质非常一般。
 
不过,刘聪并没有放弃,吸取教训后更认真地钻研葡萄栽培。同时,他着手申请政府的援助项目搭建钢棚,慢慢发展起来后加大投资,又顺利申请到平安普惠惠农贷,获得平安普惠三农服务的帮助,极大缓解了创业前期的资金压力。
 
如今,刘聪的“阳光玫瑰”种植面积已经有47亩,靠种葡萄改善了家庭状况。原本反对刘聪回农村搞农业的爸妈,也慢慢开始能够理解他了。
 
像刘聪这样“归园田居”的故事,正越来越多地在现实里上演。
 
一如国庆档黑马《一点就到家》把“三个合伙人”的创业故事从城市搬到了农村,如今,回家乡早已经不是退路,而是奋斗者的另一种选择。在农村脱贫主旋律下,当代农村的创业故事,远比想象中更精彩。
 
走出贫穷的循环,
辣椒地里开出幸福花
 
在《一点就到家》里,回到云南普洱的年轻人种起咖啡,圆了咖啡梦的同时助力家乡脱贫。电影里,咖啡是一开始不被接受的“新事物”,而实际上,云南的咖啡种植历史由来已久。
 
咖啡是云南的特色产品。同样,在贵州,也有一群人靠着家乡特色产品辣椒,闯出红火事业。
 
20年前,夏可福放弃国家公职人员身份,回到贵州湄潭开始创业。一开始,夏可福差价赚钱,但他意识到光靠转卖鲜辣椒终究不是长远之计,于是他用几年的积蓄租下了一个两万平方的工厂,开始转向辣椒加工。
 
如今,公司经过产业转型升级,已发展成为湄潭县辣椒加工及销售的龙头企业,夏可福也成为了黔北一带有名企业家“夏辣椒”。
 
夏可福不仅靠卖辣椒闯出红火事业,更带动了本地老百姓增收致富。
 
值得一提的是,夏可福的公司采取“公司+基地+农户”的模式,在提供技术指导和肥料补助的基础上,与基地农户签订收购合同,实行保护价、随行就市收购和公司二次分配返还利润的办法,直接带动农民增收,与基地农户建立了紧密合作伙伴关系。
 
2019年,通过遵义市农业信贷担保公司,夏可福了解到平安普惠三农服务,认为平安普惠惠农贷这个项目能够给企业和老百姓实实在在的实惠,遂与之展开合作。
 
90后单亲妈妈杨胜颖,正是通过收购合作方夏可福的介绍推荐,了解到平安普惠三农服务,获得了100万元贷款资金支持。
 
杨胜颖家祖祖辈辈以种辣椒为生,小规模种植只够一家人谋生,一年到最后,基本没剩什么存款。
 
直到杨胜颖用这笔钱扩大了辣椒地种植面积,有了帮工,提高了生产的效率,通过自己的努力增加收入,突破了小规模种植的拮据经济状况,让生活变得滋润起来,也为孩子创造了更好的成长环境。
 
带妇女走出家庭,
小镇独立女性的创业路
 
在过去,农村女性总是全身心为小家而活,一辈子没走出过厨房,缺少独立意识。而如今,越来越多的女性有了自己的事业,杨胜颖给出了一个不同的答案,张红中又给出了另一个。
 
2015年,张红中到甘肃靖远的农投公司上班,一直在党政综合办公室工作。今年疫情稍微有所好转的时候,张红中接到通知,说要让她搞妇女创业项目。
 
菌棒生产项目是靖远县人民政府为了解决全县香菇产业菌棒用量大、外购成本高、当地贫困户就业困难等问题而决定实施的重点扶贫项目。从一个“领导要求什么就做什么”的行政岗位,到千人千法的创业,临危受命,张红中一点点学,咬着牙干了起来。
 
繁忙的工作让张红中没有太多时间顾及家庭和孩子,但家人们的理解和支持让她能够放心去干。同时,一想到基地上的五六十名女同志,她们也有家庭、孩子,都在为这份事业不断奋斗,她作为领头人也更不能先退缩。
 
同样身为女性,张红中更能与妇女们产生共情。菌棒生产车间对技术要求比较高,车间也有挺多妇女的文化水平只是在初中,她们不懂,张红中就自己学来了之后给她们上课,教懂她们一项技能。
 
项目落地后,菌棒生产项目获得了平安普惠的80万惠农金,这份灵活的资金,对张红中的经营无疑是雪中送炭。资金被用于原料采购、销售技能培训等方面,妇女们获取劳务收入的同时,也提高了就业技能和致富能力。
 
不只是菌棒生产项目,2020年4月,由中国妇女发展基金会与平安普惠合作发起的惠农金项目落地甘肃靖远县,平安普惠为项目提供了400万元资金支持,以扶持靖远县香菇脱贫基地、千亩枸杞园、菌棒生产大棚、日光温室蔬菜大棚、爱心惠民超市等5个项目。每个项目各分配80万元,主要用于生产资料的购置、女性技术及营销技能的培训和工资发放。
 
这些项目的落地,实现了近300名女性就近就业。通过技能扶贫,让女性们手握脱贫的“金钥匙”,独立走出家庭,靠自己争取出了一片天。
 
不只如此,平安普惠扶贫的脚步一直没有停过,与传承非物质文化遗产相结合,创新设计扶贫也成为平安普惠创新扶贫的重点。
 
今年八月,由平安普惠联合平安集团、经济日报报业集团艺术与设计杂志社、中国服饰报社策划的“妈妈的针线活”项目启动仪式在四川凉山西昌举行。
 
彝族女孩子们自幼学习刺绣,彝族刺绣工艺独特,是具有悠久历史的非物质文化遗产。“妈妈的针线活” 妇女手工创业扶贫项目,通过旧衣物升级改造的“再生设计”,赋予旧废服饰新生命,在振兴非物质遗产同时,帮助和带动当地贫困妇女就地就业创业,并增加收益,起到精准扶贫的效果。
 
拔掉“穷根”,
平安普惠“造鱼塘”助农
 
2020年是精准扶贫、脱贫攻坚的关键之年,平安普惠积极响应国家“十四五”规划和2035年远景目标,在中国平安“三村工程”的指导下,始终怀有强烈的社会责任感和使命感。
 
助力扶贫攻坚与乡村振兴,平安普惠以“商业向善”为核心,围绕新农村创新产业发展、妇女创业、商业可持续、文化传承等方向,积极多角度探索创新三农扶贫模式:
 
与中国扶贫基金会共同成立“平安产业扶贫公益基金”,用于建设4个扶贫新农人产业发展基地;
 
与上海宋庆龄基金会、中国妇女发展基金会合作,为贫困地区农村合作社带头人经营生产,提供免息借款惠农金和创业能力建设服务;
 
凭借自身主营业务优势,积极探索解决农村农业发展中“融资难、融资贵、融资慢”的问题,联合多家省级农业担保公司及其他基层机构,为农村创业者提供商业可持续的惠农借贷服务;
 
结合凉山非遗传承文化,探索旧衣回收、非遗设计、手工加工、市场销售的全链条闭环扶贫长效机制。
 
 
截至目前,平安普惠累计向农村合作社带头人及农创者提供扶持资金超11880万元,直接扶持超过800户贫困户,覆盖地区包括甘肃、重庆、贵州、陕西、海南、黑龙江、云南等12个省份,覆盖种植业、畜牧业、林业等多种农业类型。
 
除了为农户提供资金扶持,平安普惠更充分发挥自身优势扶贫,依托平安的人工智能、云计算和区块链三大核心科技,积极构建多元的扶贫场景,以科技赋能扶贫。
 
平安普惠的精准扶贫不只是治标,从提供资金“授人以鱼”,到技术扶贫“授人以渔”,甚至从生产到销售打通全产业链助农,平安普惠更造了个“鱼塘”,给足了农民脱贫路上“放手去干”的安全感。
 
扶贫路上,平安普惠始终不忘普惠三农服务的社会责任初衷和决心:聚焦小微、助农惠农、帮助弱势群体,多角度、全方位探索助农模式,为贫困地区农村经济和产业发展注入新鲜动力,助力建档立卡贫困户和小农户脱贫致富。