统计英语六级中的高频单词
思路
- 1,数据集收集——从历年真题中获取六级文章(代码中的1.txt,10套真题的内容)
- 2,数据清洗——我这里清洗的比较简单(就简单全部转小写,去除标点符号)
- 3,数据获取——统计各个单词个数
- 4,去除非期望数据——就是去除in,of这些比较简单常见的词汇
代码实现
import collections
# 读取数据
file = open("C:/Users/64012/Desktop/六级/1.txt", "r",encoding="utf-8")
content = file.read()
file.close()
# 1.对s进行预处理,包括全部转为小写、去除标点符号;
content = content.lower()
content = content.translate(str.maketrans("","",string.punctuation))
context_list = content.split()
#统计各个单词个数
counter = collections.Counter(context_list)
# 去除键为数字的键值对
counter = {word: count for word, count in counter.items() if not word.isdigit()}
# 去除一些常间词 like of in the
filtered_counter = {word: count for word, count in counter.items() if count <= 40 and count>=5}
# #输出进控制台
# keys = list(filtered_counter.keys())
# num_words = len(keys)
# num_columns = 6
# num_rows = -(-num_words // num_columns) # 计算行数,向上取整
#
# max_word_length = max(len(word) for word in keys) # 找到最长的单词长度
#
# for i in range(num_rows):
# row = [keys[i + num_rows*j].ljust(max_word_length) for j in range(num_columns) if i + num_rows*j < num_words]
# print(' '.join(row))
# 输出进文档
keys = list(filtered_counter.keys())
num_words = len(keys)
num_columns = 6
num_rows = -(-num_words // num_columns) # 计算行数,向上取整*
max_word_length = max(len(word) for word in keys) # 找到最长的单词长度
with open("C:/Users/64012/Desktop/六级/output.txt", "w", encoding="utf-8") as file:
for i in range(num_rows):
row = [keys[i + num_rows*j].ljust(max_word_length) for j in range(num_columns) if i + num_rows*j < num_words]
file.write(' '.join(row) + "\n")
运行结果
我统计的是频率为5~40之间的(因为大于40的大部分是of,in,之类的词),可见结果中还是统计到了一些非期望字符(’f‘,‘h’……),主要原因还是数据集较差。但总体还是统计出了六级高频词汇。
总结
- 1,进行本次研究主要是因为学校python课程有类似的实验,刚好本人也在准备六级。正好可以玩一下
- 2,意识到了数据收集,数据清洗的重要性。