第 0006 题:你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。
思路:切换到目标目录,然后遍历该目录下的txt文件,用正则表达式匹配响应的单词和数字,然后让Counter计算单词的词频,并认为排除掉stop word后出现最多的词是最重要的词。
注:stopword就是类似 a/an/and/are/then 的这类高频词,高频词会对基于词频的算分公式产生极大的干扰,所以需要过滤
部分代码引用Show-Me-the-Code 第四题中的统计单词代码
0006.最重要的词.py
#!/usr/bin/env python
#coding: utf-8
import re, os
from collections import Counter
# 目标文件所在目录
FILE_PATH = ‘/home/bill/Desktop‘
def getCounter(articlefilesource):
‘‘‘输入一个英文的纯文本文件,统计其中的单词出现的个数‘‘‘
pattern = r‘‘‘[A-Za-z]+|\$?\d+%?$‘‘‘
with open(articlefilesource) as f:
r = re.findall(pattern, f.read())
return Counter(r)
#过滤词
stop_word = [‘the‘, ‘in‘, ‘of‘, ‘and‘, ‘to‘, ‘has‘, ‘that‘, ‘s‘, ‘is‘, ‘are‘, ‘a‘, ‘with‘, ‘as‘, ‘an‘]
def run(FILE_PATH):
# 切换到目标文件所在目录
os.chdir(FILE_PATH)
# 遍历该目录下的txt文件
total_counter = Counter()
for i in os.listdir(os.getcwd()):
if os.path.splitext(i)[1] == ‘.txt‘:
total_counter += getCounter(i)
# 排除stopword的影响
for i in stop_word:
total_counter[i] = 0
print total_counter.most_common()[0][0]
if __name__ == ‘__main__‘:
run(FILE_PATH)
随便从BBC中国频道上选了几篇新闻进行测试
输出:
时间: 2024-10-11 16:00:34