python实现统计汉字/英文单词数的正则表达式

思路

•使用正则式 "(?x) (?: [\w-]+ | [\x80-\xff]{3} )"获得utf-8文档中的英文单词和汉字的列表。
•使用dictionary来记录每个单词/汉字出现的频率,如果出现过则+1,如果没出现则置1。
•将dictionary按照value排序,输出。

源码


代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
#
#author: rex
#blog: http://iregex.org
#filename counter.py
#created: Mon Sep 20 21:00:52 2010
#desc: convert .py file to html with VIM.

import sys
import re
from operator import itemgetter

def readfile(f):
with file(f,"r") as pFile:
return pFile.read()

def divide(c, regex):
#the regex below is only valid for utf8 coding
return regex.findall(c)

def update_dict(di,li):
for i in li:
if di.has_key(i):
di[i]+=1
else:
di[i]=1
return di

def main():

#receive files from bash
files=sys.argv[1:]

#regex compile only once
regex=re.compile("(?x) (?: [\w-]+ | [\x80-\xff]{3} )")

dict={}

#get all words from files
for f in files:
words=divide(readfile(f), regex)
dict=update_dict(dict, words)

#sort dictionary by value
#dict is now a list.
dict=sorted(dict.items(), key=itemgetter(1), reverse=True)

#output to standard-output
for i in dict:
print i[0], i[1]

if __name__=='__main__':
main()

Tips

由于使用了files=sys.argv[1:] 来接收参数,因此./counter.py file1 file2 ...可以将参数指定的文件的词频累加计算输出。

可以自定义该程序。例如,
•使用


代码如下:

regex=re.compile("(?x) ( [\w-]+ | [\x80-\xff]{3} )")
words=[w for w in regex.split(line) if w]

这样得到的列表是包含分隔符在内的单词列表,方便于以后对全文分词再做操作。

•以行为单位处理文件,而不是将整个文件读入内存,在处理大文件时可以节约内存。
•可以使用这样的正则表达式先对整个文件预处理一下,去掉可能的html tags: content=re.sub(r"<[^>]+","",content),这样的结果对于某些文档更精确。

(0)

相关推荐

  • python统计文本文件内单词数量的方法

    本文实例讲述了python统计文本文件内单词数量的方法.分享给大家供大家参考.具体实现方法如下: # count lines, sentences, and words of a text file # set all the counters to zero lines, blanklines, sentences, words = 0, 0, 0, 0 print '-' * 50 try: # use a text file you have, or google for this one

  • Python实现单词翻译功能

    在进行英文文献阅读时,经常会出现一些不认识的单词,但对于一些pdf阅读器,比如Foxit阅读器使用翻译功能需要点击(Extra->Translate),并且启用了翻译功能将不能使用注释功能,这对于阅读者来说将是极不方便的.所以为了方便查询单词,自己开发了个Windows环境下的Python程序用于监控并查询单词,而只需的操作就是选中单词并按Ctrl+C即可. 该Python程序主要分为三部分:从另外一个应用程序中获取需要查询的单词,单词翻译和单词显示. 从另外一个应用程序中获取需要查询的单词涉及

  • 使用Python从有道词典网页获取单词翻译

    从有道词典网页获取某单词的中文解释. import re import urllib word=raw_input('input a word\n') url='http://dict.youdao.com/search?q=%s'%word content=urllib.urlopen(url) pattern=re.compile("</h2.*?</ul>",re.DOTALL) result=pattern.search(content.read()).gro

  • 浅析Python中将单词首字母大写的capitalize()方法

    capitalize()方法返回字符串的一个副本,只有它的第一个字母大写.对于8位的字符串,这个方法与语言环境相关. 语法 以下是capitalize()方法的语法: str.capitalize() 参数 NA 返回值 此方法返回的字符串只有它的第一个字符大写的副本. 例子 下面的示例演示了capitalize方法的使用. #!/usr/bin/python str = "this is string example....wow!!!"; print "str.capit

  • Python实现统计英文单词个数及字符串分割代码

    字符串分割 复制代码 代码如下: str="a|and|hello|||ab" alist = str.split('|') print alist 结果 复制代码 代码如下: str="a hello{这里换成5个空格}world{这里换成3个空格}" alist=str.split(' ') print alist 统计英文单词的个数的python代码 复制代码 代码如下: # -*- coding: utf-8 -*- import os,sys info =

  • 布同 统计英文单词的个数的python代码

    word中对于英文单词的统计也很好,大家不妨试试.如果没有安装word,而且你也是程序员的话,那么可以使用我的这段代码.通过测试,word的统计结果是18674,软件的统计结果是18349,相差不到2%,可以作为一个参考. 代码如下: 复制代码 代码如下: # -*- coding: utf-8 -*- import os,sys info = os.getcwd() #获取当前文件名称 fin = open(u'谷歌C++编程代码规范.txt') info = fin.read() alist

  • Python实现统计单词出现的个数

    最近在看python脚本语言,脚本语言是一种解释性的语言,不需要编译,可以直接用,由解释器来负责解释.python语言很强大,而且写起来很简洁.下面的一个例子就是用python统计单词出现的个数. import sys import string #import collections if len(sys.argv) == 1 or sys.argv[1] in {"-h", "--help"}: print("usage: uniqueword fil

  • Python实现单词拼写检查

    这几天在翻旧代码时发现以前写的注释部分有很多单词拼写错误,这些单词错得不算离谱,应该可以用工具自动纠错绝大部分.用 Python 写个拼写检查脚本很容易,如果能很好利用 aspell/ispell 这些现成的小工具就更简单了. 要点 1.输入一个拼写错误的单词,调用 aspell -a 后得到一些候选正确单词,然后用距离编辑进一步嗮选出更精确的词.比如运行 aspell -a,输入 'hella' 后得到如下结果: hell, Helli, hello, heal, Heall, he'll,

  • python统计文本字符串里单词出现频率的方法

    本文实例讲述了python统计文本字符串里单词出现频率的方法.分享给大家供大家参考.具体实现方法如下: # word frequency in a text # tested with Python24 vegaseat 25aug2005 # Chinese wisdom ... str1 = """Man who run in front of car, get tired. Man who run behind car, get exhausted."&quo

  • python用字典统计单词或汉字词个数示例

    有如下格式的文本文件 复制代码 代码如下: /"/请/!/"/"/请/!/"/两名/剑士/各自/倒转/剑尖/,/右手/握/剑柄/,/左手/搭于/右手/手背/,/躬身行礼/./两/人/身子/尚未/站/直/,/突然/间/白光闪/动/,/跟着/铮的/一/声响/,/双剑相/交/,/两/人/各/退一步/./旁/观众/人/都/是/"/咦/"/的/一声/轻呼/./青衣/剑士/连/劈/三/剑/ 将这段话进行词频统计,结果是  词-词数  的形式,比如  请  2

随机推荐