使用python处理中文文本并创造词云图

1.前言

利用爬虫爬取网上新闻,评论,并从中分析最近社会热点,是数据科学,人工智能中的热点之一,其中在分析文本中使用词云图,看起来简洁明了,因为如下图出现频率最高的词会显示在屏幕最中央,同时更有意思的我们可以利用不同的图片使得词云图呈现出不同的形状,那么具体是如何完成的呢,我们从下面开始逐渐分析

2.数据集介绍

​ 这里我采用的是最近中文新闻网站上所抓取的数类新闻数据,并且已经提前分好类了(这个文本同时可以用来做文本分类,我最近也正好在做这个,如果对于这种大数据中文文本处理有经验的大佬,欢迎赐教):

3.预处理数据集

对于这样的数据集(拥有多个sheet的EXCEL),我们可以考虑使用pandas配合XLRD库来进行读取从而把所有的子表读取到数据中,代码编写如下:

import xlrd
import pandas as pd
from pandas import DataFrame
excel_name = '文本.xlsx'
wb = xlrd.open_workbook(excel_name)# 获取workbook中所有的表格
sheets = wb.sheet_names()# 循环遍历所有sheet
df_28 = DataFrame()
for i in range(len(sheets)):df = pd.read_excel(excel_name, sheet_name=i)df_28 = df_28.append(df)
data = df_28
#这样我们就将所有数据读取到dataFrame对象的data

在介绍如何处理之前,我这里先简单介绍一下我们这次处理数据的目的,我们的词云图是通过统计所有文本中出现的单词频率,但是我们的数据却是这样:

content = data['content']
print(content.iloc[1])
输出:
北京3月31日电 (记者 王恩博)记者3月31日从中国银保监会获悉,官方将坚决惩治重大金融风险背后的腐败问题。破坏监管秩序、市场秩序,造成国有金融资产重大损失甚至诱发风险事件的,一律严惩不贷。银保监会表示,近年来,银保监会党委坚决贯彻落实中共中央全面从严治党重大决策部署,坚持从惩治腐败和防范化解金融风险大局出发,深化金融领域反腐力度,积极支持、全力配合驻会纪检监察组,严查重大金融风险、监管失职失守背后的腐败问题并向金融基础设施等领域延伸。谈及下一步工作,银保监会表示,将坚决惩治重大金融风险背后的腐败问题。坚持无禁区、全覆盖、零容忍,坚持重遏制、强高压、长震慑,重点关注高风险机构和地区,持续深入查处重大风险事件、金融案件背后的利益输送、监管失守问题,特别是破坏监管秩序、市场秩序,造成国有金融资产重大损失甚至诱发风险事件的,一律严惩不贷。同时,落实中共十九届五中全会和中央经济工作会议对新时代经济金融工作作出一系列重大决策部署,重点做好反垄断和防止资本无序扩张、提高金融服务实体经济发展效能、妥善处置银行业保险业重大风险、规范发展城商行和农村中小金融机构、完善现代金融监管体系、强化金融消费者权益保护等工作。银保监会还提及,坚决严查违反中央八项规定精神案件,坚定释放越往后盯得越紧、执纪越严的信号。对拉拢腐蚀监管干部的金融机构和人员,严格执行“双通报”;落实行贿受贿一起查处,涉及金融机构及其人员违法违规违纪问题,及时通报监管部门,督促作出严肃处理。(完)

然后我们就发现中文和英文的天大区别,英文的每一句话是有一堆单词加空格组成的,例如

英文:I love you.这句话里其中每个单词之间是有间隔的,我们如果要对这句话进行处理的话,我们可以直接利用空格将句子简单的切成三个单词 ‘I’,‘love’,‘you’,而而我们的中文却与之相反,

中文:我喜欢你。这句话我们还能使用空格划分句子吗?显然是不能的,那么如何处理呢,这里我们可以用他人以及训练好的模型,jieba库的cut方法从而来处理中文文本,代码如下:

import re
import jieba.posseg as pseg
def word_slice(lines):corpus = []corpus.append(lines.strip())stripcorpus = corpus.copy()for i in range(len(corpus)):stripcorpus[i] = re.sub("@([\s\S]*?):", "", corpus[i])  # 去除@ ...:stripcorpus[i] = re.sub("\[([\S\s]*?)\]", "", stripcorpus[i])  # [...]:stripcorpus[i] = re.sub("@([\s\S]*?)", "", stripcorpus[i])  # 去除@...stripcorpus[i] = re.sub("[\s+\.\!\/_,$%^*(+\"\']+|[+——!,。?、~@#¥%……&*()]+", "", stripcorpus[i])  # 去除标点及特殊符号stripcorpus[i] = re.sub("[^\u4e00-\u9fa5]", "",stripcorpus[i])  # 去除所有非汉字内容(英文数字)stripcorpus[i] = re.sub("原标题", "", stripcorpus[i])stripcorpus[i] = re.sub("回复", "", stripcorpus[i])stripcorpus[i] = re.sub("(完)", "", stripcorpus[i])   # 相当于replace#这里先使用re库清洗数据,将不影响原文意思和特殊字符全部去除onlycorpus = []for string in stripcorpus:if(string == ''):continueelse:if(len(string) < 5):continueelse:onlycorpus.append(string)cutcorpusiter = onlycorpus.copy()cutcorpus = onlycorpus.copy()wordtocixing = []  # 储存分词后的词语for i in range(len(onlycorpus)):cutcorpusiter[i] = pseg.cut(onlycorpus[i])print(cutcorpusiter[i])cutcorpus[i] = ""for every in cutcorpusiter[i]:cutcorpus[i] = (cutcorpus[i] + " " + str(every.word)).strip()wordtocixing.append(every.word)return wordtocixing
fp = open('text2.txt', "w+", encoding='utf-8')
lenx=[]
for string in content:if not isinstance(string,str):continuelines=word_slice(string)lenx.append(len(lines))for line in lines:fp.write(line)fp.write(' ')fp.write('\n')
fp.close()
#这里我的方法是将切割后的文本全部存储到一个text2.txt,方便以后使用,每一句的所有单词在同一行吗,同时以换行符来区分每个句子

这里最终形成的text2.txt样式如下:

4.使用wordcloud库制造词云图

python拥有一个wordcloud库,可以形成词云图,所以我们编写代码如下

import numpy as np
from PIL import Image
from wordcloud import WordCloud, ImageColorGenerator
from matplotlib import pyplot as plt
from collections import Counter
def split_four_text(words):words_list=list(words)words=[ lst.split(' ') for lst in words_list]result=[]for wordslst in words:for word in wordslst:result.append(word)# 用Counter方法计算单词频率数count = Counter(result)most_count = count.most_common()words_list = []for i in most_count:if len(i[0]) >= 4:#一个中文占据两个字节,然后我们只要大于四个字节的单词words_list.append(i[0])return words_listdef draw_wordcloud(text, image_mask,):
# draw_wordcloud函数以用户定义的模板轮廓图来显示中文词云。sanguo_mask = np.array(Image.open(image_mask))wordcloud = WordCloud(background_color = 'white', mask = sanguo_mask, max_words = 1000,font_path='C:\\Windows\\STCAIYUN.TTF') # 如果不设置中文字体,可能会出现乱码)wordcloud.generate(text)image_colors = ImageColorGenerator(sanguo_mask)wordcloud.to_file("wordcloud_jiaran.jpg")#存储图片plt.figure(figsize = (14, 8))# 创建左侧中文词云图plt.subplot(1,2,1)plt.imshow(wordcloud.recolor(color_func = image_colors), interpolation = 'bilinear')plt.axis('off')# 创建右侧原图plt.subplot(1,2,2)plt.imshow(sanguo_mask, interpolation = 'bilinear')plt.axis('off')plt.show()
text_content = open('text2.txt',encoding='UTF-8')
str1 = split_four_text(words=text_content)# 由于split_four_text函数返回的是一个list类型,词云只接收字符串或者二进制形式输入,
# 所以用str()函数转换为字符串。
draw_wordcloud(text = str(str1), image_mask = 'jiaran.jpg')#image_mask决定我们要输入的词云形状

关于词云的字体如果我们默认不使用的话,由于是中文买就会出现乱码集中文被一堆矩形框所代替,所以我们需要进入C:\Windows\Fonts文件夹下寻找中文字体:

然后在属性中查看该字体的名字,从而使用,比如我选择的是’C:\Windows\STCAIYUN.TTF’,那么通过这样的方法我产生了五张不同形状的词云图





结语

这五个可爱的女孩子是虚拟偶像欧,感谢她们给博主最近无聊乏味的生活中增添了不知多少趣味,如果不麻烦的话麻烦B站关注,多谢

嘉然今天吃什么的个人空间 - 哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili

贝拉kira的个人空间 - 哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili

向晚大魔王的个人空间 - 哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili

乃琳Queen的个人空间 - 哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili

珈乐Carol的个人空间 - 哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili
同时如果对博主这篇博客有任何错误或者建议欢迎评论区交流。

如何使用python处理中文文本--近几个月的新闻数据分析社会热点并创造词云图相关推荐

  1. python读入中文文本编码错误

    python读入中文文本编码错误 python读入中文txt文本: #coding:utf-8def readFile():fp = open('emotion_dict//neg//neg_all_ ...

  2. Python处理中文文本

    Python处理中文文本 author:Ernest 使用Python处理文本是件十分有趣的任务,通过某些操作,你可以自由地获取到你所需要的内容,下面就来看看怎么做吧. 要求 1.选择一部长度合适的小 ...

  3. 基于Python实现中文文本关键词抽取的三种方法 课程报告+项目源码及数据

    资源下载地址:https://download.csdn.net/download/sheziqiong/85737856 资源下载地址:https://download.csdn.net/downl ...

  4. Python 任意中文文本生成词云 最终版本

    前叙 利用下面的代码你将可以将任意中文文本生成词云,其分词部分由jieba,NLPIR2016两个部分组成,生成词语由worldcloud负责,默认会自动发现文本中的20个新词并添加到词库中,当然你也 ...

  5. 使用python对中文文本进行分词

    何为中文分词,指的是将一个汉字序列切分成一个个单独的词. 这里我们推荐使用jieba分词,它是专门使用python语言开发的分词系统,占用资源较少,常识类文档的分词精度较高. 我们可以去网上下载jie ...

  6. [原创]python计算中文文本相似度神器

    介绍 最近因为工作需要,需要使用一个功能,就是中文文本相似度的计算.属于nlp领域的一个应用吧,这里找到一个非常好的包和大家分享.这个包叫sentence-transformers. 这里给大家介绍, ...

  7. python实现中文文本分句

    对于英文文本分句比较简单,只要根据终结符"."划分就好,中文文本分句看似很简单,但是实现时会遇到很多麻烦,尤其是处理社交媒体数据时,会遇到文本格式不规范等问题.下面代码针对一段一段 ...

  8. python打开中文文本utf-8用不了_关于Python文档读取UTF-8编码文件问题

    近来接到一个小项目,读取目标文件中每一行url,并逐个请求url,拿到想要的数据. #-*- coding:utf-8 -*- classIpUrlManager(object):def __init ...

  9. python读中文文本_python读取中文txt文本

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

最新文章

  1. 如何在OpenCV中为InRange阈值选择颜色的最佳HSV值
  2. 2015年十佳IDC评选结果:50强名单揭晓
  3. 倒排索引PForDelta压缩算法——基本假设和霍夫曼压缩同
  4. P1004 滑雪(DFS)
  5. .NET Core on K8S 学习与实践系列文章索引 (更新至20191116)
  6. centos 本地化配置
  7. windows快速搭建activity6.0
  8. bi导入数据失败 power_主机数据库平台迁移 6 个典型问题
  9. 数字电视智能卡的定义
  10. JOIN查询流程与驱动表
  11. VGA常用分辨率及计算方法
  12. Cpu调优 mpstat 命令
  13. 管理Discuz!代码分析的收集整理
  14. 视频配音怎么配出好听的声音?试试这三个视频配音方法
  15. vue 拖拽【单个div实现拖拽】
  16. Ansys(Maxwell、Simplorer)与Simulink联合仿真入门
  17. asp数组中REDIM的用法(动态数组)
  18. 【电路第七章之I篇】一阶电路的零输入响应分析
  19. jav中的各种配置文件
  20. pytorch - K折交叉验证过程说明及实现

热门文章

  1. 用户和用户组变成了数字
  2. 识别您的英特尔® 无线适配器和 Wi-Fi 驱动程序版本号
  3. 【听】植物知道生命的答案,生命的奇迹探索
  4. 一个草根站长的逆袭之旅
  5. HTML - 鼠标光标属性
  6. 网优谷给零基础JAVA新人的一些建议
  7. linux 磁盘缓存设置,Linux下的磁盘缓存
  8. uipath sequence传递参数_界面换热和压力传递的相互影响机制 | 压铸过程高级分析...
  9. 企业线上培训平台哪个比较好
  10. 得胜20周年重拳出击,全省狂销1.5亿