$好玩的分词——绘制《三体》全集词云

2023-11-22 08:10

本文主要是介绍$好玩的分词——绘制《三体》全集词云,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

另参见:好玩的分词——分析一下《三体》全集

在好玩的分词——分析一下《三体》全集一文中,通过分词获取到了三体全集文本中topn的词及词频,那么本文中进一步用词云的形式来展现出来。

废话不多说,直接上代码:

#!/usr/bin/python
# coding:utf-8
# 绘制一个《三体》全集词云
import sys
from collections import Counter
import jieba.posseg as psg
import matplotlib.pyplot as plt
from scipy.misc import imread
from wordcloud import WordCloud,ImageColorGenerator# 对文本分词并标注词性,并缓存到文件
def cut_and_cache(text):# 将文本分词,并附带上词性,因为数据量比较大,防止每次运行脚本都花大量时间,所以第一次分词后就将结果存入文件cut_result.txt中# 相当于做一个缓存,格式为每个词占一行,每一行的内容为:# 词,词性words_with_attr = [(x.word,x.flag) for x in psg.cut(text) if len(x.word) >= 2]print len(words_with_attr)with open('cut_result.txt','w+') as f:for x in words_with_attr:f.write('{0}\t{1}\n'.format(x[0],x[1]))  return words_with_attr # 从cut_result.txt中读取带词性的分词结果列表
def read_cut_result():words_with_attr = []with open('cut_result.txt','r') as f:for x in f.readlines():# 这里解码成utf-8格式,是为了防止后面生成词云的时候出现乱码x = x.decode('utf-8')pair = x.split()if len(pair) < 2:continuewords_with_attr.append((pair[0],pair[1]))return words_with_attr# 统计在分词表中出现次数排名前topn的词的列表,并将结果输出到文件topn_words.txt中,每行一个词,格式为:
# 词,出现次数
def get_topn_words(words,topn):c = Counter(words).most_common(topn)top_words_with_freq = {}with open('top{0}_words.txt'.format(topn),'w+') as f:for x in c:f.write('{0},{1}\n'.format(x[0],x[1]))top_words_with_freq[x[0]] = x[1]return top_words_with_freq# 传入文本文件的路径file_path和topn,获取文本文件中topn关键词列表及词频
def get_top_words(file_path,topn):# 读取文本文件,然后分词并缓存,只需运行一次,后续运行脚本可注释掉下面两行text = open(file_path).read()words_with_attr = cut_and_cache(text)# 从cut_result.txt中读取带词性的分词结果列表words_with_attr = read_cut_result()# 要过滤掉的词性列表stop_attr = ['a','ad','b','c','d','f','df','m','mq','p','r','rr','s','t','u','v','z']# 过滤掉不需要的词性的词words = [x[0] for x in words_with_attr if x[1] not in stop_attr]# 获取topn的词并存入文件topn_words.txt,top_words_with_freq为一个字典,在生成词云的时候会用到,格式为:# {'aa':1002,'bb':879,'cc':456}top_words_with_freq = get_topn_words(words = words,topn = topn)return top_words_with_freq# 根据传入的背景图片路径和词频字典、字体文件,生成指定名称的词云图片
def generate_word_cloud(img_bg_path,top_words_with_freq,font_path,to_save_img_path,background_color = 'white'):# 读取背景图形img_bg = imread(img_bg_path)# 创建词云对象wc = WordCloud(font_path = font_path,  # 设置字体background_color = background_color,  # 词云图片的背景颜色,默认为白色max_words = 500,  # 最大显示词数为1000mask = img_bg,  # 背景图片蒙版max_font_size = 50,  # 字体最大字号random_state = 30,  # 字体的最多模式width = 1000,  # 词云图片宽度margin = 5,  # 词与词之间的间距height = 700)  # 词云图片高度# 用top_words_with_freq生成词云内容wc.generate_from_frequencies(top_words_with_freq)# 用matplotlib绘出词云图片显示出来plt.imshow(wc)plt.axis('off')plt.show()# 如果背景图片颜色比较鲜明,可以用如下两行代码获取背景图片颜色函数,然后生成和背景图片颜色色调相似的词云#img_bg_colors = ImageColorGenerator(img_bg)#plt.imshow(wc.recolor(color_func = img_bg_colors))# 将词云图片保存成图片wc.to_file(to_save_img_path)def main():# 设置环境为utf-8编码格式,防止处理中文出错reload(sys)sys.setdefaultencoding('utf-8')# 获取topn词汇的'词:词频'字典,santi.txt是当前目录下三体全集的文本top_words_with_freq = get_top_words('./santi.txt',300)# 生成词云图片,bg.jpg是当前目录下的一副背景图片,yahei.ttf是当前目录下微软雅黑字体文件,santi_cloud.png是要生成的词云图片名generate_word_cloud('./bg.jpg',top_words_with_freq,'./yahei.ttf','./santi_cloud.png')print 'finish'if __name__ == '__main__':main()

上述代码中,bg.jpg图片如下,是一只豹子的剪影,像一个在黑暗森林中潜伏的猎人:
这里写图片描述

注:作为词云背景的图片一定要轮廓分明,且图片主体颜色要和图片自身的背景颜色对比度较大,这样生成的词云图片才能更清晰。一般剪影图片更容易满足这种要求。

此外,三体全集santi.txt文本从网上很好搜到。

运行上述代码,生成的词云图片如下:
这里写图片描述

最后,可以将这里的背景图片和文本文件修改成其他的图片和文本路径,那么运行上面代码就可以马上得到自己想要的词云了!

转载于:https://www.cnblogs.com/jiayongji/p/7119080.html

这篇关于$好玩的分词——绘制《三体》全集词云的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/408723

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

Solr 使用Facet分组过程中与分词的矛盾解决办法

对于一般查询而言  ,  分词和存储都是必要的  .  比如  CPU  类型  ”Intel  酷睿  2  双核  P7570”,  拆分成  ”Intel”,”  酷睿  ”,”P7570”  这样一些关键字并分别索引  ,  可能提供更好的搜索体验  .  但是如果将  CPU  作为 Facet  字段  ,  最好不进行分词  .  这样就造成了矛盾  ,  解决方法

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

Java实现Smartcn中文分词

新建一个Maven项目,修改pom.xml文件内容:注意版本的不同; <!-- https://mvnrepository.com/artifact/org.apache.lucene/lucene-analyzers-smartcn --><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-analyzers

使用matplotlib绘制散点图、柱状图和饼状图-学习篇

一、散点图 Python代码如下: num_points = 100x = np.random.rand(num_points) #x点位随机y = np.random.rand(num_points) #y点位随机colors = np.random.rand(num_points) #颜色随机sizes = 1000 * np.random.rand(num_points) # 大

黑神话:悟空》增加草地绘制距离MOD使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验

《黑神话:悟空》增加草地绘制距离MOD为玩家提供了一种全新的视觉体验,通过扩展游戏中草地的绘制距离,增加了场景的深度和真实感。该MOD通过增加草地的绘制距离,使游戏场景看起来更加广阔与自然,增强了游戏的沉浸式体验。 增加草地绘制距离MOD安装 1、在%userprofile%AppDataLocalb1SavedConfigWindows目录下找到Engine.ini文件。 2、使用记事本编辑

Excel绘制CDF图

对如下20个原始数据绘制cdf图 1. 对数据进行排序,从小到大 2. 计算累积分布: 计算公式为: 然后对C3下拉,得到累积分布数据。 3. 选中B、C两列绘制散点图: