菜鸟学IT之python词云初体验
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2822
1. 下载一长篇中文小说。
2. 从文件读取待分析文本。
- txt = open(r'G:\aa\三体.txt', 'r', encoding='utf8').read() # 打开三体小说文件
- jieba.load_userdict(r'G:\aa\three.txt') # 读取三体小说词库
- Filess= open(r'G:\aa\stops_chinese.txt', 'r', encoding='utf8') # 打开中文停用词表
- stops = Filess.read().split('\n') # 以回车键作为标识符把停用词表放到stops列表中
3. 安装并使用jieba进行中文分词。
4. 更新词库,加入所分析对象的专业词汇。
- 首先下载你要搜索的txt文本
- 进入词库下载专业词库,参考词库下载地址:https://pinyin.sogou.com/dict/
- # -*- coding: utf-8 -*-
- import struct
- import os
- # 拼音表偏移,
- startPy = 0x1540;
- # 汉语词组表偏移
- startChinese = 0x2628;
- # 全局拼音表
- GPy_Table = {}
- # 解析结果
- # 元组(词频,拼音,中文词组)的列表
- # 原始字节码转为字符串
- def byte2str(data):
- pos = 0
- str = ''
- while pos < len(data):
- c = chr(struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0])
- if c != chr(0):
- str += c
- pos += 2
- return str
- # 获取拼音表
- def getPyTable(data):
- data = data[4:]
- pos = 0
- while pos < len(data):
- index = struct.unpack('H', bytes([data[pos],data[pos + 1]]))[0]
- pos += 2
- lenPy = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
- pos += 2
- py = byte2str(data[pos:pos + lenPy])
- GPy_Table[index] = py
- pos += lenPy
- # 获取一个词组的拼音
- def getWordPy(data):
- pos = 0
- ret = ''
- while pos < len(data):
- index = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
- ret += GPy_Table[index]
- pos += 2
- return ret
- # 读取中文表
- def getChinese(data):
- GTable = []
- pos = 0
- while pos < len(data):
- # 同音词数量
- same = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
- # 拼音索引表长度
- pos += 2
- py_table_len = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
- # 拼音索引表
- pos += 2
- py = getWordPy(data[pos: pos + py_table_len])
- # 中文词组
- pos += py_table_len
- for i in range(same):
- # 中文词组长度
- c_len = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
- # 中文词组
- pos += 2
- word = byte2str(data[pos: pos + c_len])
- # 扩展数据长度
- pos += c_len
- ext_len = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
- # 词频
- pos += 2
- count = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
- # 保存
- GTable.append((count, py, word))
- # 到下个词的偏移位置
- pos += ext_len
- return GTable
- def scel2txt(file_name):
- print('-' * 60)
- with open(file_name, 'rb') as f:
- data = f.read()
- print("词库名:", byte2str(data[0x130:0x338])) # .encode('GB18030')
- print("词库类型:", byte2str(data[0x338:0x540]))
- print("描述信息:", byte2str(data[0x540:0xd40]))
- print("词库示例:", byte2str(data[0xd40:startPy]))
- getPyTable(data[startPy:startChinese])
- getChinese(data[startChinese:])
- return getChinese(data[startChinese:])
- if __name__ == '__main__':
- # scel所在文件夹路径
- in_path = r"C:\Users\Administrator\Downloads" #修改为你的词库文件存放文件夹
- # 输出词典所在文件夹路径
- out_path = r"C:\Users\Administrator\Downloads\text" # 转换之后文件存放文件夹
- fin = [fname for fname in os.listdir(in_path) if fname[-5:] == ".scel"]
- for f in fin:
- try:
- for word in scel2txt(os.path.join(in_path, f)):
- file_path=(os.path.join(out_path, str(f).split('.')[0] + '.txt'))
- # 保存结果
- with open(file_path,'a+',encoding='utf-8')as file:
- file.write(word[2] + '\n')
- os.remove(os.path.join(in_path, f))
- except Exception as e:
- print(e)
- pass
5. 生成词频统计
- # 统计词频次数
- for word in tokens:
- if len(word) == 1:
- continue
- else:
- wcdict[word] = wcdict.get(word, 0) + 1
6. 排序
- # 词频排序
- wcls = list(wcdict.items())
- wcls.sort(key=lambda x: x[1], reverse=True)
7. 排除语法型词汇,代词、冠词、连词等停用词。
- Filess= open(r'G:\aa\stops_chinese.txt', 'r', encoding='utf8') # 打开中文停用词表
- stops = Filess.read().split('\n') # 以回车键作为标识符把停用词表放到stops列表中
- tokens=[token for token in wordsls if token not in stops]
- print("过滤后中文内容对比:",len(tokens), len(wordsls))
8. 输出词频最大TOP20,把结果存放到文件里
- # 打印前25词频最高的中文
- for i in range(25):
- print(wcls[i])
- # 存储过滤后的文本
- pd.DataFrame(wcls).to_csv('three.csv', encoding='utf-8')
- # 读取csv词云
- txt = open('three.csv', 'r', encoding='utf-8').read()
9. 生成词云。
- # 读取csv词云
- txt = open('three.csv', 'r', encoding='utf-8').read()
- # 用空格键隔开文本并把它弄进列表中
- cut_text = "".join(jieba.lcut(txt))
- mywc = WordCloud().generate(cut_text)
- plt.imshow(mywc)
- plt.axis("off")
- plt.show()
默认形状:
修改背景:
菜鸟学IT之python词云初体验的更多相关文章
- 菜鸟学IT之豆瓣爬取初体验
作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159 可以用pandas读出之前保存的数据: newsdf = pd.re ...
- python词云生成-wordcloud库
python词云生成-wordcloud库 全文转载于'https://www.cnblogs.com/nickchen121/p/11208274.html#autoid-0-0-0' 一.word ...
- Python 词云可视化
最近看到不少公众号都有一些词云图,于是想学习一下使用Python生成可视化的词云,上B站搜索教程的时候,发现了一位UP讲的很不错,UP也给出了GitHub上的源码,是一个很不错的教程,这篇博客主要就是 ...
- Python 词云分析周杰伦《晴天》
一.前言满天星辰的夜晚,他们相遇了...夏天的时候,她慢慢的接近他,关心他,为他付出一切:秋天的时候,两个人终於如愿的在一起,分享一切快乐的时光但终究是快乐时光短暂,因为杰伦必须出国深造,两人面临了要 ...
- python词云的制作方法
第一次接触到词云主要是觉得很好看,就研究了一下,官方给出了代码的,但是新手看的话还是有点不容易,我们来尝试下吧. 环境:python2.7 python库:PIL(pillow),numpy,matp ...
- python 词云小demo
词云小demo jiebawordcloud 一 什么是词云? 由词汇组成类似云的彩色图形.“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过 ...
- Python词云生成
一.目的 1. 熟悉jieba库和wordcloud库的使用方法: 2. 熟悉文本词频统计和词云生成的基本方法. 二.内容 1. 从网上自行下载一个长篇英文小说,统计并输出该小说中词频最大的TOP 2 ...
- python 词云学习
词云入门 三步曲 数据获取:使用爬虫在相关网站上获取文本内容 数据清洗:按一定格式对文本数据进行清洗和提取(文本分类,贴标签) 数据呈现:多维度呈现和解读数据(计算,做表,画图) 一 模块的安装 pi ...
- python词云
词云图 from os import path from PIL import Image import numpy as np import matplotlib.pyplot as plt fro ...
随机推荐
- 如何加速golang写业务的开发速度
如何加速golang写业务的开发速度 不要忌讳panic golang写业务代码经常会被吐槽,写业务太慢了,其中最大的吐槽点就是,处理各种error太麻烦了.一个项目中,会有30%或者更多的是在处理e ...
- NewBuiltBottomSheetDialog【新建底部对话框】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 演示在底部选项卡上方弹出底部对话框效果. 效果图 代码分析 NewBuiltBottomSheetDialog继承BottomShe ...
- MS SQL 锁与事务
加锁的主要目的是为了防止并发操作时导致的数据不一致等问题,锁分为共享锁(S).更新锁(U).排他锁(X),共享锁与更新只是单向兼容?传说中的单相思? 事务 事务能保证数据操作的原子性,要么内部操作都提 ...
- SQL优化 MySQL版 - 索引分类、创建方式、删除索引、查看索引、SQL性能问题
SQL优化 MySQL版 - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...
- 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南
NXP MCU Boot Utility English | 中文 1 软件概览 1.1 介绍 NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP M ...
- .net 配置swagger
第一步: 在nuget.org中查找Swashbuckle并下载 在nuget.org中查找Swagger.net.UI,并下载 第二步: 下载完之后,App_Start多了三个文件 Swagger. ...
- Jquer + Ajax 制作上传图片文件
没什么 说的 直接 上代码 //选择图片并上传 function selectImg(node){ var f = node.value; var file = node.files[0]; if( ...
- C# 在PPT中绘制形状(shape)
概述 本篇文章将介绍C# 在PPT幻灯片中操作形状(shape)的方法.这里主要涉及常规形状,如箭头.矩形.圆形.三角形.多边形.不规则形状等.下面的示例中,可以通过绘制形状,并设置相应格式等.示例包 ...
- C# 合并、拆分PPT幻灯片
概述 通过合并.拆分的功能,将不同的文档中的幻灯片进行组合形成新的的文档,同时也可以将一个多页的PPT文档按页拆分成多个不同的文档.此功能也丰富了编程人员对PPT幻灯片的操作的选择.下面将分别从以下几 ...
- Java设计模式---Strategy策略模式
参考于 : 大话设计模式 马士兵设计模式视频 1.场景介绍 购物网站上有一个产品,有三个字段,档次,价格,重量. 有些同学喜欢轻的,有些手头紧,想要便宜的,有些喜欢档次高的. 那么我们为了提高网站用户 ...