作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2822


1. 下载一长篇中文小说。

2. 从文件读取待分析文本。

  1. txt = open(r'G:\aa\三体.txt', 'r', encoding='utf8').read() # 打开三体小说文件
  2. jieba.load_userdict(r'G:\aa\three.txt') # 读取三体小说词库
  3.  
  4. Filess= open(r'G:\aa\stops_chinese.txt', 'r', encoding='utf8') # 打开中文停用词表
  5. stops = Filess.read().split('\n') # 以回车键作为标识符把停用词表放到stops列表中

3. 安装并使用jieba进行中文分词。

4. 更新词库,加入所分析对象的专业词汇。

  • 首先下载你要搜索的txt文本
  • 进入词库下载专业词库,参考词库下载地址:https://pinyin.sogou.com/dict/
  1. # -*- coding: utf-8 -*-
  2. import struct
  3. import os
  4.  
  5. # 拼音表偏移,
  6. startPy = 0x1540;
  7.  
  8. # 汉语词组表偏移
  9. startChinese = 0x2628;
  10.  
  11. # 全局拼音表
  12. GPy_Table = {}
  13.  
  14. # 解析结果
  15. # 元组(词频,拼音,中文词组)的列表
  16.  
  17. # 原始字节码转为字符串
  18. def byte2str(data):
  19. pos = 0
  20. str = ''
  21. while pos < len(data):
  22. c = chr(struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0])
  23. if c != chr(0):
  24. str += c
  25. pos += 2
  26. return str
  27.  
  28. # 获取拼音表
  29. def getPyTable(data):
  30. data = data[4:]
  31. pos = 0
  32. while pos < len(data):
  33. index = struct.unpack('H', bytes([data[pos],data[pos + 1]]))[0]
  34. pos += 2
  35. lenPy = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
  36. pos += 2
  37. py = byte2str(data[pos:pos + lenPy])
  38.  
  39. GPy_Table[index] = py
  40. pos += lenPy
  41.  
  42. # 获取一个词组的拼音
  43. def getWordPy(data):
  44. pos = 0
  45. ret = ''
  46. while pos < len(data):
  47. index = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
  48. ret += GPy_Table[index]
  49. pos += 2
  50. return ret
  51.  
  52. # 读取中文表
  53. def getChinese(data):
  54. GTable = []
  55. pos = 0
  56. while pos < len(data):
  57. # 同音词数量
  58. same = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
  59.  
  60. # 拼音索引表长度
  61. pos += 2
  62. py_table_len = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
  63.  
  64. # 拼音索引表
  65. pos += 2
  66. py = getWordPy(data[pos: pos + py_table_len])
  67.  
  68. # 中文词组
  69. pos += py_table_len
  70. for i in range(same):
  71. # 中文词组长度
  72. c_len = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
  73. # 中文词组
  74. pos += 2
  75. word = byte2str(data[pos: pos + c_len])
  76. # 扩展数据长度
  77. pos += c_len
  78. ext_len = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
  79. # 词频
  80. pos += 2
  81. count = struct.unpack('H', bytes([data[pos], data[pos + 1]]))[0]
  82.  
  83. # 保存
  84. GTable.append((count, py, word))
  85.  
  86. # 到下个词的偏移位置
  87. pos += ext_len
  88. return GTable
  89.  
  90. def scel2txt(file_name):
  91. print('-' * 60)
  92. with open(file_name, 'rb') as f:
  93. data = f.read()
  94.  
  95. print("词库名:", byte2str(data[0x130:0x338])) # .encode('GB18030')
  96. print("词库类型:", byte2str(data[0x338:0x540]))
  97. print("描述信息:", byte2str(data[0x540:0xd40]))
  98. print("词库示例:", byte2str(data[0xd40:startPy]))
  99.  
  100. getPyTable(data[startPy:startChinese])
  101. getChinese(data[startChinese:])
  102. return getChinese(data[startChinese:])
  103.  
  104. if __name__ == '__main__':
  105. # scel所在文件夹路径
  106. in_path = r"C:\Users\Administrator\Downloads" #修改为你的词库文件存放文件夹
  107. # 输出词典所在文件夹路径
  108. out_path = r"C:\Users\Administrator\Downloads\text" # 转换之后文件存放文件夹
  109. fin = [fname for fname in os.listdir(in_path) if fname[-5:] == ".scel"]
  110. for f in fin:
  111. try:
  112. for word in scel2txt(os.path.join(in_path, f)):
  113. file_path=(os.path.join(out_path, str(f).split('.')[0] + '.txt'))
  114. # 保存结果
  115. with open(file_path,'a+',encoding='utf-8')as file:
  116. file.write(word[2] + '\n')
  117. os.remove(os.path.join(in_path, f))
  118. except Exception as e:
  119. print(e)
  120. pass

5. 生成词频统计

  1. # 统计词频次数
  2. for word in tokens:
  3. if len(word) == 1:
  4. continue
  5. else:
  6. wcdict[word] = wcdict.get(word, 0) + 1

6. 排序

  1. # 词频排序
  2. wcls = list(wcdict.items())
  3. wcls.sort(key=lambda x: x[1], reverse=True)

7. 排除语法型词汇,代词、冠词、连词等停用词。

  1. Filess= open(r'G:\aa\stops_chinese.txt', 'r', encoding='utf8') # 打开中文停用词表
  2. stops = Filess.read().split('\n') # 以回车键作为标识符把停用词表放到stops列表中
  3.  
  4. tokens=[token for token in wordsls if token not in stops]
  5. print("过滤后中文内容对比:",len(tokens), len(wordsls))

8. 输出词频最大TOP20,把结果存放到文件里

  1. # 打印前25词频最高的中文
  2. for i in range(25):
  3. print(wcls[i])
  4.  
  5. # 存储过滤后的文本
  6. pd.DataFrame(wcls).to_csv('three.csv', encoding='utf-8')
  7.  
  8. # 读取csv词云
  9. txt = open('three.csv', 'r', encoding='utf-8').read()

9. 生成词云。

  1. # 读取csv词云
  2. txt = open('three.csv', 'r', encoding='utf-8').read()
  3.  
  4. # 用空格键隔开文本并把它弄进列表中
  5. cut_text = "".join(jieba.lcut(txt))
  6. mywc = WordCloud().generate(cut_text)
  7.  
  8. plt.imshow(mywc)
  9. plt.axis("off")
  10. plt.show()

默认形状:

修改背景:

源码:https://github.com/JGaoLin/python_chinese_word

菜鸟学IT之python词云初体验的更多相关文章

  1. 菜鸟学IT之豆瓣爬取初体验

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/3159 可以用pandas读出之前保存的数据: newsdf = pd.re ...

  2. python词云生成-wordcloud库

    python词云生成-wordcloud库 全文转载于'https://www.cnblogs.com/nickchen121/p/11208274.html#autoid-0-0-0' 一.word ...

  3. Python 词云可视化

    最近看到不少公众号都有一些词云图,于是想学习一下使用Python生成可视化的词云,上B站搜索教程的时候,发现了一位UP讲的很不错,UP也给出了GitHub上的源码,是一个很不错的教程,这篇博客主要就是 ...

  4. Python 词云分析周杰伦《晴天》

    一.前言满天星辰的夜晚,他们相遇了...夏天的时候,她慢慢的接近他,关心他,为他付出一切:秋天的时候,两个人终於如愿的在一起,分享一切快乐的时光但终究是快乐时光短暂,因为杰伦必须出国深造,两人面临了要 ...

  5. python词云的制作方法

    第一次接触到词云主要是觉得很好看,就研究了一下,官方给出了代码的,但是新手看的话还是有点不容易,我们来尝试下吧. 环境:python2.7 python库:PIL(pillow),numpy,matp ...

  6. python 词云小demo

    词云小demo jiebawordcloud 一 什么是词云? 由词汇组成类似云的彩色图形.“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过 ...

  7. Python词云生成

    一.目的 1. 熟悉jieba库和wordcloud库的使用方法: 2. 熟悉文本词频统计和词云生成的基本方法. 二.内容 1. 从网上自行下载一个长篇英文小说,统计并输出该小说中词频最大的TOP 2 ...

  8. python 词云学习

    词云入门 三步曲 数据获取:使用爬虫在相关网站上获取文本内容 数据清洗:按一定格式对文本数据进行清洗和提取(文本分类,贴标签) 数据呈现:多维度呈现和解读数据(计算,做表,画图) 一 模块的安装 pi ...

  9. python词云

    词云图 from os import path from PIL import Image import numpy as np import matplotlib.pyplot as plt fro ...

随机推荐

  1. 如何加速golang写业务的开发速度

    如何加速golang写业务的开发速度 不要忌讳panic golang写业务代码经常会被吐槽,写业务太慢了,其中最大的吐槽点就是,处理各种error太麻烦了.一个项目中,会有30%或者更多的是在处理e ...

  2. NewBuiltBottomSheetDialog【新建底部对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 演示在底部选项卡上方弹出底部对话框效果. 效果图 代码分析 NewBuiltBottomSheetDialog继承BottomShe ...

  3. MS SQL 锁与事务

    加锁的主要目的是为了防止并发操作时导致的数据不一致等问题,锁分为共享锁(S).更新锁(U).排他锁(X),共享锁与更新只是单向兼容?传说中的单相思? 事务 事务能保证数据操作的原子性,要么内部操作都提 ...

  4. SQL优化 MySQL版 - 索引分类、创建方式、删除索引、查看索引、SQL性能问题

    SQL优化 MySQL版  - 索引分类.创建方式.删除索引.查看索引.SQL性能问题 作者 Stanley 罗昊 [转载请注明出处和署名,谢谢!] 索引分类 单值索引 单的意思就是单列的值,比如说有 ...

  5. 痞子衡嵌入式:恩智浦MCU安全加密启动一站式工具NXP-MCUBootUtility用户指南

    NXP MCU Boot Utility English | 中文 1 软件概览 1.1 介绍 NXP-MCUBootUtility是一个专为NXP MCU安全加密启动而设计的工具,其特性与NXP M ...

  6. .net 配置swagger

    第一步: 在nuget.org中查找Swashbuckle并下载 在nuget.org中查找Swagger.net.UI,并下载 第二步: 下载完之后,App_Start多了三个文件 Swagger. ...

  7. Jquer + Ajax 制作上传图片文件

    没什么 说的  直接 上代码 //选择图片并上传 function selectImg(node){ var f = node.value; var file = node.files[0]; if( ...

  8. C# 在PPT中绘制形状(shape)

    概述 本篇文章将介绍C# 在PPT幻灯片中操作形状(shape)的方法.这里主要涉及常规形状,如箭头.矩形.圆形.三角形.多边形.不规则形状等.下面的示例中,可以通过绘制形状,并设置相应格式等.示例包 ...

  9. C# 合并、拆分PPT幻灯片

    概述 通过合并.拆分的功能,将不同的文档中的幻灯片进行组合形成新的的文档,同时也可以将一个多页的PPT文档按页拆分成多个不同的文档.此功能也丰富了编程人员对PPT幻灯片的操作的选择.下面将分别从以下几 ...

  10. Java设计模式---Strategy策略模式

    参考于 : 大话设计模式 马士兵设计模式视频 1.场景介绍 购物网站上有一个产品,有三个字段,档次,价格,重量. 有些同学喜欢轻的,有些手头紧,想要便宜的,有些喜欢档次高的. 那么我们为了提高网站用户 ...