词频统计以及分析(词云制作)

词频统计以及分析(词云制作)

对文章进行词频的统计,分析文章的所属类型,分析文章是否满足要求,进行等等操作的时候,就需要进行词频的统计,还有就是制作一个词云图,直观显示文章的比重。

一、对英语文章的分析、

首先对文章进行特征处理(处理掉一些特殊符号);

# 对文章进行特征处理
def getText():   
    txt = open("time.txt", "r").read()
    txt = txt.lower()                                                              # 装换为同一的大小写
    for ch in '!"#$%&()*+,-./:;<=>?@[\\]^_‘{|}~':                    # 排除这些特殊符号字符
        txt = txt.replace(ch, " ")
    return txt

其次对文章进行分裂;

hamletTxt = getText()
words = hamletTxt.split()
text = ' '.join(words)        # 把分割之后的词按照空格形式进行连接,方便制作词云

最后计算单词的词频,做出词云图;

counts = {}
for word in words:
    counts[word] = counts.get(word, 0) + 1                # 使用字典接受所有的单词的词频
items = list(counts.items())                                      # 转换为列表
items.sort(key=lambda x: x[1], reverse=True)         # 进行词频大小排序
for i in range(15):                                                    # 输出词频的前十五个
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word, count))           # 格式换输出

二、对中文文章的分析

ps:对中文进行词频统计需要使用到第三方模块(jieba),使用第三方模块进行分裂文章中的单词;

首先导入模块

import jieba

读取文章内容

txt = open("threekingdoms.txt", "r", encoding="utf-8").read()
words = jieba.lcut(txt)                 # 注意此时生成的是一个生成器,并不是一个列表,节约内存
text = ' '.join(words)        # 把分割之后的词按照空格形式进行连接,方便制作词云

计算单词的频率

for word in words:
    if len(word) == 1:
        continue
    else:
        counts[word] = counts.get(word, 0) + 1

格式化输出词频

items = list(counts.items())                # 把字典转换为列表
items.sort(key=lambda x: x[1], reverse=True)               # 列表的词频进行排序
for i in range(15):
    word, count = items[i]
    print("{0:<10}{1:>5}".format(word, count))                 # 格式化输出内容

制作词云图

导入模块

import numpy as np
from PIL import Image
from wordcloud import WordCloud
from matplotlib import pyplot as plt

选择背景图片

# 尽量选择一张背景颜色为白色的图片,没有杂色
image = Image.open("F:\background.jpg")      

# 使用numpy把图片转换为矩阵数组
img_array = np.array(image)

# 制作词云图
wc = WordCloud(
    background_color='white',
    mask=img_array,
    font_path='mingliub.ttc'           # 单词中存在中文时候,需要设置中文字体的路径
)
wc.generate_from_text(text)

fig = plt.figure(figsize=(10,10))          # 制作一张图片
plt.imshow(wc)
plt.axis("off")        # 不使用坐标轴

plt.show()

这样子就可以对文章进行词频统计以及制作词云图了,剩下的就是对词云图的样式进行调整了,这个简单就不介绍了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115138.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月10日 下午9:00
下一篇 2021年11月10日 下午10:00


相关推荐

  • 遭遇onbeforeunload

    遭遇onbeforeunload想用 JS 控制网页卸载确实是一件麻烦的事情 如果用了 unload 那么很显然我们无法阻止网页的 replace 或者 reload 因为 unload 是在下一个网页到达 client 的时候被触发的 因此我只能选择用 onbeforeunlo nbsp onbeforeunlo 被调用的时候 当前的页面尚未被 unload 所以我们还能够来得及做一些事情 但是我最近也遇到了一些麻烦 onbeforeu

    2026年3月16日
    3
  • 【转载】细聊冗余表数据一致性(架构师之路)

    【转载】细聊冗余表数据一致性(架构师之路)

    2021年11月20日
    41
  • CentOS7安装tomcat7「建议收藏」

    CentOS7安装tomcat7「建议收藏」安装说明安装环境:CentOS7安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz下载地址:http://tomcat.apache.org/download-70.cgi安装前提系统必须已经安装配置了JDK6+,如果不会安装请参考《CentOS-6.3安装配置JDK-7》。安装tomcat将apache-tomca

    2022年7月18日
    21
  • Python字符串转义符大全

    Python字符串转义符大全0 NUL 空字符 ascii 值 0 1 SOH 标题开始 ascii 值 1 2 STX 正文开始 ascii 值 2 3 ETX 正文结束 ascii 值 3 4 EOT 传输结束 ascii 值 4 5 ENQ 请求 ascii 值 5 6 ACK 收到通知 ascii 值 6 7 BEL 响铃 ascii 值 7 a BEL 响铃 ascii 值 7 b BS 退格 ascii 值 8 t HT 水平制表符 ascii 值 9 n NL 换行键 ascii 值 10 v VT 垂直制表符 ascii 值 11 f FF 换页键 ascii 值 12

    2026年3月17日
    1
  • Stopwatch类的使用

    Stopwatch类的使用Stopwatch类提供了一种方便的机制来测量运行时间。Stopwatch使用了操作系统和硬件提供的最高分辨率机制,通常少于1毫秒(相比之下DateTime.Now和Environment.TickCount的分辨率在15毫秒左右)。要使用Stopwatch,可以调用StartNew方法。这将会实例化一个Stopwatch对象并开始计时(此外,也可以先实例化,再手动调用Start方法)。Elap…

    2022年6月23日
    59
  • java单例模式_Java单例模式

    java单例模式_Java单例模式单例(Singleton)模式是Java中最简单的设计模式之一。这种类型的设计模式属于创建模式,因为此模式提供了创建对象的最佳方法之一。这种模式涉及一个类,它负责创建一个对象,同时确保只创建一个对象。这个类提供了一种方法来访问它的唯一对象,可以直接访问,而不需要实例化类的对象。实现实例我们将创建一个单一对象类-SingleObject。单个对象(SingleObject)类的构造函数是私有的,…

    2022年7月8日
    26

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号