指定任意英文文章的文本文件(本次实验使用“Youth.txt”),使用pandas统计文章中每个单词出现的次数, 单词统计时,保留形如“60”的数字、形如“self-distrust”中间的连字符、形如“isn't”中间的撇号, 统计结果先按照单词出现次数降序再按照单词字典序排序,将统计结果保存到csv文件“Youth.csv”中, 并使用水平柱状图显示出现次数最多的10个单词。根据这些要求写出Python代码
时间: 2024-02-06 08:09:18 浏览: 53
统计文本文件中一段英文中某个单词出现的次数及其出现的位置
4星 · 用户满意度95%
以下是实现这个任务的Python代码:
```python
import pandas as pd
import re
import matplotlib.pyplot as plt
# 读取文章内容
with open('Youth.txt', 'r') as f:
text = f.read()
# 去除非字母、数字、连字符、撇号的字符
text = re.sub(r'[^\w\-\'\d]+', ' ', text)
# 将所有字母转换为小写,以便统一计数
text = text.lower()
# 将形如"60"的数字、形如"self-distrust"中间的连字符、形如"isn't"中间的撇号保留
text = re.sub(r'(\d+)|(\w+\-\w+)|(\w+\'\w+)', r'\1\2\3 ', text)
# 将文章内容拆分为单词列表
words_list = text.split()
# 使用pandas统计单词出现次数
words_df = pd.DataFrame(words_list, columns=['word'])
word_count = words_df.groupby('word').size().reset_index(name='count')
# 按照单词出现次数降序再按照单词字典序排序
word_count = word_count.sort_values(by=['count', 'word'], ascending=[False, True])
# 将统计结果保存到csv文件中
word_count.to_csv('Youth.csv', index=False)
# 取出现次数最多的10个单词,绘制水平柱状图
top_10 = word_count.head(10)
plt.barh(top_10['word'], top_10['count'])
plt.show()
```
这段代码首先使用`re`模块去除文章中的非字母、数字、连字符、撇号的字符,然后将所有字母转换为小写,以便统一计数。接下来,将形如"60"的数字、形如"self-distrust"中间的连字符、形如"isn't"中间的撇号保留,然后使用`pandas`统计单词出现次数,按照要求排序并保存到csv文件中。最后,取出现次数最多的10个单词,绘制水平柱状图。
阅读全文