案例:三国小说主要人物出场频率统计

首先导入必要的模块:

import jieba

from collections import Counter

from wordcloud import WordCloud

注释:导入模块之前,需要先下载 jieba模块 和 WordCloud模块

pip install jieba

pip install WordCloud

先举个栗子:

import jieba

# 使用 jieba 分词

txt = '我来到北京清华大学'

seg_list = jieba.lcut(txt)

print(seg_list)

这个代码块主要使用了 jieba库 来实现对字符串的分割

输出:

Building prefix dict from the default dictionary ...

Building prefix dict from the default dictionary ...

Loading model from cache C:\Users\ADMINI~1\AppData\Local\Temp\jieba.cache

Loading model cost 0.810 seconds.

Prefix dict has been built succesfully.

['我', '来到', '北京', '清华大学']

Process finished with exit code 0

那么,说完了上面的基本操作,现在进入正题。

第一步:导入电子版文档,存储在sanguo.txt中(当然,也可以使用迭代对象来分次导入,好处是节约内存)

with open('sanguo.txt','r', encoding='utf-8') as f:

# 打开文件路径

txt = f.read() # 这里直接导入

第二步:将字符串分割成等量的中文

words = jieba.lcut(txt)

print(words)

# ‘人物名字’:出现次数

输出:

', '汉中', ';', '达', '与', '李严', '曾结', '生死之交', ';', '臣', '回', '成都', '时留', '李', '严守', '永安', '宫', ';', '臣', '已作', '一书', '、', '只', '做', '李严', '亲笔', '令人', '送与', '孟达',, ';', '达', '必然', '推病', '不出', '以慢', '军心', ':', '此', '一路', '又', '不足', '忧', '矣', '。', '又', '知', '曹真', '引兵', '犯', '阳平关', ';', '此地', '险峻', # 这里只是一部分

第三步:一个小说中,按照常理,主角的名字不会是一个字,所以要筛选出大于1的字符串

counts = {} #创建空字典

for word in words: # 遍历字典

if len(word) == 1:

continue

else:

# 往字典里添加元素

#counts['key'] = 888

counts[word] = counts.get(word, 0) + 1

# counts['曹操'] = counts.get('曹操', 0) + 1

print(counts)

输出:

{'正文': 1, '第一回': 1, '桃园': 19, '豪杰': 22, '结义': 14, '黄巾': 40, '英雄': 82, '立功': 22, '滚滚': 5, '长江': 25, '逝水': 1, '浪花': 1, '淘尽': 1, '是非成败': 1, '转头': 2, '青山': 1, '依旧': 11, '几度': 1, '夕阳红': 1, '渔樵': 1, '江渚': 2, '上惯': 1, '秋月春风': 1, } # 这里只是一部分

第四步:删除 无关词。例如:将军", "却说", "丞相", "二人", "不可", "荆州", "不能", "如此", "商议", "如何", "主公", "军士", "军马", "左右", "次日", "引兵", "大喜", "天下","东吴", "于是", "今日", "不敢", "魏兵", "陛下", "都督", "人马", "不知",...等。

在一篇文章中,除一个字符之外的其他多字符若不是人物名字,需要删除

# 定义无关词集合

excludes = {"将军", "却说", "丞相", "二人", "不可", "荆州", "不能", "如此", "商议",

"如何", "主公", "军士", "军马", "左右", "次日", "引兵", "大喜", "天下",

"东吴", "于是", "今日", "不敢", "魏兵", "陛下", "都督", "人马", "不知",

'玄德曰', '孔明曰', '刘备', '关公', '孔明曰', '玄德曰', '先主', '此人',

'上马', '大叫', '后主', '众将', '只见', '一人', '汉中', '太守', '天子',}

for word in excludes:

del counts[word]

第五步:将一些字符串整合在一起,比如‘孔明’和‘孔明曰’,‘玄德’和‘玄德曰’等等

counts['孔明'] = counts.get('孔明') + counts.get('孔明曰')

counts['玄德'] = counts.get('玄德') + counts.get('玄德曰')

counts['玄德'] = counts.get('玄德') + counts.get('刘备')

counts['云长'] = counts.get('关公') + counts.get('云长')

第六步:统计出现频率最高的前10个词

items = list(counts.items())

items.sort(key=lambda x: x[1], reverse=True) # 使用了隐函数

# print('排序后:', items)

for i in range(10):

character, count = items[i]

print(character, count)

输出:

孔明 1204

玄德 1159

曹操 910

张飞 340

孙权 259

吕布 258

赵云 254

云长 241

司马懿 221

周瑜 216

拓展 : 统计出现频率最高的前10个词--方法2

roles = Counter(counts)

role = roles.most_common(10)

print(role)

输出:

[('孔明', 1204), ('玄德', 1159), ('曹操', 910), ('张飞', 340), ('孙权', 259), ('吕布', 258), ('赵云', 254), ('云长', 241), ('司马懿', 221), ('周瑜', 216)]

第七步:构造词云字符串

li =[]

for i in range(10):

character, count = items[i]

for _ in range(count):

li.append(character)

# print(li)

cloud_txt = " ".join(li)

wc = WordCloud(

background_color='white',

font_path='msyh.ttc',

collocations=False # 是否包含两个词的搭配,默认为Ture

).generate(cloud_txt)

wc.to_file('三国中出现的前十大人物.png')

生成图片如下:

三国中出现的前十大人物.png

完整代码如下:

# 案例:三国小说人物出场词频率统计

import jieba

from collections import Counter

from wordcloud import WordCloud

def parse():

# 定义无关词集合

excludes = {"将军", "却说", "丞相", "二人", "不可", "荆州", "不能", "如此", "商议",

"如何", "主公", "军士", "军马", "左右", "次日", "引兵", "大喜", "天下",

"东吴", "于是", "今日", "不敢", "魏兵", "陛下", "都督", "人马", "不知",

'玄德曰', '孔明曰', '刘备', '关公', '孔明曰', '玄德曰', '先主', '此人',

'上马', '大叫', '后主', '众将', '只见', '一人', '汉中', '太守', '天子',}

"""三国小说人物出场词频率统计"""

with open('sanguo.txt','r', encoding='utf-8') as f:

# 打开文件路径

txt = f.read()

# print(txt)

# 将字符串分割成等量的中文

words = jieba.lcut(txt)

print(words)

# ‘人物名字’:出现次数

counts = {} #创建空字典

for word in words: # 遍历字典

if len(word) == 1:

continue

else:

# 往字典里添加元素

#counts['key'] = 888

counts[word] = counts.get(word, 0) + 1

# counts['曹操'] = counts.get('曹操', 0) + 1

print(counts)

counts['孔明'] = counts.get('孔明') + counts.get('孔明曰')

counts['玄德'] = counts.get('玄德') + counts.get('玄德曰')

counts['玄德'] = counts.get('玄德') + counts.get('刘备')

counts['关公'] = counts.get('关公') + counts.get('云长')

# 删除 无关词

for word in excludes:

del counts[word]

# 统计出现频率最高的前20个词

items = list(counts.items())

items.sort(key=lambda x: x[1], reverse=True) # 使用了隐函数

# print('排序后:', items)

for i in range(10):

character, count = items[i]

print(character, count)

# 统计出现频率最高的前20个词--方法2(拓展)

roles = Counter(counts)

role = roles.most_common(10)

print(role)

# 构造词云字符串

li =[]

for i in range(10):

character, count = items[i]

for _ in range(count):

li.append(character)

# print(li)

cloud_txt = " ".join(li)

wc = WordCloud(

background_color='white',

font_path='msyh.ttc',

collocations=False # 是否包含两个词的搭配,默认为Ture

).generate(cloud_txt)

wc.to_file('三国中出现的前十大人物.png')

parse()

孔明 1204

玄德 1159

曹操 910

张飞 340

孙权 259

吕布 258

赵云 254

云长 241

司马懿 221

周瑜 216

[('孔明', 1204), ('玄德', 1159), ('曹操', 910), ('张飞', 340), ('孙权', 259), ('吕布', 258), ('赵云', 254), ('云长', 241), ('司马懿', 221), ('周瑜', 216)]

python怎么统计文本中的字频_【python】实现文档中的多频词统计相关推荐

  1. java word中插入图片_在Word文档中插入图片

    小编典典 首先,我想指出apache poi- Link提供的示例,即正确的方法是 doc.createParagraph().createRun().addPicture(new FileInput ...

  2. Python批量识别图片中的文字并保存到txt文档中

    Python OCR工具pytesseract,之前是惠普的产品,被Google收了之后就给开源了. 1.需要下载并安装Google Tesseract,下载地址看图片上有,要下载4.0.0版本的 2 ...

  3. Python 将excel中的选择题 导入到word文档中

    Python 将excel中的选择题 导入到word文档中 0x00 昨天,我的老师给我们一个包含600道关于比赛的选择题和判断题的excel文档,要我们整理成指定格式的word文档以后交给他.我看着 ...

  4. 换行样式不要首行缩进_修改文档样式库中的“正文”样式,使得文档中所有正文段落首行缩进2个字符。...

    问答题请在[答题]菜单下选择[进入考生文件夹]命令,并按照题目要求完成下面的操作.注意:以下的文件必须都保存在考生文件夹下.在考生文件夹下打开文档WORD.DOCX.[背景素材]为了更好地介绍公司的服 ...

  5. ms office word2013教程 - 如何将A文档中的样式复制到B文档中

    将A文档中的样式复制到B文档中 选择 [文件] -> [选项],在弹出的 [Word选项] 框中选择 [加载项],然后按照图示进行操作,最后记得点击保存即可.

  6. listwidget设置条目文本居中_将Word文档中的所有图片一键居中对齐,这个方法比插件更好用!...

    当我们在写论文的时候,通常会往文档中插入很多图片.这时候论文的格式要求是需要把所有图片居中对齐.而我们写论文时,一般都是先把论文写好了再修改格式.如果说图片一张张去手动居中对齐,这样会浪费很多时间. ...

  7. python批量读取图片并复制入word_提取word文档中的图片并使用Python进行批量格式转换,出,Word,里,利用,python...

    日常工作中,你是否遇到过这样的场景,领导发来一份 Word 文档,要求你将文档中的图片存储到一个文件夹内,并且还要将图片都改成 .jpg 或者 .png,你会怎么办?你是不是一边内心崩溃,一边开始一张 ...

  8. Word控件Spire.Doc 【文本】教程(5) ;从 Word 文档中的文本框中提取文本

    文本框的目的是允许用户输入程序要使用的文本信息.也可以从文本框中提取现有的文本信息.以下指南重点介绍如何通过Spire.Doc for .NET从 C# 中 Word 文档的文本框中提取文本. Spi ...

  9. word涂改涂掉图片_修正Word文档中太多不一致的格式-word技巧-电脑技巧收藏家

    修正Word文档中太多不一致的格式 您是否收到过一篇包含成打的字体和字号的MicrosoftWord2003文档,然后不得不将其修正一致?或者需要将他人处理的小文档合并为一个长文档?或者只是偶然在一个 ...

  10. java中添加文本框_Java 添加、删除Word文档中的文本框

    在Word文档中,文本框是指一种可移动.可调大小的文字或图形容器.使用文本框,能够使文档在内容和形式上更为饱满.本文将通过使用Java编程来演示如何添加.删除Word文档中的文本框. Jar文件获取及 ...

最新文章

  1. 蓝桥杯国赛-数正方形-java
  2. 一文理解 DDD 领域驱动设计!
  3. myeclipse 项目中jsp或者js 文件中的错误是没必要处理的,可以忽略
  4. 图文并茂——使用xfire编写webservice,并通过C#调用
  5. 继电器rc吸收电路取值_一文读懂继电器的工作原理以及驱动电路
  6. php仿伊人集源码,仿伊人集wecenter()包含所有功能及官方付费插件,整站带数据...
  7. python中none是什么类型_如何在Python中”测试”None类型?
  8. Apache ab 压力测试工具
  9. .git文件过大,怎么删除
  10. Kubernetes中的nodePort,targetPort,port的区别和意义(转)
  11. 巴克莱银行实现敏捷及DevOps与本地文化的融合
  12. java jpa面试题_jpa面试题解析,java面试题
  13. 某企业通达OA任意登录漏洞复现
  14. 揭露淘宝不良商家,利用UI设计缺陷进行恶意修改销量以及评价!
  15. excel学习-文本函数(left+right+len)
  16. Excel表格数据导入到Oracle
  17. 清除本地dns(Mac,win)
  18. Android中JNI开发之常见错误
  19. arcengine shp数据导入gdb中
  20. Access Violation

热门文章

  1. 字符串的split方法
  2. stm32f103 GPIO—— 一灯大师之库函数版
  3. 程序回滚实现 c语言,C语言回滚(一)
  4. InstructTTS: Modeling Expressive TTS in Discrete Latent Space with Natural Language Style Prompt
  5. pgAdmin的介绍 及使用
  6. 自然语言处理三大特征抽取器(CNN/RNN/TF)比较
  7. LeetCode 31. 下一个排列 Next Permutation
  8. long在c语言的作用,c语言中long代表什么意思
  9. Unity 实战篇 |【点名神器2.0】可直接导入Excel文档在电脑中使用,新增点名历史、排行榜功能
  10. 盘点 LiDAR 技术的15个广泛应用