如何用Python汇总大语料中re.findall的匹配总数?
实现大语料总匹配数的方法
要实现所有文件匹配数的求和,只需在循环外初始化一个总计数器,每次循环将单个文件的匹配数累加到总计数器中即可,同时需要先修正原代码里的语法错误:
修改后的完整代码
import os import re working_dir = "你的目标目录路径" # 替换为实际目录路径 total_count = 0 # 初始化总计数器 for file in os.listdir(working_dir): file_path = os.path.join(working_dir, file) # 跳过目录,只处理文件 if not os.path.isfile(file_path): continue with open(file_path, 'r', encoding='utf8') as f: # 修正正则表达式的逻辑(原正则中的^是字符串开头锚点,放在分组内无意义,这里调整为匹配指定标签) IVP_pattern = r'\(VP[a-zA-Z0-9_\s.+-]+\((NP|VP|S|SBAR|PP)' # 修正字符串处理的括号缺失问题 text1 = ' '.join(f.read().replace(')', '').replace('\n', '').split()) # 修正findall的括号缺失问题 count_IVP = len(re.findall(IVP_pattern, text1)) total_count += count_IVP # 累加单个文件的匹配数 # 可选:保留单个文件的匹配数打印 print(f"文件{file}匹配数:{count_IVP}") print(f"大语料总匹配数:{total_count}")
关键修改点
- 新增
total_count = 0作为总计数器,放在循环外部,确保每次循环都能持续累加。 - 每次计算完单个文件的
count_IVP后,执行total_count += count_IVP完成累加操作。 - 修正了原代码中的语法错误:
text1行末尾缺少闭合括号count_IVP行末尾缺少闭合括号
- 调整了正则表达式中的无效锚点
^,避免逻辑错误 - 新增跳过非文件的判断,防止遍历到目录时触发读取错误
内容的提问来源于stack exchange,提问作者user19590447
相关产品推荐
相关产品推荐

