Python脚本优化需求:识别并统计文本文件中缩写词出现次数
Python缩写词识别与统计改进方案
需求:实现Python程序,识别指定文本文件中由2个及以上字母组成(支持大小写)的缩写词,并统计每个缩写词的出现次数。
原代码存在的问题
- 仅统计全大写单词的总数量,未区分不同缩写词,也未支持带点的缩写格式(如
U.S.A.),不符合“统计每个缩写词出现次数”的核心需求 - 遍历文本逻辑错误:
for line in text会将文本拆分为单个字符遍历,而非按行处理 - 冗余使用
re.sub替换缩写,未利用正则提取目标内容 import re放在文件读取的代码块内,不符合Python编码规范
改进后的代码
import re from collections import Counter # 定义匹配缩写的正则表达式:匹配带点的缩写(如U.S.A.)或全大写无点缩写(含复数结尾s,如CDs) ACRONYM_PATTERN = r'\b(?:[A-Z]\.){2,}|[A-Z]{2,}s?\b' def count_acronyms(file_path): with open(file_path, 'r', errors='ignore') as file: text = file.read() # 提取所有匹配的缩写词 acronyms = re.findall(ACRONYM_PATTERN, text) # 处理带点的缩写,统一格式(如U.S.A.转为USA),方便统计 normalized_acronyms = [acronym.replace('.', '') for acronym in acronyms] # 统计每个缩写的出现次数 acronym_counts = Counter(normalized_acronyms) return acronym_counts if __name__ == '__main__': counts = count_acronyms('Larex_text_file.txt') print("各缩写词出现次数:") for acronym, count in counts.items(): print(f"{acronym}: {count}")
代码说明
- 正则表达式设计:
\b:匹配单词边界,确保提取的是完整单词而非字符串片段(?:[A-Z]\.){2,}:匹配至少2个字母、每个字母后带点的缩写(如U.N.),(?:...)表示非捕获组[A-Z]{2,}s?:匹配至少2个大写字母的缩写,可选结尾s(处理复数形式如CDs)
- 格式归一化:将带点的缩写去除点号(如
U.S.A.转为USA),避免同一缩写因格式不同被重复统计 - 统计工具:使用
collections.Counter高效统计每个缩写的出现次数,直接输出键值对结果
内容的提问来源于stack exchange,提问作者Simanta Sarkar
相关产品推荐
相关产品推荐

