zoukankan      html  css  js  c++  java
  • 统计一个文本的字符、单词数

    文本操作是最常见的,以例子的形式来驱动程序的编写

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

    #-*-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('
    ')
        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("
    The 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!='')/*当字符串没有到结尾的时候,重头到尾的循环*/
           { 
            if(*p==' ')/*假如字符串遇到空格,就将flag清零,同时可以过滤掉多余的空格*/ 
            flag=0; 
            else if(flag==0)/*当字符串不是空格时,假如flag为0,那么计算器加1,既是遇到空格后的第一个字符时*/
             { 
              flag=1;/*将flag标记回1,这样在遇到第一个字符后的字符时可以将他过滤掉,直到遇到空格时,在清零*/ 
              count++; //count就是统计单词数的变量。其实就是单词数的第一个字符,后面的字符都没有统计了 
              }
          p++; // 这里是抛开上面的flag=0,继续加一。没有遇到空格的时候 。直到继续遇到空格或结尾的时候,才不加一了。 
             } 
         return count;
     }
         
  • 相关阅读:
    《转》MFC六大关键技术之(五)(六)——消息映射与命令传递
    《转》MFC六大关键技术之(四)——永久保存(串行化)
    《转》MFC六大关键技术之(三)——动态创建
    《转》MFC六大关键技术之(二)——运行时类信息(RTTI)
    《转》MFC六大关键技术之(一)—— 初始化过程
    C++ 语言的 15 个晦涩特性
    QT的项目管理文件pro的编写
    使用C++编写的一个Find(查找)对话框例子
    如何让Fedora能够打开RAR文件
    Undefined symbols for architecture i386:和"_OBJC_CLASS_$_xx", referenced from:问题解决方法
  • 原文地址:https://www.cnblogs.com/bluewelkin/p/4368469.html
Copyright © 2011-2022 走看看