巩固学习10

show-me-the-code第0004题
任一个英文的纯文本文件,统计其中的单词出现的个数。

import re

class WordNumber:
    def __init__(self,address):
        self.address=address

    def getWord(self):
        dir={}
        with open(self.address,'r')as file:
            for line in file:
                words=re.findall(r'\b[A-Za-z]+\b',line)
                for i in words:
                    dir[i]=dir.get(i,0)+1
        return dir

w=WordNumber(r'C:\Users\dell\Desktop\new1.txt')
d=w.getWord()
print(d)

本来考虑读出后用splite进行统计,但是考虑到不确定单词直接以什么为间隔,因此采用正则表达式可以更精确的匹配到字符串,注意我查到有人认为可以用\b+\b,这是不正确的,因为\b+\b 这样的表达式在正则表达式语法上是无效的,因为在单词边界上不需要使用重复匹配符号 +。如果您想要匹配一个或多个连续的单词边界,可以使用 \b+ 或 \b{2,} 这样的表达式,只会匹配出空格
匹配只带字母的

\b[A-Za-z]+\b

匹配包含字母数字的单词

\b\w+\b

匹配只包含数字的单词

\b\d+\b

但我觉得\d+应该也行

匹配包含特定字符的单词,比如只包含字母和连字符的单词:

\b[A-Za-z\-]+\b

题目二
你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。

#你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。
import os
from WordNumber import WordNumber
class ReadText:
    def __init__(self,file):
        self.file=file

    def readt(self):
        #检查文件夹是否存在
        dir = {}
        if os.path.exists(self.file):
            #遍历文件夹中所有文件
            for file_name in os.listdir(self.file):
                #检查文件是否以.txt结尾
                if file_name.endswith('.txt'):
                    #构建完整地址
                    file_path=os.path.join(self.file,file_name)


                    w=WordNumber(file_path)
                    dir=w.getWord(dir)

        else:
            print("文件夹不存在!")
        return dir
r=ReadText(r'C:\Users\dell\Desktop\notebook')
d=r.readt()
ls=list(d)
ls.sort(key=lambda x:x[1], reverse=False)#排序
print(ls[0])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值