如何才能更好地电子词典编辑及协作?

本文意在探讨电子词典的编辑和协作方式。电子词典可以是 MDX,也可以是 DSL 或者其他格式,他们都有一个相同特征:非纯文本。

词典编辑,顾名思义,更改词典的内容:对词条做出修正,增加或者减少词条,更改 CSS 或者 JS。词典协作可以理解成多人一起编辑。

一直以来我编辑词典的步骤都是:

  1. 获取词典的源文件,如果本地没有就需要解包打包好的电子词典。
  2. 手动或者使用程序作出更改。
  3. 使用 mdxbuilder 打包,mdxbuilder 的 cfg 文件还只能存储上一次打包的数据,结果就是每次都需要重新填入。

这个过程确实是很繁琐,但在之前似乎确实没有什么好办法。至于多人共同编辑一个词典,似乎就更是繁琐了。

词典编辑和协作这个问题我其实已经想过很久了,但是一直没有什么好的想法。我把已经有的想法整理如下,想和大家探讨一下如何利用现有软件实现这个目标,抛砖引玉。毕竟如果写一个新的编辑/协同软件的话,那应该要求都能满足,不过那就是一个大坑了。

使用 mediawiki

  1. 将最初版本词典导入到 mediawiki,图片地址,JS CSS 地址均被替换成网络地址
  2. JS 和 CSS 的处理较为繁琐
    1. 将 CSS 和 JS 存进分别的词条
    2. 当 CSS JS 词条有更新的时候,发送 webhook 到 辅助程序 A
    3. 辅助程序 A 检查 CSS JS 的安全性,并更新到 CSS JS 的网络地址
  3. 词典的元数据放在一个特殊的词条,比如 [[metadata]]
  4. 多用户直接编辑 HTML,可能会有潜在的安全隐患,浏览器里面还好,因为有各种安全策略,我担心的是词典软件内的问题。虽然可以批量使用正则编辑,不过如果想使用软件如 Python 批量编辑,那还是一个问题。
  5. 定时(每天或者其他时间段)使用 mdx-utils 自动打包成 MDX 或者其他格式,放在一个公开的链接,注明打包日期,用户可以直接下载更新。3 中的安全担忧也许可以在此过程中通过安全扫描的方式解决。

此上过程可以让用户专注于词典的编辑,完全不用担心词典的打包,其实就是将 CI/CD 放在词典编辑过程,整体难度不算高。不过此方式会有一些让人不爽的地方:

  1. 万一有人搞破坏,虽然有完整的历史记录,但是需要一点时间恢复。
  2. 直接编辑 HTML 的体验不是那么好,虽然也可以富文本编辑,不过这取决于需要更改 HTML 结构的时候多不多。

我在此抛砖引玉了,还希望大家畅所欲言。

对这个需求深入分析,感觉就第1条需求比较大,也比较适合多人、在线协作。
1、词条整理:我觉得这是最大的需求,技术不难但耗时最长,单个人难以完成,而多人很容易完成。
2、批量全文处理:这需要正则、程序处理等,不太适合线上、多人协作。
2、CSS或JS等:这更多体现的是个性化需求,不太适合多人协作。
3、打包:虽然有点繁琐,但也不是什么问题。

那要做好第一条有什么好的软件推荐吗?

没有特别推荐。。。
1、不同词典,每次的具体需求不同
2、要做的话,最好是git之类,方便版本管理,否则组织者累死还容易出错,但这对参与者又提出比较高的要求。

仅仅就词条整理这个需求本身,好像,类似在线 excel 的工具,可能比较均衡灵活性(对需求而言)和易用性(对用户而言)。但版本管理以及后续进一步加工之类,就不清楚了,没怎么用过这些在线软件。。。

使用 mediawiki 協作已經有現成的了

維基辭典
https://zh.wiktionary.org/

維基文庫
https://zh.wikisource.org/

不過如果要本地運行的格式,還是要另外匯出 JSON 再轉成可讀格式

可讀格式可以選 MDX 或是 TiddlyWiki

MDX 製作跟修改比較不方便,行動端用APP匯入就可以用,好像還可以加密辭典

TiddlyWiki 編修很簡單功能也多,但行動端有相容性問題,不過可隨時轉回 JSON 方便多個辭典同步作業,一切都開放,無法加密辭典

1 Like

也许可以搭一个简易、非公开的类github平台,把待核对的源文件切分若干份,参与者 fork、pull,组织者审核、合并

词条太多,几万到几十万不等,如何组织文件是一个问题。

1 Like

或者可以开发一个类似项目文件管理的系统,一个词典当成一个项目来在线管理,然后分配用户权限来管理词典编辑人员。同时在服务器端后台生成mdx, 前端配合MDX Preview之类的工具实现实时编辑和预览,但可能要存储空间够大才行,毕竟未压缩的词典文件可能随时超过2G以上。

感觉GitHub可以。

源文件.txt 不用切割,直接整个文件上传至仓库。其他网友Fork仓库,打开源文件,修改某个或多个词条,之后提交Pull Request。

然后有两个思路:

一是引入Netlify-bot之类,针对PR生成相应的网页预览,打开预览后检查所修改的词条是否合格,合格的话就Merge。但具体如何调试(指把源文件生成为可查询的网页),我暂时没有好的想法。

二是一旦有PR,则自动调用GitHub Actions生成对应的MDX字典文件并发你Pre-Release下载。但这样不好及时查看修改的效果。

1 Like