最近收到软件工程课程老师的一个实验作业,其中涉及到了一部分NLP的内容,这里捡出来一些整理下来。
需求
输出单个文件中的前 N 个最常出现的英语单词。
作用:一个用于统计文本文件中的英语单词出现频率的控制台程序
单词:以英文字母开头,由英文字母和字母数字符号组成的字符串视为一个单词。单词
以分隔符分割且不区分大小写。在输出时,所有单词都用小写字符表示。
思路
统计个数优先考虑字典。先把文章里的标点和多余空格处理掉,然后把整篇文章处理成一个单词列表,再去count这个列表里的元素就可以了。最后做一下排序。
代码
#-*- coding: UTF-8 -*-
# 需求:输出单个文件中的前 N 个最常出现的英语单词。
# 获取文本内容,分隔单词
def get_words(filename):
with open(filename) as f:
content = f.read()
# 处理标点符号
content = content.replace(",", "")
content = content.replace(".", "")
content = content.replace("!", "")
content = content.replace("?", "")
# 处理首尾空格
content = content.strip()
# 生成单词列表
words = [word.lower() for word in content.split()]
# print(words)
return words
# 单词计数
def count_words(filename):
# 获取单词列表
words = get_words(filename)
# 通过列表生成字典
words_amount = dict.fromkeys(words, 0)
# 遍历单词
for word in words_amount.keys():
# 计数统计
cnt = words.count(word)
words_amount[word] = cnt
# 根据频数降序排序
words_amount = sorted(
words_amount.items(),
key=lambda x:x[1],
reverse=True
)
return words_amount
# 主函数
if __name__ == "__main__":
N = 10
filename = "experiment_1/text.txt"
words_amount = count_words(filename=filename)
# print(words_amount)
# 遍历前N个元素取答案
for el in words_amount[:N]:
print('{0:<8} : {1}'.format(el[0], el[1]))
评论
还没有任何评论,你来说两句吧!