Python实现按句子拆分文本:避免数字后句号误拆换行
解决Python文本处理中句子正确换行的问题
你的问题出在直接替换所有句号,没区分句子结尾的句号和缩写(比如21.)里的句号。要实现只在真正的句子结尾换行,可以用正则表达式精准匹配目标句号。
解决方案代码:
import re with open("new_all_data.txt", 'r') as text, open("new_all_data2.txt", "w") as new_text2: # 一次性读取全部内容,避免逐行处理的局限 content = text.read() # 正则匹配:排除数字后的句号,只替换句子结尾的句号(后接空格、行尾或引号) processed_content = re.sub(r'(?<![0-9])\.(?=\s|$|")', '.\n', content) new_text2.write(processed_content)
正则说明:
(?<![0-9]):负向回顾断言,确保句号前面不是数字,避免替换像21.这类缩写里的句号\.(?=\s|$|"):匹配句号,且句号后面是空格、行尾或者引号,这些都是句子结束的典型标志
如果之后遇到其他非数字开头的缩写(比如Mr.、Dr.),可以扩展正则的排除规则,比如把这些缩写加入负向断言:(?<![0-9]|Mr|Dr),根据实际需求调整即可。
内容的提问来源于stack exchange,提问作者rocinantes
相关产品推荐
相关产品推荐

