查看: 774|回复: 11

[软件] 测测引号——分享用于检查中文单双引号使用问题的脚本

[复制链接]

15

听众

0

收听

13

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
155378
积分
2985
回帖
1024
主题
67
铜币
44244
威望
2434
银币
0
贡献
0
发书数
57
注册时间
2023-6-14
最后登录
2024-4-27
在线时间
1537 小时
发表于 2023-12-28 20:49 | 显示全部楼层 |阅读模式
本帖最后由 edennow 于 2024-2-23 13:17 编辑

中文单双引号的各种嵌套和配对混乱的问题在阅读没有经过校对的、质量较低的文本时,可以说是“俯拾皆是”。

个人再分享下之前写的脚本:网文常见字词校对替换表(在帖子中搜索 FixText.zip 下载附件),新添加了“单双引号检查”的功能,尝试解决部分单双引号的配对和规范问题。

之前没注意文件编码,导致用此脚本检测 GBK 或其他中文编码的文件时,无法查出错误。
现在更改成运行过程中统一将文件编码转成 UTF-8,应该可以正常检测了。
如果在意文件编码,可能要考虑后续把编码恢复成之前的。



单双引号的用法举例
详细的规范条例什么的我就不贴了,先提一下单双引号的几种常见用法,应该是争议不大的。

1.正文中应优先使用双引号
比如一段话:
“屠龙刀”和“倚天剑”是两柄神兵,在江湖中名气很大。
在正文中没有其他对话之类的嵌套引号的情况下,应该首先使用双引号来表示引用和需要强调的内容。

但看不少网文里面,都是随心所欲地用单引号,比如上面的句子经常看到有人写:
‘屠龙刀’和‘倚天剑’是两柄神兵,在江湖中名气很大。
这种基本可视为单引号的不当用法。

2.当引号中还需要使用引号时,外面一层用双引号,里面一层用单引号
这种多见于对话,例如:
谢逊说:“你要找的‘屠龙刀’在我手上。”
除此之外,很少能看到有需要特别用到单引号的地方。

如果引号再多一层嵌套,似乎规范用法应该是变成用单引号套下一层双引号,
再多一层,则又变成用双引号套下一层单引号。
多层引号嵌套(三层或以上)情况比较复杂,用这个脚本来检测的话都会报错,暂时只能另请高明吧……
或者可以把这些多层引号嵌套的内容先移到其他地方,用这个脚本继续往下检测,最后再把相应内容恢复回去。
或者可以在脚本报错的时候输入 “x”,强制跳过当前报错行,继续往下检测。
相信一般的书里很少会出现这样的内容。

3.表示连续引用或对话内容时,前面的段落都只写左引号,最后一段才同时用左右引号
例如:
“我是第一段话。
“我是第二段话。
“我是最后一段话。”

之前对这种用法也有过讨论,可见:http://www.1000qm.vip/forum.php?mod=viewthread&tid=322617

网文中常见写成:
“我是第一段话。
我是第二段话。
我是最后一段话。”

大部分都是可以修改为上面那种规范用法的(除了一些诗文引用的可能需要斟酌是否修改)。



脚本功能说明
将需要处理单双引号问题的书籍,统一放入 books 文件夹(将 FixText.zip 解压后可见),
然后执行:【双击运行】8.检查中文单双引号问题.bat
该脚本提供如下功能:

1.将【双引号外的单引号】统一规范为双引号
2.检查多种引号匹配混乱的问题

问题列表:
<左单引号前>缺双引号外的右单引号
<左单引号前>缺双引号外的左单引号
<左单引号前>缺双引号内的右单引号
<左单引号前>缺双引号内的左单引号

<右单引号前>缺双引号外的右单引号

<右单引号前>缺双引号外的左单引号
<右单引号前>缺双引号内的右单引号
<右单引号前>缺双引号内的左单引号
<右单引号前>出现空引号‘’现象

<左双引号前>缺双引号外的右单引号
<左双引号前>缺双引号外的左单引号
<左双引号前>缺双引号内的右单引号
<左双引号前>缺双引号内的左单引号
<左双引号前>缺右双引号

<右双引号前>缺双引号外的右单引号

<右双引号前>缺双引号外的左单引号
<右双引号前>缺双引号内的右单引号
<右双引号前>缺双引号内的左单引号
<右双引号前>缺左双引号
<右双引号前>出现空引号“”现象

<换行时>缺失右双引号
针对上面说的连续内容双引号的情况,当某行中缺失右双引号的时候,
只允许该行中的左双引号出现在【行首空格】【冒号】【逗号】【右尖括号(html 标签)】之后,
如果左双引号出现在其他字符后面,则报此错误。


此外还会自动检测很多隔行引号风格不一致的问题,

比如当前行尾并无右双引号用于闭合,下一行的行首无左双引号,且行内无右双引号,
再下一行的行首却出现左双引号,也会报错。



脚本界面
执行脚本时,需要输入 0 或 1。
输入 0 时(或不输入,直接回车)只查错,不修改:
输入 1 的时候,会将上面提到的【双引号外的单引号】一次性全部改为双引号


如果文件中各种引号使用都很规范,会出现如下输出,无需更改:


如果文件中出现上述的各种引号匹配混乱问题,会出现如下输出:

会把出错时的进度和原文内容打印出来,需要自行到编辑器中改掉。

这时也需要输入 0 或 1,输入 0 则继续往下查错(或者什么也不输入,直接回车,也会继续往下);
输入 1 则直接退出脚本(改了一下,变成输入 1 才退出脚本)。

如果脚本查出了引号匹配的错误,建议马上到编辑器修改 books 文件夹中的对应文件。
在 windows 下的 cmd 命令行里,鼠标选中打印出来的原文内容(选一部分即可),然后右键点一下,就可以直接复制粘贴到编辑器的搜索框中进行查找了,应该还是挺方便的(当然没有就地编辑方便)。

目前把脚本改成了可以实时读取修改后的文件内容,只有将文件中对应位置的引号错误修正了,脚本才能继续往下查错,否则会一直卡在当前报错的位置,重复报错。
当然,选择输入 1 退出脚本另行操作,也是可以的。

目前新增了输入 x 的选项,如果脚本报错的时候输入 x,则会跳过当前报错行,强制往下查错(一次只跳过一行,若有连续多行误报,可以多次输入 x 来跳过)。
当然,前提是已经确认过当前行确实没有引号错误。
因为当前脚本没有处理三层及以上引号嵌套的能力,会在多层引号嵌套的时候持续报错(以及在部分正文中嵌入带引号的行内注释的情况下,也有可能报错)。
如已经人工确认了当前行的引号使用无误,那就直接 x 跳过吧。

目前新增了输入 f 的选项,如果脚本报错的时候输入 f,则会跳过当前报错行,强制往下查错(同时会强制把当前行中的【双引号外的单引号】统一修正为双引号)。
新增这个选项也是为了弥补当前脚本无法支持三层及以上嵌套引号查错的不足,因为之前的逻辑是只要有引号报错,就不进行对单引号的统一修正,
通过输入 f,能起到强制修正的效果。
当然,前提也是已经确认过当前行确实没有引号错误。

针对含有多重引号嵌套内容的文件,最好是同一个文件查两遍引号:
第一次检查的时候,统一使用 x 来跳过多重引号错误的误报行,在此次检查过程中需要通过手动操作把原文件中的所有引号错误都修正好;
第二次检查的时候,统一使用 f 来跳过误报行,并强制修正单引号(记得在最开始输入 1 来进行单引号修正),此次检查过程中不要对文件进行任何额外的手动编辑修改,否则不知道是否会产生其他的问题。

不过,如果你根本就不考虑修正【双引号外的单引号】,或者当前检查的文件中根本就没有多重嵌套引号的内容,并未导致脚本频繁误报,那直接无视这个 f 选项就可以了。



新增数种【可自动识别并替换的引号错误】的处理选项

需要留意一下,这里只是简单检测了以下几种错误情况,并给出自动修改的建议。
查错的部分写得比较随意,识别出来的错误和提供的若干处“替换词条”不一定准确。
最好结合一下上下文,考虑是否进行自动替换。
如果给出的替换词条出错的话,还是需要自己去编辑器手动修正。

1.【双引号套双引号】
有时候文本中会出现如下这种情况:


这个句子里的:
“……泡桑拿去吧(关于此案详见下部“神女心”)。”
这个“神女心”是被套在双引号里的,应该改为‘神女心’,用单引号括住。

如果文本中出现多处的“aaa”要改为 ‘aaa’,“bbb”要改为 ‘bbb’……
引号里面的名词每次都不同,导致要手动改很多次,非常麻烦。

这种 case 比较常见,也很容易识别,在上面这个界面可做如下操作:
输入 1,自动将当前行内的“神女心”改成‘神女心’;
输入 2,把文本中对应名词的所有双引号都自动全局改成单引号(在双引号外的神女心也会被改成用神女心)。
然后可以再跑一遍这个脚本,通过脚本提供的将【双引号外的单引号】统一规范为双引号功能(在最开始执行时输入 1)自动修复被误改的单引号,可以减少很多的重复操作。

在部分情况下,脚本报出来的改错信息不对,显示的不是正确的替换词条需要自行去文本中找到上面输出的原文位置,把这个报错手动改掉。
改完错误之后,回到这个界面,什么都不要输入(或者输入 0),然后回车,就会继续往下查错
但也是必须要把对应的引号都修正了之后,脚本才会继续往下查错,否则会一直重复卡在上面的报错页面。

2.【单双引号方向写反】
如:”我是内容 1“ ’我是内容 2‘,脚本处理的方式也是同上,会出现一个差不多的界面,会显示将引号方向改正的“替换词条”
选 1 替换当前行,选 2 进行全局替换。
注意在这一种情况下,识别出错的概率稍微大一点,可能需要多注意下“替换词条”是否合理,若不合理,也是需要自行到编辑器修改。

3.【连续同向的单双引号】
如:‘我是内容 1‘ “我是内容 2“,脚本处理方式同上,会显示“替换词条”,并给出替换当前行或进行全局替换的选项。

4.【句尾单独使用右双引号】
当前行中并未出现左双引号,也不在【连续多行引用】的上下文之中,句尾却莫名其妙地冒出右双引号。
脚本处理方式同上,会移除这个多出来的右双引号。

5.【句首缺失左双引号】
当前行的句尾出现右双引号,句首却莫名其妙地缺失左双引号。
脚本处理方式同上,会补上这个缺失的左双引号。
注意,此项修复是需要跳过上面的【句单独使用右双引号】的错误修复,才能进行的(在报【句单独使用右双引号】错误时输入 3 进行跳过),请看下方的【跳过当前修复】的说明。

6.【句尾缺失右双引号】
脚本处理方式同上,会补上这个缺失的右双引号。
注意如果是在【连续多行引用】的上下文之中,可能要仔细考虑下是否补上这个右双引号。

X.【跳过当前修复,进入下一项修复】
在上面的 1 或 2 选项之后,添加了第 3 个选项【跳过当前修复】

例如原文是:
“我是一段话。”我是结尾
这样既会被检测为【连续同向的单双引号】错误,也会被检测为【句尾单独使用右双引号】错误。

但是目前是按照上面的 1->2->3->4 的步骤顺序来进行自动查错修复的,所以会被优先判断为【连续同向的单双引号】错误,并一直卡在这个报错。
可事实上应该要处理的是【句尾单独使用右双引号】错误。

这时就可以输入 3,从【连续同向的单双引号】的检测,跳到下一项【句尾单独使用右双引号】的检测和自动处理,会给出【句尾单独使用右双引号】的替换词条,从而正确修复。

也就是可以理解成上面给出了好几种自动修复的备选方案,是可以在不同方案间进行切换的。
当这几种方案都 hold 不住错误的时候,才会直接报错,不自动提供“替换词条”。这时才需要到编辑器进行手动修改。



如果是用来检查质量较低、需要修改多处引号错误的文本,当看到脚本有报错的时候,就可以在报错的段落前后多扫几眼了,基本附近可能都有多处引号错乱,也比较容易肉眼识别出来(特别是用 vscode 之类的会给引号内容自动高亮的编辑器来操作的时候)。
建议先在编辑器里把这些附近段落的引号错误都修改好,再回到脚本继续往下执行,可以防止脚本在同一段落附近频繁报错,实测非常有助于提升操作效率。

该脚本执行完毕后,如果有在最开始输入 1 来规范【双引号外的单引号】,
可以用 beyond compare 比较 books 中被修改的文件和 booksBak 中自动备份的文件,确认修改情况。

此外,关于上面提到的连续引用或对话内容的引号问题,在 FixText 中执行 【双击运行】1.书籍校正.bat【双击运行】2.书籍校正(不进行原文件预处理).bat 时,会自动进行修正。



本来是不想写这样的脚本的,很多工具都有类似的功能,比如 txtFormat 中也有检查引号匹配的功能,但是看了一下主要有两个问题:

1.无法把【双引号外的单引号】一次性替换成双引号
想到要一个文件里重复按键几千次来处理这种问题,就脑壳疼……
我看了一下它用来检测的正则,比较复杂,而且某些语法好像不是很通用,懒得再拼正则了。

2.对【连续引用或对话内容】的引号匹配情况判断有问题
无论是:
“我是第一段话。
“我是第二段话。
“我是最后一段话。”

或者是:
“我是第一段话。
我是第二段话。
我是最后一段话。”

这两种都会被 txtFormat 认为引号不匹配(额……)。
之前也有大佬分享过这种情况的处理方法:http://www.1000qm.vip/forum.php?mod=viewthread&tid=31651
不过写脚本的话应该能够比较容易地规避掉。

所以还是简单粗暴地写了一个脚本……
这个脚本最大的局限就是无法原地改错,需要自己到编辑器里查找对应的原文并修改,
善用 分屏功能 或编辑器自带的 命令行终端(如果有),有助于提升一些操作体验和编辑效率。

当然,这个脚本也只是花了点时间随便写的,比较难看……
目前做了一些代码改造,不会文件容量超五六十 MB 就随便爆 2GB 的内存了,但是如果用这个脚本来检查一些容量达数十上百 MB 的文件,速度也还不会特别快。
另外可能有 bug 和漏洞什么的我没有考虑到,欢迎测试并反馈 ^_^

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

参与人数 1铜币 +2 收起 理由
lju + 2 论坛有您更精彩!

查看全部评分

回复

使用道具 举报

5

听众

0

收听

3

好友

秀才

Rank: 5Rank: 5

UID
147013
积分
727
回帖
612
主题
22
铜币
4748
威望
408
银币
0
贡献
0
发书数
18
注册时间
2022-11-14
最后登录
2024-4-27
在线时间
460 小时
发表于 2023-12-28 21:09 | 显示全部楼层
谢谢分享经验。
有用,感觉更适用于抓包搬运。
冒昧问一下,OCR搬运有没有啥好法子?
(添改单引号要给我整吐了,OCR经常漏对话里单引号的一半,左半或右半)
梦海浮沉
回复 支持 反对

使用道具 举报

15

听众

0

收听

13

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
155378
积分
2985
回帖
1024
主题
67
铜币
44244
威望
2434
银币
0
贡献
0
发书数
57
注册时间
2023-6-14
最后登录
2024-4-27
在线时间
1537 小时
 楼主| 发表于 2023-12-28 21:12 | 显示全部楼层
lju 发表于 2023-12-28 21:09
谢谢分享经验。
有用,感觉更适用于抓包搬运。
冒昧问一下,OCR搬运有没有啥好法子?

我也不知道怎么处理 ocr 的问题比较好,感觉 ocr 出的错很多都是没天理的。

估计暂时还是只能靠人力慢慢处理了。
回复 支持 反对

使用道具 举报

5

听众

0

收听

3

好友

秀才

Rank: 5Rank: 5

UID
147013
积分
727
回帖
612
主题
22
铜币
4748
威望
408
银币
0
贡献
0
发书数
18
注册时间
2022-11-14
最后登录
2024-4-27
在线时间
460 小时
发表于 2023-12-28 21:17 | 显示全部楼层
edennow 发表于 2023-12-28 21:12
我也不知道怎么处理 ocr 的问题比较好,感觉 ocr 出的错很多都是没天理的。

估计暂时还是只 ...

好吧。我再捣鼓捣鼓。我平时找个支持正则的编辑器一次改一个词的引号问题,但还是非常的低效率,还需要自己全看一遍检查,非常费时。。。。
[发帖际遇]: lju 恪守“喝酒不开车,开车不喝酒”,奖励 4 铜币. 幸运榜 / 衰神榜
梦海浮沉
回复 支持 反对

使用道具 举报

5

听众

0

收听

3

好友

秀才

Rank: 5Rank: 5

UID
147013
积分
727
回帖
612
主题
22
铜币
4748
威望
408
银币
0
贡献
0
发书数
18
注册时间
2022-11-14
最后登录
2024-4-27
在线时间
460 小时
发表于 2023-12-28 22:51 | 显示全部楼层
这工具确实厉害,刚刚试了。
70万左右的OCR文本,人力处理过了,还能检查出来100多处引号错误。
[发帖际遇]: lju 扶老太太过马路,奖励 3 铜币. 幸运榜 / 衰神榜
梦海浮沉
回复 支持 反对

使用道具 举报

15

听众

0

收听

13

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
155378
积分
2985
回帖
1024
主题
67
铜币
44244
威望
2434
银币
0
贡献
0
发书数
57
注册时间
2023-6-14
最后登录
2024-4-27
在线时间
1537 小时
 楼主| 发表于 2023-12-29 00:00 | 显示全部楼层
lju 发表于 2023-12-28 22:51
这工具确实厉害,刚刚试了。
70万左右的OCR文本,人力处理过了,还能检查出来100多处引号错误。

感觉可以再更新下,顺便检查了下 “” 和 ‘’ 这种没内容的空引号。
[发帖际遇]: edennow 乱扔果皮,被红袖标大妈罚款 1 铜币. 幸运榜 / 衰神榜
回复 支持 1 反对 0

使用道具 举报

5

听众

0

收听

3

好友

秀才

Rank: 5Rank: 5

UID
147013
积分
727
回帖
612
主题
22
铜币
4748
威望
408
银币
0
贡献
0
发书数
18
注册时间
2022-11-14
最后登录
2024-4-27
在线时间
460 小时
发表于 2023-12-29 00:15 | 显示全部楼层
edennow 发表于 2023-12-29 00:00
感觉可以再更新下,顺便检查了下 “” 和 ‘’ 这种没内容的空引号。

嗯嗯,好的。我今晚用你分享的工具检查出来的错误主要是:对话分段(回车漏掉了),对话中参杂大量引用(单引号识别错、漏),看的快了没发现引号方向的错误。
梦海浮沉
回复 支持 反对

使用道具 举报

36

听众

0

收听

2

好友

翰林

Rank: 9Rank: 9Rank: 9

UID
225
积分
16513
回帖
5136
主题
23
铜币
55768
威望
13933
银币
26
贡献
0
发书数
3
注册时间
2015-5-6
最后登录
2024-4-27
在线时间
3982 小时

年度活动达人

发表于 2023-12-29 18:42 | 显示全部楼层
能定位也不错了,ocr的文本千奇百怪,人工都还要看一会到底怎么改,要一键修复也不现实。
回复 支持 反对

使用道具 举报

15

听众

0

收听

0

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
127833
积分
3358
回帖
1749
主题
19
铜币
26482
威望
2372
银币
0
贡献
50
发书数
15
注册时间
2020-11-9
最后登录
2024-4-27
在线时间
739 小时
发表于 2023-12-30 09:11 | 显示全部楼层
爬取的文本基本上都乱七八糟,句尾多出无意义的字母或数字,以逗号结尾,省略号不统一之类的让人心累
[发帖际遇]: 独饮忘川 装清纯成功,骗到 3 铜币. 幸运榜 / 衰神榜
世间无限丹青手,一片伤心画不成。
回复 支持 反对

使用道具 举报

15

听众

0

收听

13

好友

贡士

Rank: 7Rank: 7Rank: 7

UID
155378
积分
2985
回帖
1024
主题
67
铜币
44244
威望
2434
银币
0
贡献
0
发书数
57
注册时间
2023-6-14
最后登录
2024-4-27
在线时间
1537 小时
 楼主| 发表于 2023-12-30 20:52 | 显示全部楼层
chetiayi 发表于 2023-12-29 18:42
能定位也不错了,ocr的文本千奇百怪,人工都还要看一会到底怎么改,要一键修复也不现实。



用这个脚本查你新发出来的这本书,也改了八九十个引号错误,不少地方确实肉眼较难识别。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|阡陌居

GMT+8, 2024-4-27 15:23 , Processed in 0.047143 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表