如何使用 KOReader japanese 插件的动词还原(deconjugation)支持日语词典查询
【免费下载链接】koreaderAn ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices项目地址: https://gitcode.com/GitHub_Trending/ko/koreader
在 KOReader 里阅读日语 EPUB 时,直接在变形动词上长按查词典通常查不到结果——词典里收录的是词典形,而文中出现的是各种活用形。KOReader 自带的 japanese 插件 解决这个问题:它基于 Yomichan 的还原(deinflection / deconjugation)规则表,把选中的文字还原成一组候选词典形,再交给 StarDict 词典查询,从而实现一次长按即可查到变形动词和多字符词语。本文以插件自带的规则表和设置菜单为准,说明启用、配置和验证这条完整路径。
准备条件:启用插件并安装日语词典
插件有两个硬性前提,都写在插件的元数据 plugins/japanese.koplugin/_meta.lua 中:
- 插件必须启用。japanese 是语言支持插件,语言插件菜单的帮助文本(frontend/languagesupport.lua 中
addToMainMenu)明确说明:要禁用语言插件需要从 Plugin Management(插件管理)菜单操作,启用同理。在 KOReader 主菜单的插件管理中找到 “Japanese support” 并启用。 - 必须安装至少一本日语词典,否则插件无法正常工作(_meta.lua 原文:“You must have at least one Japanese dictionary installed in order for this plugin to work smoothly with Japanese text”)。
词典可以从 KOReader 内置下载列表获取:打开Settings(设置)→ Dictionary settings → Download dictionaries,该菜单由 frontend/ui/data/dictionaries.lua 按语言分组生成。列表中包含:
- JMdict Japanese-English dictionary:188380 条词条,CC-BY-SA 3.0;
- JMnedict Japanese-English name dictionary:741290 条人名词条,CC-BY-SA 3.0。
词典下载后以 StarDict 的.ifo文件形式存放在数据目录的data/dict下(frontend/apps/reader/modules/readerdictionary.lua 的init中data_dir解析顺序为G_defaults:readSetting("STARDICT_DATA_DIR")→ 环境变量STARDICT_DATA_DIR→ 数据目录data/dict),查询由内置的 sdcv 完成。装好后可以在同菜单的 “Manage dictionaries” 里确认词典已启用。
基本操作:在 EPUB 中长按查词
插件对文档语言的要求见 plugins/japanese.koplugin/main.lua 的supportsLanguage:识别ja和jpn两种语言代码。打开一本日语 EPUB 后:
- 在句子的任意位置长按,产生初始选区。
- 插件的
onWordSelection会从选区起点向字符逐个扩展,每扩展一次就用还原器对当前前缀做一次 deinflect,直到碰到标点(JAPANESE_PUNCTUATION列表,如。、「」、等)、到达扫描长度上限,或文本中出现非 CJK 字符。 - 所有前缀产生的候选词被合并后一次性批量调用
sdcv(代码注释说明这样做是因为每次 sdcv 调用开销较大),然后选取在已安装词典中命中的最长词作为最终选区。 - 触发查询后,若耗时超过约 0.5 秒会先显示
Searching dictionary for: <词>的提示(readerdictionary.lua 的lookup_msg与lookup_msg_delay = 0.5),随后弹出词典结果窗口。根据 frontend/languagesupport.lua 对 WordLookup 回调的说明:如果多个候选词都在词典中命中,所有命中项都会显示给用户。
两点适用边界,均来自源文档:
- PDF 等分页格式不支持选区扩展。languagesupport.lua 的
createDocumentCallbacks注释明确说明目前只有支持getNextVisibleChar的文档(即 EPUB 一类)才能扩展选区,日志文案为 “language support currently cannot expand document selections in non-EPUB formats”。 - 只含非 CJK 字符的选区直接跳过,插件不会对英文等文本做还原(main.lua 中
hasCJKChar检查)。
配置扫描长度与文本转换
启用插件后,主菜单会出现Language support plugins → Japanese子菜单(由Japanese:genMenuItem生成),其中有三项与“能否还原成功”直接相关。
Text scan length(扫描长度)
对应设置项language_japanese_text_scan_length,默认值 20,范围 0–1000,调节步长 1、长按步长 10。帮助文本说明:它是“尝试扩展长按选区时向前看多少个字符”,数值越大能自动选中越长的短语,代价是选词可能变慢。默认 20 的原因是 crengine 的getNextVisibleChar会连 furigana 一起计数(main.lua 中DEFAULT_TEXT_SCAN_LENGTH的注释)。
Text conversions(文本转换)
对应设置项language_japanese_text_conversions,位于 Japanese 子菜单的 “Text conversions” 项下,四项转换及默认开关(deinflector.lua 中DEFAULT_TEXT_CONVERSIONS):
| 转换 | 默认 | 用途(摘自 deinflector.lua 的 help_text) |
|---|---|---|
| Halfwidth to fullwidth kana | 开 | 半角片假名转全角,如カタカナ→カタカナ |
| Hiragana to katakana | 关 | 平假名转片假名,如ひらがな→ヒラガナ |
| Katakana to hiragana | 开 | 片假名转平假名,如カタカナ→かたかな |
| Collapse emphatic sequences | 关 | 折叠语气强调序列,如すっっごーーい→すっごーい和すごい |
这些转换解决的是“词的文字形式与词典收录形式不一致”的问题。注意菜单帮助文本的说明:不会一次同时应用全部转换,而是把已启用转换的所有组合都尝试一遍,以最大化命中词典中某种假名形式的概率。
Deinflector information(验证还原器是否加载成功)
Japanese 子菜单中的 “Deinflector information” 会弹出一条 InfoMessage,格式为Deinflector has %1 and %2 loaded.,其中两个占位符分别是已加载的 rule 数和 variant 数(deinflector.lua 的genMenuItems)。这是核对规则表是否被正确解析的最直接方式:如果插件或 JSON 文件损坏,init只会加载到空表,这里显示的数量会明显异常。
还原规则从哪里来
还原逻辑的核心是 plugins/japanese.koplugin/yomichan-deinflect.json。README 说明该文件是逐字(verbatim)拷贝自 Yomichan 的ext/data/deinflect.json,两者同为 GPL-3.0-or-later 许可;将来要更新时,用更新的副本替换该文件即可。
每条规则是“后缀替换”:若词条以kanaIn结尾且长度足够,就把该后缀替换为kanaOut,得到一个新的候选形。文件实际内容摘录如下:
"-ba": [ {"kanaIn": "ければ", "kanaOut": "い", "rulesIn": [], "rulesOut": ["adj-i"]}, {"kanaIn": "えば", "kanaOut": "う", "rulesIn": [], "rulesOut": ["v5"]} ]即-ba规则组里,“~ければ”可还原为 i 形容词的 “~い”,“~えば”可还原为五段动词的 “~う”。规则用位掩码标记词性类型(deinflector.lua 的RULE_TYPES):
v1:一段动词(ichidan / ru-verb)v5:五段动词(godan / u-verb)vs/vk/vz:する / くる / ずる动词adj-i:い形容词iru:表示进行或完成时的中间 -iru 结尾
rulesIn表示该规则只能接在特定类型的还原结果之后(例如 “-chau” 规则组的rulesIn: ["v5"]),从而把多步还原串成链条,这也是 Yomichan “rule-matching suffix replacement system” 的纯 Lua 实现。
验证结果与适用边界
按以下顺序核对,每一步都有文档依据:
- 主菜单出现Language support plugins → Japanese:说明插件已注册(languagesupport.lua 只在有启用的语言插件时才挂出该菜单)。
- Japanese 子菜单里打开Deinflector information,看到
Deinflector has N rules and M variants loaded.且 N、M 非零:说明yomichan-deinflect.json解析成功(deinflector.lua 的init会逐条解析规则并统计计数;解析失败时只在日志里报failed to parse plugin json,界面不会崩)。 - 打开日语 EPUB,长按一个变形动词(如带
~ば、~ている等后缀的形式):选区自动扩展到完整词形,弹出词典窗口显示释义,即整条“还原 → 查询”链路工作正常。
需要注意的边界:
- 最终能否查到,取决于词典里是否真的收录了还原后的形式。插件只负责把候选形送进 sdcv,命中的最长词才会成为选区;词典没有收录的词(main.lua 中的 TODO 也指出 JMDict 存在大量只收复合词/短语、不在单语词典中的词条)不会凭空产生结果。
- 词形与词典假名形式不一致时(如词典用片假名而文中是平假名),依赖上面 Text conversions 的转换组合;四项全关时只会按原文字尝试还原。
- 选区扩展遇到标点即停止,长句中的词不会被跨标点选中;扫描长度上限默认 20 个字符,更长的复合词需要调大 Text scan length。
如果后续要跟进 Yomichan 的规则表更新,按 README 的做法,用新版deinflect.json副本替换插件目录内的yomichan-deinflect.json后再重新打开 KOReader,用 “Deinflector information” 核对加载数量即可。
【免费下载链接】koreaderAn ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices项目地址: https://gitcode.com/GitHub_Trending/ko/koreader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考