编写一个python程序,读取存储《哈姆雷特》英文剧本的文件,分析统计其中单词出现的频率,实现以下结果:给出前10个人物出现的次数使用turtle模块绘制词频统计结果,并以柱状图的形式展示统计结果
时间: 2024-02-25 13:57:27 浏览: 30
好的,这是一个很棒的问题。下面是我的建议:
1. 我们需要读取《哈姆雷特》英文剧本的文件,并将其存储为字符串,与上一个问题相同。
2. 我们需要对文本进行处理,将其中的标点符号、换行符等去除,并将所有的单词转换为小写形式。同样与上一个问题相同。
3. 我们需要找到所有的人物名字,并统计他们出现的次数。这可以使用正则表达式来完成。
4. 接下来,我们可以使用Python的Counter函数,快速统计每个人物名字出现的次数。
5. 我们可以将统计结果按照出现次数进行排序,并输出前10个出现次数最多的人物名字。
6. 最后,我们可以使用turtle模块绘制柱状图,将统计结果以柱状图的形式展示出来。
下面是代码示例:
```python
import re
import turtle
from collections import Counter
def draw_bar(t, height):
"""绘制柱状图"""
t.begin_fill() # 开始填充颜色
t.left(90)
t.forward(height)
t.write(str(height))
t.right(90)
t.forward(40)
t.right(90)
t.forward(height)
t.left(90)
t.end_fill() # 结束填充颜色
def draw_axes(t):
"""绘制坐标轴"""
t.pensize(3)
t.penup()
t.goto(-200, -150)
t.pendown()
t.goto(-200, 150)
t.goto(200, 150)
def word_count(file_path, num):
# 读取文件内容
with open(file_path, 'r') as f:
text = f.read()
# 预处理文本
text = text.lower()
text = text.replace('\n', ' ')
text = ''.join(c for c in text if c.isalpha() or c == ' ')
# 寻找人物名字
pattern = r'[A-Z][a-z]+(?:\s[A-Z][a-z]+)*' + r'(?:\s\([A-Za-z ]+\))?'
characters = re.findall(pattern, text)
# 统计人物出现次数
char_count = Counter(characters)
# 按照出现次数排序
char_count = sorted(char_count.items(), key=lambda x: x[1], reverse=True)
# 输出前num个人物及其出现次数
for i in range(num):
print(char_count[i])
# 绘制柱状图
t = turtle.Turtle()
t.speed(0)
draw_axes(t)
for i in range(num):
t.penup()
t.goto(-180, -125 + i * 50)
t.write(char_count[i][0])
t.goto(-150, -150 + i * 50)
t.pendown()
t.color("red", "yellow")
draw_bar(t, char_count[i][1])
turtle.done()
# 示例调用
word_count('hamlet.txt', 10)
```
注意,这里我们假设《哈姆雷特》英文剧本的文件名为'hamlet.txt',并输出出现频率前10的人物名字。你可以根据你的实际需求进行修改。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![whl](https://img-home.csdnimg.cn/images/20210720083646.png)