巩固学习10

发布于:2024-05-16 ⋅ 阅读:(109) ⋅ 点赞:(0)

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])

网站公告

今日签到

点亮在社区的每一天
去签到