python实现统计汉字/英文单词数的正则表达式
导读:收集整理的这篇文章主要介绍了python实现统计汉字/英文单词数的正则表达式,觉得挺不错的,现在分享给大家,也给大家做个参考。 思路 •使用正则式 "(?x (?: [\w-]+ |...
收集整理的这篇文章主要介绍了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),这样的结果对于某些文档更精确。 您可能感兴趣的文章:
- Python实现统计英文单词个数及字符串分割代码
- 布同 统计英文单词的个数的python代码
- Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
- Python3实现统计单词表中每个字母出现频率的方法示例
- python 文本单词提取和词频统计的实例
- python实现字符串中字符分类及个数统计
- python 统计数组中元素出现次数并进行排序的实例
- python统计字母、空格、数字等字符个数的实例
- Python实现统计英文文章词频的方法分析
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: python实现统计汉字/英文单词数的正则表达式
本文地址: https://pptw.com/jishu/595718.html