一个为翻译领域的工作人员/学生设计的排版小工具。
项目地址:https://github.com/NoHeartPen/YiPai
开发故事
作为日语专业的学生,经常被要求按照如下格式提交作业。
这种排版确实方便完成翻译后带着目的查找、比对关键信息。进行这样的阅读训练对于提升外语的笔译能力也有非常显著的效果——但给文章排版不是,尤其是还得专门修改日语的字体、缩进等等。
为了节省时间,我编写了「译排」的前身Unit-00.py——但当时并不能熟练地运用循环和模运算,所以它只能给永远都是六段的《天声人语》文章排版。
但是当我开始有意识地大量泛读时,发现同样的排版可以用在自己的读书笔记上——左边原文,右边记录自己的想法。
但泛读的文章长度不固定,来源也是五花八门: 纸质书拍照OCR的文本、复制粘贴的新闻网页……如何及时地复习看过的内容也是一个头疼的问题。
于是渐渐地有了更多想法: 与各类笔记软件搭配(即更多导入导出格式)、自动归档重命名(方便整理、复习)……所以就有了modlue文件夹下的若干个脚本。之后的很长一段时间,它们只是静静地躺在不同的文件夹,默默地互相处理文件。
一次偶然的谈话,让我意识到其他同学也有类似的需求,但这个需求实在太过偏门——有需要的大多是文科生,有能力实现的人不多,而且市面上已有的笔记工具,为日语做过优化的更是少之又少。
因此我决心重构这些脚本,尽力编写了一个操作界面,并将它们打包成一个开箱即用的软件——对大多数学外语的同学来说,直接使用Python脚本的难度未免大了点。
在2021年的农历最后一天,我正式在Github释出源码,译排就这么诞生了。
想说的话
作为一个半路出家学日语的理科生,我迷茫过很久,折腾过不少所谓的知识管理工具,但最终意识到泛读就应该和马伯庸先生的如何阅读《二十四史》? - 知乎 (zhihu.com)这个回答一样:
史书浩如烟海,什么内容都有,若是漫无目的去翻看,时间精力姑且不说,吸收效率也会特别差,很快就疲了,所以你最好给自己设定一个目标、一个任务,带着一个特定的目的去读书,就能做到有的放矢。……一本史书,要读很多遍,每一遍都只专注于一个层面,所谓 “每书数过,一意求之”。……说白了,只要你带着目的,就知道自己想要的是什么,可以对资料有所取舍,专注一道。反复几次,吸收效率才高。
所以泛读重要的不是(走马观花地)读了多少,而是阅读过程到底思考了多少。这里也分享了我自己的泛读流程,希望对你有所启发。
最后是我对使用这款软件的朋友的一句美好祝愿:愿你「阅」有所思,「译」有所得。
设计思路
下面介绍译排的一些特性,以及为什么会支持这些功能的原因。
大致架构
作为野路子出身的半吊子开发者,我并没有系统性地学习过软件设计方法,但栽过一次跟头即在这个markdown2anki的项目之后意识到了:如果一开始对架构没有清晰的设计,后期更新一行代码就得把所有代码从头再写一遍。
这次才会煞有介事地按照SATR法则来设计:
- Situation 读取待处理的文件夹内的所有docx格式的文件,将里面的所有文字写入
.YiPai\.process\下的一个同名的md格式的文件内,这一步会丢失源文件的所有排版,包括字体、字号、缩进 - Action 对
.YiPai\.process\内的所有md后缀名进行格式化处理(包括删除西文空格,替换全半角数字等操作) - Target: 以上一步生成的文件为基础,生成指定排版要求的docx,如果有需要,还会生成一个PDF文件
- Result: 将上一步生成的docx和pdf移到指定的文件夹以及进行其他相关操作。
Situation
- Docx2Docx 最常用的通用格式
- Docx2PDF 提交作业、打印
- Docx2txt txt可以导入Anki
- PDF2Docx 实现起来难度不小
- 支持HTML格式的离线网页,即提取其中的文字部分
- 支持处理其他文件夹的文件
- 支持快捷键
- 支持处理单个文件
- 一个悬浮窗,直接处理拖拽进来的文件,(感觉难度非常大……)
- 支持保存源文件中的图片
Action
与文本处理有关的内容,比如替换西文空格——直接复制粘贴网页的内容很容易产生的问题。
- 自动替换OCR的多余换行符,很多OCR软件都有的问题
- 自动替换西文空格
- 自动替换《天声人语》的标记
- 自动替换全角数字为半角,虽然不是所有情况都是写半角的数字,但还是提供这么一个功能
- 同时调用各大厂商(百度、搜狗、Google)的机器翻译API翻译文章,并将翻译结果单独编为一列,便于进行比较
- 文章上传到チュウ太の道具箱获取文章的词汇难度
- 优先适配日本的新闻网站
- Yooho首页的新闻
- 青空文库 (默认采用的Shift_JS编码)
- 维基百科 词条
- ……
- 优先适配的微信公众号文章网页
- 联普日语社区
- CATTI与考研
- ……
- 删除假名注音的
<ruby></ruby>的HTML语法标记,便于直接复制查词
Target
简单理解,就是设置字体、字号
- 支持自定义字体,字号,缩进
- 支持以中文排版的常用单位进行自定义,比如“小五”、“2字符”
- 支持保存自定义配置
- 支持只导出需要的文件,不需要的文件直接删除
- 在源文件无双语的情况下,靠某一边排列文本
- 在源文件有双语的前提条件下,直接删除最终生成的某一边文档
Result
简单来说就是生成的文件要怎么用的问题,是直接打开,还是发送给某个人?
- 执行完毕后以指定的软件打开,默认以MS Office 打开Word
- 支持用自定义软件打开(比如WPS),但需要自己填入软件的安装路径
- 移动到一个指定的文件夹——不会真有人喜欢到处找文件的感觉吧?
- 对文件进行快速命名,主要是保存一些常用的短语,节省打字时间,以及防止输错
- 比如学号、姓名、班级——提交作业时还是比较实用的吧?
- 而自己用时,添加一个日期的前缀,一下就能找到最近在看的内容
- Windows端如何做到快速发给指定的某个人呢?
- 调用Windows的邮箱功能直接发送给一个指定的邮箱不是什么难事
- 但更多的人应该是需要一键直接QQ发送,这个就比较棘手了。我只知道,Android端的QQ可以通过
intent实现类似的功能
Others
主要是关于UI设计,由于我不熟悉前端开发,所以这部分确实做得比较反人类
- 提供按钮的交互反馈
- 优化启动速度,好吧,我承认我的垃圾代码确实拖慢了启动速度
- 优化软件安装包大小,这个与Python打包机制有关,已经有解决办法了
- 制作软件图标——你有什么好的设计可以直接发给我呀(
意思是我不会专门花时间去绘制一个图标) - 新增暗黑模式——我知道很多同学都是第二天要交作业了,才会挑灯夜战,这个时候一个不晃眼睛的屏幕也许可以安抚焦躁不安的心情
- 自动切换暗黑/明亮模式——Windows10居然不支持自动切换,所以我计划提供的是基于时间段的自动切换(比如十点之后自动切换)
- 多语言界面支持,这个纯粹是满足我个人的强迫症……
- 多平台支持(虽然 Python 是一门解释型语言,但编写时没有注意不同平台路径的
/和\的问题,还使用了大量win32的API,对于跨平台的支持会比较糟糕,此外,由于精力有限,这条 Todo 可能只是给有想法的同学一个提醒,更多具体的技术细节请阅读DEVELOPMENT_GUIDE.md) - Linux 测试
- 计划会在Windows平台上的 Virtual Box 6.1上使用 Debian 测试除打印为PDF的其他功能,其他发行版本的话请自行测试
- Termux虽然支持在Android上模拟Linux环境,但是要想读取Android系统的内的文件估计比较麻烦,欢迎有能力有兴趣的同学替大家踩雷
- Mac 测试 (由于我没有Mac设备,有条件、有需要的同学也请自行测试。注意本App基于Python3进行开发,Mac 自带的Python 2.7 版本需要修改部分语法,也可以选择另外安装Python 3.X)
- 支持Android端,当我认清现实老老实实用Python写完全栈时,就已经放弃支持手机端了。但这个功能确实挺实用的,希望有大佬出手用其他语言重构一下。
