乐于分享
好东西不私藏

Chou(瞅)-PDF论文重命名工具升级了!这次专门优化了中文论文支持

Chou(瞅)-PDF论文重命名工具升级了!这次专门优化了中文论文支持

最近收到不少反馈,说处理中文PDF论文时总是遇到各种问题,有的提取出来是乱码,有的作者名字识别不准,还有的年份根本提取不到。

所以尽量将这些问题都修了一遍。今天就跟大家聊聊这次升级都做了啥。

先说说问题出在哪

用过Chou的同学都知道,它能自动从PDF里提取标题、作者、年份,然后把论文重命名成标准的引用格式。比如把一篇论文从原始文件名改成”作者等 (年份) – 论文标题.pdf”这样的格式。

但对中文论文就没那么友好了。我测试了一批中文PDF,发现了几个大问题。

第一个问题是字符编码错乱。很多中文PDF用原生方法提取出来的文本全是乱码,完全看不懂。这是因为PDF内部的字体映射表不对,提取出来的字符就乱套了。

第二个问题是扫描版PDF没文字。很多老论文是扫描版的,PDF里根本就没有文字层,只能看到图片。原来的工具提取出来是空的,啥也干不了。

第三个问题是中文学位论文格式特殊。中文的硕士、博士学位论文通常有标准的封面格式,比如”论文题目”、”作者姓名”、”指导教师”这些字段。但原来的工具不认识这些字段,提取出来的信息乱七八糟。

这次升级怎么解决的

乱码问题,智能检测加自动OCR

加了一套乱码检测系统。简单说就是,提取完文本后,我会检查有没有奇奇怪怪的控制字符,有没有大量的替换符号,中文汉字之间是不是混入了垃圾字符。

如果发现这些问题,就说明原生提取有问题。这时候我会自动调用OCR引擎重新提取。OCR就是把PDF当成图片,用AI识别上面的文字。虽然慢一点,但准确率高得多。

实际测试下来,60%的中文PDF都需要用OCR。比如有个例子,原生提取只有73个中文字符还带乱码,OCR提取后有88个中文字符而且完全正确。

扫描版PDF,强制OCR

对于扫描版PDF,检测到文本长度为0或特别少,直接强制使用OCR。测试了几个扫描版的老论文,都能成功提取出内容了。

中文学位论文,智能字段识别

现在能识别中文论文的标准字段了,包括标题相关、作者相关、导师相关等各种字段。识别到这些字段后,就能准确提取对应的内容,不会再把”指导教师”后面的名字当成标题了。

中文姓名,2到4个字的都能识别

中文姓名通常是2到4个汉字。之前有时候会把”概率论与数理统计”这种当成作者名,现在加了过滤逻辑,能区分真正的姓名和学科名称了。

实际效果怎么样

我用了真实的中文PDF论文做了测试,结果还挺满意的。

有个案例是正常PDF但编码有问题,检测到25%的字符是乱码,自动触发OCR后成功提取了标题、作者、年份,生成了正确的新文件名。

另一个案例是扫描版PDF,文本长度为0,强制OCR后成功提取出近百个字符,正确识别了标题、作者、年份。

还有个中文学位论文的案例,检测到学位论文标准格式后,从”作者姓名”字段提取作者,从”论文题目”字段提取标题,都很准确。

整体来看,测试的论文里97.6%的测试用例通过,60%的中文PDF自动触发了OCR,OCR提取的字符数平均提升30到50%。

怎么用

安装

首先安装Chou,直接用pip安装就行:

pip install chou

如果想获得最佳效果,建议再安装一个OCR引擎。推荐用Surya,准确度最高:

pip install surya-ocr

或者用PaddleOCR,对中文特别友好:

pip install paddleocr paddlepaddle

不想装OCR也能用,但遇到乱码或扫描版PDF就没办法了。

更新

如果你之前已经安装过Chou,想更新到最新版本,用这个命令:

pip install --upgrade chou

如果之前装过OCR引擎,更新完Chou后OCR功能会自动可用,不用重新装。

预览

先用dry-run模式看看效果,不会真的改文件:

chou --dir /你的论文目录 --dry-run

比如你的论文在/home/user/papers这个文件夹,就这么写:

chou --dir /home/user/papers --dry-run

在Windows上,路径可能长这样:

chou --dir C:\Users\YourName\Documents\papers --dry-run

运行后会显示类似这样的输出,告诉你每个文件提取的标题、作者、年份,以及生成的新文件名。

日志

如果想看OCR触发了没有,加个-v参数看详细日志:

chou --dir /你的论文目录 --dry-run -v

你会看到OCR触发的原因和提取效果的对比信息,比如某篇论文检测到多少比例的乱码,OCR提取了多少字符,对比原生提取提升了多少。

执行

觉得预览效果不错,就把–dry-run改成–execute真正执行重命名:

chou --dir /你的论文目录 --execute

注意,这个操作会真的改文件名,建议先备份或者先在测试文件夹里试一下。

其他参数

想处理子文件夹里的PDF,可以加–recursive参数(默认就是递归的):

chou --dir /你的论文目录 --execute --recursive

只想处理当前文件夹,不加子文件夹:

chou --dir /你的论文目录 --execute --no-recursive

想改变作者格式,比如显示所有作者而不是只显示第一作者:

chou --dir /你的论文目录 --dry-run --format all_surnames

可选的格式有下面这几种:

格式名称
说明
示例效果
first_surname
只显示第一作者姓氏(默认)
张 et al. (2023) – 论文标题.pdf
first_full
显示第一作者全名
张三 et al. (2023) – 论文标题.pdf
all_surnames
显示所有作者姓氏
张, 李, 王 (2023) – 论文标题.pdf
all_full
显示所有作者全名
张三, 李四, 王五 (2023) – 论文标题.pdf
n_surnames
显示前N位作者姓氏
张, 李 et al. (2023) – 论文标题.pdf
n_full
显示前N位作者全名
张三, 李四 et al. (2023) – 论文标题.pdf

如果用n_surnames或n_full格式,可以用–num-authors参数指定显示几位作者:

chou --dir /你的论文目录 --dry-run --format n_surnames --num-authors 2

想导出处理结果到CSV文件:

chou --dir /你的论文目录 --dry-run --output results.csv

还有哪些不足

虽然改进了不少,但还有些地方需要优化。

OCR后的文本解析方面,有些论文OCR提取出来的文本,标题和作者分不太清楚,可能识别不够准确。

非标准格式的论文,比如特殊排版的中文学位论文,可能识别不准。

中英文混合的论文,作者名字有时候会搞混。

处理速度方面,OCR比较慢,一篇论文可能要几秒钟。

这些问题我会继续优化,也欢迎大家提Issue反馈。

总结

这次升级主要解决了三个痛点。

乱码PDF自动检测并用OCR重新提取。

扫描版PDF能用OCR识别文字了。

中文学位论文能正确识别标准字段。

现在处理中文论文应该顺畅多了。如果还有问题,欢迎在GitHub提Issue,或者加群讨论。

最后,如果觉得这个工具有用,欢迎Star支持一下。项目地址是 https://github.com/cycleuser/Chou

祝大家论文管理愉快!