定位的话就和我之前说的那个“白名单”原理一致,把汉字和常用标点拉个白名单,检索后就能定位到那些地方有乱码(我设置的是连续三个非白名单符号,其实还是容易缺漏,因为这些乱码中途会掺杂生僻汉字规避了检索,像更准确得把这些容易出现的生僻字额外拉一个“黑名单”)
像这种“段落前或段落后经常出现的特殊字”则是word文档左手倒右手就行(本质上是考验数学逻辑处理能力)。将文本导入word文档后使用自带的替换能力(Ctrl+G打开替换界面),段落的特殊字符是<P>,映照的便是处理段落前特殊字就是<P>^?"(格式就是段落+任意字符+前引号,^?是任意字符),替换为<P>"(这样任意字符就没了)
段落后经常出现的特殊字同理,只是也有可能会是句号感叹号问号,格式就是。^?<P>替换为。<P>(这样有时候会误伤后引号或后括号,介意的话就得用代码解决了)
# 规则1:段落结尾 标点(。?!) + 单个垃圾字符 + 换行 → 删除垃圾字符
text = re.sub(r'([。?!])[^\n“”]\n', r'\1\n', text)
# 规则2:后引号"”" 后面紧跟的垃圾字符 → 删除
text = re.sub(r'”[^\n]', '”', text)
# 规则3:段落开头 单个垃圾字符 + 前引号"“" → 删除垃圾字符
text = re.sub(r'^[^\n“”]“', '“', text, flags=re.MULTILINE)
# 规则4:兜底清理孤立乱码
text = re.sub(r'^[^\n“”。?!,、;:()【】《》…—0-9]$', '', text, flags=re.MULTILINE)
我分享的网盘文件夹中有两份成品代码,核心功能就包含在里面。(识别功能在“输出报告”中,并不全面因为生僻字阻拦了我的检索,还需要完善,) |