码迷,mamicode.com
首页 > 编程语言 > 详细

Python Show-Me-the-Code 第 0006 题 最重要的词

时间:2015-04-21 18:07:15      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:python   正则表达式   文本   

第 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中国频道 上选了几篇新闻进行测试

输出:
技术分享

Python Show-Me-the-Code 第 0006 题 最重要的词

标签:python   正则表达式   文本   

原文地址:http://blog.csdn.net/huangxiongbiao/article/details/45154445

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!