[随手写]统计英文文本中每个单词出现的频率

给定一个文本文件,内部为纯英文文本即不会包含中文以及中文符号,要求统计出其中各不同单词的频率。

主要是过滤掉数字,英文标点符号,但是一个特例是类似can’t这类的上引号不能过滤掉,另外要注意单词间的分隔符可以为一个或者多个空白字符(空格、制表符、回车符),也可以为换行符或者标点符号。

主要步骤,第一步为从文件读取文本,然后全部转换为小写字母,然后将其中的所有数字和非单词的字符替换成空格,最后以空白字符和换行符作为分界符将文本分成一系列单词并进行词频统计。这里为了方便处理使用了正则表达式,python正则表达式详解

python代码:

#!/usr/bin/env python
#-*- coding: utf-8 -*-


from collections import defaultdict
import re


def replace(s):
    if s.group(1) == 'n\'t':
        return s.group(1)
    return ' '


def cal(filename='in.txt'):
    print('now processing:' + filename + '......')

    dic = defaultdict(lambda: 0)

    with open(filename, 'r') as f:
        data = f.read()

    # 全部变为小写字母
    data = data.lower()

    # 替换除了n't这类连字符外的所有非单词字符和数字字符
    data = re.sub(r'(n[\']t)|([\W\d])', replace, data)
    datalist = re.split(r'[\s\n]+', data)
    for item in datalist:
        dic[item] += 1
    del dic['']
    return dic


if __name__ == '__main__':
    try:
        dic = cal()
        for key, val in dic.items():
            print(key, '--', val)
    except:
        print('no input file')

本文遵从CC3.0协议转载请注明:转自凌风技术站

本文标题:[随手写]统计英文文本中每个单词出现的频率

本文链接地址:http://www.iaccepted.net/algorithm/noclass/99.html

相关文章



发表评论

电子邮件地址不会被公开。 必填项已用*标注