用python编写程序,《射雕英雄传》是金庸的重要武侠作品之一。这里给出一个《射雕英雄传》的网络版本,文件名为“射雕英雄传-网络版.txt”。 请编写程序,统计该文件出现的所有中文词语及出现次数,要求: (1)以CSV格式输出到文件“射雕英雄传-词频统计.txt”中。 CSV格式如下:词语1:233,词语2:564,词语3:344,…… (2)在屏幕上打印输出词频最高的8个词语。 屏幕输出格式如下: 词语1,词语2,词语3,词语4,词语5,词语6,词语7,词语8
时间: 2024-01-26 17:05:00 浏览: 204
好的,下面是实现该任务的Python代码:
```python
import re
import csv
def count_words(file_path):
# 定义一个字典用于统计每个词语的出现次数
word_dict = {}
# 打开文件
with open(file_path, 'r', encoding='utf-8') as f:
# 逐行读取文件内容
for line in f:
# 去除每行的空格和换行符
line = line.strip()
# 用正则表达式提取出中文词语
words = re.findall('[\u4e00-\u9fa5]+', line)
# 统计每个词语的出现次数
for word in words:
if word in word_dict:
word_dict[word] += 1
else:
word_dict[word] = 1
# 返回按照词频排序的词语和出现次数的列表
return sorted(word_dict.items(), key=lambda x: x[1], reverse=True)
def write_csv(file_path, word_list):
# 打开文件
with open(file_path, 'w', encoding='utf-8', newline='') as f:
# 创建CSV写入器
writer = csv.writer(f)
# 逐行写入CSV文件
for item in word_list:
writer.writerow(item)
def print_top_words(word_list, n=8):
# 输出词频最高的前n个词语
print('词频最高的{}个词语:'.format(n))
for i in range(n):
print(word_list[i][0], end=',')
print()
if __name__ == '__main__':
# 统计词频
word_list = count_words('射雕英雄传-网络版.txt')
# 输出词频最高的8个词语
print_top_words(word_list)
# 将词频统计结果写入CSV文件
write_csv('射雕英雄传-词频统计.txt', word_list)
```
该程序首先定义了一个`count_words`函数用于统计文件中所有中文词语的出现次数,返回按照词频排序的词语和出现次数的列表。然后定义了一个`write_csv`函数用于将词频统计结果以CSV格式写入文件。最后定义了一个`print_top_words`函数用于在屏幕上打印输出词频最高的前n个词语。
在`main`函数中,先调用`count_words`函数统计词频,然后调用`print_top_words`函数输出词频最高的前8个词语,并最后调用`write_csv`函数将词频统计结果以CSV格式写入文件。
注意:在运行该程序之前,需要先将《射雕英雄传》的网络版本文件命名为“射雕英雄传-网络版.txt”,并保证该文件与程序在同一目录下。
阅读全文