对水浒传.txt文件进行分词并统计词频(统计时适当考虑相同的人物的不同叫法),根据统计的词频制作词云图(使用wordcloud, matplotlib第三方库库)。
时间: 2023-07-15 21:13:22 浏览: 253
好的,这里我会使用jieba第三方库进行分词和词频统计,并使用wordcloud和matplotlib库制作词云图。请确认您已经安装了这些库。
首先,我们需要读取`水浒传.txt`文件并将其分词。
```python
import jieba
# 读取文件
with open('水浒传.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 分词
words = jieba.lcut(text)
```
接下来,我们需要对分词结果进行词频统计。为了统计时适当考虑相同的人物的不同叫法,我们可以使用一个字典来存储每个人物的出现次数。
```python
# 人物名称列表
names = ['宋江', '卢俊义', '吴用', '公孙胜', '关胜', '林冲', '秦明', '呼延灼', '花荣', '柴进', '李应', '朱仝', '鲁智深', '武松', '董平', '张清', '杨志', '徐宁', '索超', '戴宗', '刘唐', '李逵', '史进', '穆弘', '雷横', '李俊', '阮小二', '张横', '阮小五', '张顺', '阮小七', '杨雄', '石秀', '解珍', '解宝', '燕青', '朱武', '黄信', '孙立', '宣赞', '郝思文', '韩滔', '彭玘', '单廷珪', '魏定国', '萧让', '裴宣', '欧鹏', '邓飞', '燕顺', '杨林', '凌振', '蒋敬', '吕方', '郭盛', '安道全', '皇甫端', '王英', '扈三娘', '鲍旭', '樊瑞', '孔明', '孔亮', '项充', '李衮', '金大坚', '马麟', '童威', '童猛', '孟康', '侯健', '陈达', '杨春', '郑天寿', '陶宗旺', '宋清', '乐和', '龚旺', '丁得孙', '穆春', '曹正', '宋万', '杜迁', '薛永', '施恩', '李忠', '周通', '汤隆', '杜兴', '邹渊', '邹润', '朱贵', '朱富', '施琅', '李立', '杨瑞', '赵云', '段景住']
# 词频统计
word_count = {}
for word in words:
if word in names:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
```
最后,我们可以使用wordcloud和matplotlib库制作词云图。
```python
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 生成词云图
wc = WordCloud(background_color='white', font_path='msyh.ttc', width=800, height=600)
wc.generate_from_frequencies(word_count)
# 显示词云图
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
```
完整代码如下:
```python
import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt
# 读取文件
with open('水浒传.txt', 'r', encoding='utf-8') as f:
text = f.read()
# 分词
words = jieba.lcut(text)
# 人物名称列表
names = ['宋江', '卢俊义', '吴用', '公孙胜', '关胜', '林冲', '秦明', '呼延灼', '花荣', '柴进', '李应', '朱仝', '鲁智深', '武松', '董平', '张清', '杨志', '徐宁', '索超', '戴宗', '刘唐', '李逵', '史进', '穆弘', '雷横', '李俊', '阮小二', '张横', '阮小五', '张顺', '阮小七', '杨雄', '石秀', '解珍', '解宝', '燕青', '朱武', '黄信', '孙立', '宣赞', '郝思文', '韩滔', '彭玘', '单廷珪', '魏定国', '萧让', '裴宣', '欧鹏', '邓飞', '燕顺', '杨林', '凌振', '蒋敬', '吕方', '郭盛', '安道全', '皇甫端', '王英', '扈三娘', '鲍旭', '樊瑞', '孔明', '孔亮', '项充', '李衮', '金大坚', '马麟', '童威', '童猛', '孟康', '侯健', '陈达', '杨春', '郑天寿', '陶宗旺', '宋清', '乐和', '龚旺', '丁得孙', '穆春', '曹正', '宋万', '杜迁', '薛永', '施恩', '李忠', '周通', '汤隆', '杜兴', '邹渊', '邹润', '朱贵', '朱富', '施琅', '李立', '杨瑞', '赵云', '段景住']
# 词频统计
word_count = {}
for word in words:
if word in names:
if word in word_count:
word_count[word] += 1
else:
word_count[word] = 1
# 生成词云图
wc = WordCloud(background_color='white', font_path='msyh.ttc', width=800, height=600)
wc.generate_from_frequencies(word_count)
# 显示词云图
plt.imshow(wc, interpolation='bilinear')
plt.axis('off')
plt.show()
```
运行代码后,就可以得到词云图了。
阅读全文