文本词频统计
一、 纯英文文本词频统计
http://www.chenyoude.com/预科班/hamlet.txt
问题分析:
实现代码
# 读取文件
t = open(r'C:Users青柠Desktop预科第六天factory','r').read()
# 将读取文件小写化并以空格分割
t = t.lower().split(' ')
word = {} # 使用字典存储读入的数据
for i in t:
if i not in word:
word[i] = 1
else:
word[i] +=1
# 使用函数取出单词出现的次数 方便排序
def func(i):
return i[1]
list = list(word.items()) # 将字典转化为元组(元组可排序)
list.sort(key = func) # 将函数取出来的次数进行初始排序
list.reverse() # 反转,降序排列
for i in list[0:10]: # 规格化输出
print(f'{i[0]:^7}{i[1]^5}')
输出结果:
the 786
and 593
of 522
to 505
a 381
my 370
in 325
you 319
i 294
his 238
二、纯中文文本词频统计
http://www.chenyoude.com/预科班/threekingdoms.html
问题分析
实现代码
# 使用结巴库进行中文文本断句
import jieba
t = open(r'C:Users青柠Desktop预科第六天sanguo','r',encoding='utf-8').read()
t = jieba.lcut(t)
word = {}
for i in t:
# 进行文本去噪,不需要打印的去除
if len(i) == 1:
continue
if i in {"将军", "却说", "荆州", "二人", "不可", "不能", "如此", "商议"}:
continue
if '曰' in i:
continue
if i in word:
word[i] += 1
else:
word[i] = 1
def func(i):
return i[1]
list = list(word.items())
list.sort(key=func)
list.reverse()
for i in list[0:10]:
print(i[0],i[1])
输出结果:
曹操 953
孔明 836
玄德 585
关公 510
丞相 491
张飞 358
如何 338
主公 331
军士 317
吕布 300