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),这样的结果对于某些文档更精确。

时间: 2024-10-10 09:03:28

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

常用正则表达式知识点解读及判读有效数字、手机号邮箱正则表达式_正则表达式

1.正则仅仅就是用来处理字符串的:匹配.捕获 匹配:验证当前的字符串是否符合我们的规则(每一个正则都是一个规则) 捕获:在整个字符串当中,把符合规则的字符都依次的获取到--->exec.match.replace 2.正则的组成:元字符.修饰符 元字符: 特殊意义的元字符: \d匹配一个0-9的数字相当于[0-9],和它相反的 \D匹配一个除了0-9的任意字符相当于[]  \w匹配一个0-9.a-z.A-Z_ 的数字或字符,相当于[0-9a-zA-Z_]  . \s匹配一个空白字符(空格.制表符

详解Java判断是否是整数,小数或实数的正则表达式_正则表达式

经常会遇到这样的情况,需要判断一个字符串是否是一个合法的数,包括整数,小数或者实数. 网上查到很多文章大多是判断这个字符串是否全为数字,比如下面这段来自StringUtils的代码,可以看到,13.2这样的数字实际上会返回false,可是,他的确是一个数字. public static boolean isNumeric(String str) { if (str == null) { return false; } int sz = str.length(); for (int i = 0;

最新手机号码、电话号码正则表达式_正则表达式

今天开始小编为大家系统整理关于正则表达式的一系列文章,希望大家会喜欢. 首先了解一下正则表达式的概念,正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串.将匹配的子串做替换或者从某个串中取出符合某个条件的子串等. java手机号码正则表达式: /** * 验证手机号码 * * 移动号码段:139.138.137.136.135.134.150.151.152.157.158.159.182.183.187.188.147 * 联通号码

55分钟学会正则表达式_正则表达式

什么是正则 正则表达式是一种用来描述一定数量文本的模式,用来匹配相同规范样式的文本.在JavaScript中用RegExp对象表示正则表达式( 即Regular Eexpression),它是对字符串执行模式匹配的强大工具. 正则表达式是一种查找以及字符串替换操作.正则表达式在文本编辑器中广泛使用,比如正则表达式被用于: 检查文本中是否含有指定的特征词 找出文中匹配特征词的位置 从文本中提取信息,比如:字符串的子串 修改文本 与文本编辑器相似,几乎所有的高级编程语言都支持正则表达式.在这样的语境

JS常用正则表达式及验证时间的正则表达式_正则表达式

在这篇文章里,我已经编写了12个超有用的正则表达式,这可是WEB开发人员的最爱哦. 1.在input框中只能输入金额,其实就是只能输入最多有两位小数的数字 //第一种在input输入框限制 <input type="text" maxlength="8" class="form-control" id="amount" style="margin-right: 2px;" value="&q

正则表达式同时匹配中英文及常用正则表达式_正则表达式

匹配中文:[\u4e00-\u9fa5] 英文字母:[a-zA-Z] 数字:[0-9] 匹配中文,英文字母和数字及_: ^[\u4e00-\u9fa5_a-zA-Z0-9]+$ 同时判断输入长度: [\u4e00-\u9fa5_a-zA-Z0-9_]{4,10} ^[\w\u4E00-\u9FA5\uF900-\uFA2D]*$ 1.一个正则表达式,只含有汉字.数字.字母.下划线不能以下划线开头和结尾: ^(?!_)(?!.*?_$)[a-zA-Z0-9_\u4e00-\u9fa5]+$ 其中:

收集整理项目中常用到的正则表达式_正则表达式

最近做的一个内部系统项目,涉及大量的文本校验,里面用到了一些常用的正则表达式,收集不易,先记录在此,以备后用. 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff]  可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:\n\s*\r  可以用来删除空白行 匹配HTML标记的正则表达式:< (\S*?)[^>]*>.*?|< .*? /> 这个仅仅能匹配部分,对于复杂的

grep用法详解 grep与正则表达式_正则表达式

正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大:在以前上班的公司里,由于公司是基于web的服务型网站(nginx),对正则的需求比 较大,所以也花了点时间研究正则,特与大家分享下: 1基础正则表达式 grep 工具,以前介绍过. grep -[acinv] '搜索内容串' filename -a 以文本文件方式搜索 -c 计算找到的符合行的次数 -i 忽略

去掉字符串前后所有空格的正则表达式_正则表达式

正则表达式,又称正规表示法.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. /**去掉字符串前后所有空格*/ function trim(str){ return str.replace(/(^\s*)|(\s*$)/g, ""); } //计算标题长度 funct

String字符串匹配javascript 正则表达式_正则表达式

在JavaScript代码中使用正则表达式进行模式匹配经常会用到String对象和RegExp对象的一些方法,例如replace.match.search等方法,下面所述是对相关方法使用的总结,需要的朋友参考下. String对象中支持正则表达式有4种方法,分别是:search.replace.match.split str.search(regexp) 定义:search()方法将在字符串str中检索与表达式regexp相匹配的字串,并且返回第一个匹配字串的第一个字符的位置.如果没有找到任何匹