news 2026/9/12 9:02:06

如何使用 KOReader japanese 插件的动词还原(deconjugation)支持日语词典查询

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何使用 KOReader japanese 插件的动词还原(deconjugation)支持日语词典查询

如何使用 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 中:

  1. 插件必须启用。japanese 是语言支持插件,语言插件菜单的帮助文本(frontend/languagesupport.lua 中addToMainMenu)明确说明:要禁用语言插件需要从 Plugin Management(插件管理)菜单操作,启用同理。在 KOReader 主菜单的插件管理中找到 “Japanese support” 并启用。
  2. 必须安装至少一本日语词典,否则插件无法正常工作(_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 的initdata_dir解析顺序为G_defaults:readSetting("STARDICT_DATA_DIR")→ 环境变量STARDICT_DATA_DIR→ 数据目录data/dict),查询由内置的 sdcv 完成。装好后可以在同菜单的 “Manage dictionaries” 里确认词典已启用。

基本操作:在 EPUB 中长按查词

插件对文档语言的要求见 plugins/japanese.koplugin/main.lua 的supportsLanguage:识别jajpn两种语言代码。打开一本日语 EPUB 后:

  1. 在句子的任意位置长按,产生初始选区。
  2. 插件的onWordSelection会从选区起点向字符逐个扩展,每扩展一次就用还原器对当前前缀做一次 deinflect,直到碰到标点(JAPANESE_PUNCTUATION列表,如。、「」、等)、到达扫描长度上限,或文本中出现非 CJK 字符。
  3. 所有前缀产生的候选词被合并后一次性批量调用sdcv(代码注释说明这样做是因为每次 sdcv 调用开销较大),然后选取在已安装词典中命中的最长词作为最终选区。
  4. 触发查询后,若耗时超过约 0.5 秒会先显示Searching dictionary for: <词>的提示(readerdictionary.lua 的lookup_msglookup_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 实现。

验证结果与适用边界

按以下顺序核对,每一步都有文档依据:

  1. 主菜单出现Language support plugins → Japanese:说明插件已注册(languagesupport.lua 只在有启用的语言插件时才挂出该菜单)。
  2. Japanese 子菜单里打开Deinflector information,看到Deinflector has N rules and M variants loaded.且 N、M 非零:说明yomichan-deinflect.json解析成功(deinflector.lua 的init会逐条解析规则并统计计数;解析失败时只在日志里报failed to parse plugin json,界面不会崩)。
  3. 打开日语 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 9:01:46

ESP32-P4 USB Host实战:U盘读写硬件设计、TinyUSB与FATFS详解

ESP32-P4到手之后&#xff0c;我第一个想试的并不是网络或者显示&#xff0c;而是它的USB Host。原因很简单&#xff0c;这块芯片是乐鑫目前唯一一颗内置USB 2.0 High-Speed OTG控制器、而且主频能跑到双核400MHz的型号&#xff0c;之前那颗带WiFi的S3虽然也带USB&#xff0c;但…

作者头像 李华
网站建设 2026/9/12 9:01:32

PHP 8.0命名参数详解:提升代码可读性与灵活性

1. PHP命名参数的前世今生在PHP 8.0之前&#xff0c;函数调用只能通过位置参数&#xff08;positional arguments&#xff09;来传递值。这种传统方式要求开发者必须严格按照函数定义时的参数顺序来传递值&#xff0c;否则就会导致意料之外的行为。比如我们调用一个简单的邮件发…

作者头像 李华
网站建设 2026/9/12 9:01:15

Spring IoC与DI核心原理及最佳实践

1. Spring IoC与DI的本质解析在Java企业级开发领域&#xff0c;Spring框架的核心价值很大程度上源于其优雅实现的IoC&#xff08;控制反转&#xff09;和DI&#xff08;依赖注入&#xff09;机制。要真正掌握Spring&#xff0c;必须从设计思想的层面理解这两个概念的本质区别与…

作者头像 李华
网站建设 2026/9/12 8:58:55

字符串等量移除算法:双指针技巧与贪心策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 8:57:15

GM通用工程师编程DPS软件安装与使用指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 8:55:41

GWO算法求解柔性作业车间调度问题的Matlab实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华