记录一下一个面试问题的答案
关于词频的统计
代码如下:
def parse(text):
# 使用正则表达式去除标点符号和换行符
text = re.sub(r'[^\w ]', ' ', text)
# 转为小写
text = text.lower()
# 生成所有单词的列表
word_list = text.split(' ')
print(word_list)
# 去除空白单词
word_list = filter(None, word_list)
# 生成单词和词频的字典
word_cnt = {}
for word in word_list:
if word not in word_cnt:
word_cnt[word] = 0
word_cnt[word] += 1
# 按照词频排序
sorted_word_cnt = sorted(word_cnt.items(), key=lambda kv: kv[1], reverse=True)
return sorted_word_cnt
with open('in.py', 'r') as fin:
text = fin.read()
word_and_freq = parse(text)
with open('out.txt', 'w') as fout:
for word, freq in word_and_freq:
fout.write('{} {}\n'.format(word, freq))
上述代码中,直接利用read将整个文件的内容进行读取,如果文件过大,一次性读取可能造成内存崩溃,可以通过每次读取一定长度的字符串进行处理,还可以通过 readline() 函数,每次读取一行,然后针对每行进行统计分析。
上面只是一个小demo,存在一个小问题,就是对于行末未拼写完的单词存在下划线时,比如hell-o,会分割为[‘hell’, ‘o’]
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)