欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Python练习册第04题

程序员文章站 2024-03-18 23:38:40
...

要统计单词数,第一个想到的当然是用正则表达式把整片文章捋一遍,但是发现个tricky的地方,像[email protected]这样的邮件地址,单纯地去掉中间的.和@这样的符号,会让单词拼接起来变成exampletestcom这样,统计的时候就变成一个单词了,所以折中的办法是去符号替换成空格,再按空格分割来读取字符串,再统计纯英文单词的数量就行了

import os, re

if __name__ == '__main__':
    count = 0
    with open('sample.txt', 'r', encoding = 'utf-8') as file:
        while True:
            #一次读一行,处理一行再读下一行,省内存
            str = file.readline()
            #读到文件结尾终止
            if str == '':
                break
            else:
                #去掉换行符
                buf = str.strip()
                #用正则表达式去掉字母、数字、空格以外的字符
                #这里有点tricky的地方,文本里可能会有邮件地址这样的字符串
                #如果上一步单纯地去掉.和@这样的符号,会让几个单词拼接成一个字符串
                #所以干脆把所有字母、数字、空格以外的字符,全替换成空格
                buf = re.sub(r'[^a-zA-z0-9 ]', ' ', str)
                #然后再按空格分割字符串就行了
                buf = buf.split(' ')
                for i in buf:
                    #判断是否只含有字母
                    if(i.isalpha()):
                        count += 1
    print(count)

sample.txt我取了stack overflow上面的privacy policy,本来试图把文本的一部分放进word里面看看它统计出来多少单词,发现word根本没有统计纯英文单词数量的功能,所以只能自己把过滤完的文本,按一个单词一行打印出来,自己稍微看了一眼,感觉没问题
如果这样过滤有问题的话,请指出

相关标签: Python练习册