您的位置:首页 > 其它

统计一个文本的字符、单词数

2015-03-26 13:27 369 查看
文本操作是最常见的,以例子的形式来驱动程序的编写

例一:统计一篇文章或计算机文件里的字符或单词数

#-*-encoding:utf-8-*-
import time

keep = {'a','b','c','d','e','f','g','h','i','j','k',
'l','m','n','o','p','q','r','s','t','u','v',
'w','x','y','z',' ','-',"'"}

def normalize(s):
#大写转换成小写,并且剔除数字等开头或不在列表中的字符,返回正常字符串
result = ''
for c in s.lower():
if c in keep:
result +=c
return result

def make_freq_dict(s):
#计算频率次数,将字符串转化成次数字典
s = normalize(s)
words = s.split()
d = {}
for w in words:
if w in d:
d[w] +=1
else:
d[w] = 1

return d

def print_file_stats(fname):
s = open(fname,'r').read()
num_chars = len(s)
num_lines = s.count('\n')
d = make_freq_dict(s) #一层一层往上调用函数
num_words = sum(d[w] for w in d)
lst = [(d[w],w) for w in d]
lst.sort()
lst.reverse()
print("The file '%s' has: " % fname)
print(" %s characters " % num_chars)
print(" %s lines " % num_lines)
print(" %s words" % num_words)
print("\nThe top 10 most frequent words are:")
i=1
for count,word in lst[:10]:#将字典转换成元组
print('%2s. %4s个  %s' % (i,count,word))
i +=1

def main():
start = time.time()
print_file_stats('bill.txt')
end = time.time()
use = end - start
print('一共花了%s 秒的时间' % use)
if __name__=='__main__':
main()


以上为未使用正则表达式的版本

例二:针对之前写的C语言版本,统计单词数

#include "stdio.h"
int count_word(char *str);
void main()
{
char str1[80];
int sum=0;
puts("please enter a string");
gets(str1);
sum=count_word(str1); //返回的count就是sum
printf("there are %d words in this sentence",sum);
}
int count_word(char *str)
{
int count,flag;
char *p;
count=0;
flag=0;
p=str;
while(*p!='\0')/*当字符串没有到结尾的时候,重头到尾的循环*/
{
if(*p==' ')/*假如字符串遇到空格,就将flag清零,同时可以过滤掉多余的空格*/
flag=0;
else if(flag==0)/*当字符串不是空格时,假如flag为0,那么计算器加1,既是遇到空格后的第一个字符时*/
{
flag=1;/*将flag标记回1,这样在遇到第一个字符后的字符时可以将他过滤掉,直到遇到空格时,在清零*/
count++; //count就是统计单词数的变量。其实就是单词数的第一个字符,后面的字符都没有统计了
}
p++; // 这里是抛开上面的flag=0,继续加一。没有遇到空格的时候 。直到继续遇到空格或结尾的时候,才不加一了。
}
return count;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐