对文章进行词频的统计,分析文章的所属类型,分析文章是否满足要求,进行等等操作的时候,就需要进行词频的统计,还有就是制作一个词云图,直观显示文章的比重。
一、对英语文章的分析、
首先对文章进行特征处理(处理掉一些特殊符号);
# 对文章进行特征处理
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()
这样子就可以对文章进行词频统计以及制作词云图了,剩下的就是对词云图的样式进行调整了,这个简单就不介绍了。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/115138.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...