如何统计独立txt文件句子中的Acronyms(首字母缩略词)数量 代码问题求助
代码错误点排查
- 文件指针耗尽问题:你调用
file.read()一次性读取了全部文件内容后,文件指针已经移动到文件末尾,后续的for line in file不会读取到任何内容,缩略词统计的循环完全没有执行,所以acronyms一直是0。 - 循环逻辑冗余错误:就算循环能执行,你外层遍历
file的行,内层却遍历全部text的单词,相当于每一行都要把整个文件的单词统计一遍,会出现重复计数的问题,且外层的行遍历完全没有存在必要。 - 缩略词判断逻辑缺陷:直接用
word.isupper()判断缩略词不合理:一是带标点的大写缩略词(比如NATO.、FBI?)会返回False,二是单个大写字母(比如句子开头的I)会被误算成缩略词,正常首字母缩略词至少需要2个连续大写字母。 - 无效代码问题:
- 你已经用
text.count('?')统计了问题数量,后面循环里的questions += questions完全无效,初始questions是0,加多少次都是0,而且这个变量最后也没有被打印。 - 使用
with open语法会自动关闭文件,末尾的file.close()是多余操作,还会抛出异常。 import re放在with块内部不符合编码规范,且你注释掉了正则相关代码,这个导入完全没用。
- 你已经用
- 多余类型转换问题:
num_questions = str(text.count('?'))没必要转成字符串,count返回的是整数,直接打印即可。
修正后可正常运行的代码
# 导入模块放在代码开头 import re # 初始化计数变量 questions = 0 acronyms = 0 with open('file.txt', "r", errors='ignore') as file: text = file.read() # 统计问题数量 questions = text.count('?') # 拆分所有单词,自动处理多空格、换行符 words = text.split() for word in words: # 正则匹配:至少2个连续大写字母,允许中间带点,兼容U.S.A这类常见缩略词格式 if re.search(r'([A-Z]\.?){2,}', word): acronyms += 1 print("Number of questions:", questions) print("Number of acronyms:", acronyms)
内容的提问来源于stack exchange,提问作者Rushi Jaiswal
相关产品推荐
相关产品推荐

