日文构词法文件hunspell_ja_JP的修复以及功能扩展

2026年9月25日更新:
蹬腾讯codebuddy里面的限时免费:free_button:浑元4的时候,AI告诉我原来hunspell支持类似
引きこもる/5A5I5T5E5OBDUYUBubKN st:引き籠もる
这样的写法直接做到:
引きこもらない → 引きこもる → 引き籠もる
无需两次调用 Hunspell,我之前把 ja_JP.dic 写成这样:

ひきこもる/5A5I5T5E5OBDUYUBubKN
引きこもる/5A5I5T5E5OBDUYUBubKN
引きこもる st:引き籠もる

需要两轮调用。
故修改之。

2026年9月13日更新:
mumu的《词悦》支持两步查询啦!把hunspell_ja_JP的混书(mazegaki)部分做了相应的修改。

2026年8月14日更新:
增加了一些纯假名动词的活用型flag标注(おちゃらける/1KBDUyUbKN、テンパる/5A5I5T5E5OBDUYUBubKN 等)。
增加了形容词、形容动词的〜そう、~すぎ后缀,动词的~すぎ后缀。
2026年8月11日更新:
根据《三省堂国語辞典第八版》增补了将近五千个词汇的混书形式。给一些纯假名的动词比如「だらける」增加了活用flag标注。


之前在GoldenDict中使用MrCorn0-0的日文构词法文件hunspell_ja_JP的时候就发现动词基本上都能还原到原形,但是有的形容词能还原到原形,有的不可以。比如「さむかった」能还原到「さむい」,「寒かった」能还原到「寒い」,但是「おいしかった」不能还原到「おいしい」。为什么会这样呢?我在AI的辅助排查下,终于发现原来.dic文件中有一千多个形容词的标注有问题。

.dic文件中有一千多个1形容词的条目是类似这样的:
愛愛しい/xAxaxixIxUxExexx/XKToXQXrXO
然而,Hunspell实际上不允许.dic 的词条后面有多个“/”。
根据 hunspell(5) 的多个权威手册页,规范非常明确:

“Each word may optionally be followed by a slash (“/”) and one or more flags”
hunspell(5) — libhunspell-dev — Debian unstable — Debian Manpages

一个词汇后面可以有多个flag标注,但是斜杠(/)只能有一个!
于是让AI写了一行vim命令

:%s/\(^[^\/]*\/\)\(.*\)/\=submatch(1) . substitute(submatch(2), '\/', '', 'g')/

把.dic文件中多余的“/”删了。这下搜索「おいしかった」终于能还原到「おいしい」了!

这个搞定之后我又思考了一下能不能用GoldenDict的Hunspell文件独有的 st: 扩充一下内容。首先我把「する」「くる」这两个词的变化形式都用 st: 指向了原形。

然后我想能不能实现「混ぜ書き」的转换?首先上网找,看看有没有「混ぜ書き」的转换词库。一搜,居然还真有,是日本用「汉直」输入法的人做的:

GitHub地址:

于是让AI写代码把它转换成了GoldenDict版Hunspell能用的格式了。现在搜索「まん延」可以同时找到「万延」「蔓延」了。真不错。但是搜索「立てこもり」还不能找到「立て籠もる」,因为这个辞典文件中是这样的:

立てこもり st:立て篭る

不仅送假名是非现代标准的节约版,还使用了异体字篭!看来这个辞典的动词部分需要好好人工审核一遍才行。
但是这个肯定不是一两天能完成的事情,有一万多行呢,于是补了一行深セン st:深圳之后暂且先把现有成果上传到GitHub吧。。
实际使用了之后发现这个Mozc混ぜ書き词库的错误不少,除了送假名不符合《大辞林》之类词典的标准之外,还有不少自动生成生错了的地方,比如:

石っけん st:石鹸
せ鹸 st:石鹸

其实应该是

石けん st:石鹸
せっ鹸 st:石鹸

要一点点改。
我的fork:

进展:
把oktopus1959「混ぜ書き」词库的形容詞和五段、一段動詞的部分校对了一遍。
增加了一部分词语,比如用「着ぐるみ」(网络上常见的写法)现在可以查到「着包み」(《大辞林》等辞典中的写法)了。
用AI生成了把Mozc格式词典转换成Hunspell支持的st:格式的Python3脚本:

python3 convert_with_conjugation.py && python3 sort_lines.py mazegaki_st.txt mazegaki_st_sorted.txt && python3 dedup_sorted.py mazegaki_st_sorted.txt mazegaki_st_sorted_dedup.txt && python3 merge_with_count.py ja_JP_A.dic mazegaki_st_sorted_dedup.txt ja_JP.dic

convert_with_conjugation.py 将 ipadic.maze.csv转换成mazegaki_st.txt
sort_lines.py 对mazegaki_st.txt排序生成mazegaki_st_sorted.txt
dedup_sorted.py 去除重复行,生成mazegaki_st_sorted_dedup.txt
merge_with_count.py 将ja_JP_A.dic和mazegaki_st_sorted_dedup.txt合成到ja_JP.dic并在顶部写上文件的行数,这是Hunspell的要求。

这样如果遇到文件里面没有收录的词汇,比如原先没有收录的「着包み」,那就可以让AI先生成

着包み	着包み	名詞	きぐるみ	--	BASE
着ぐるみ	着包み	名詞	きぐるみ
き包み	着包み	名詞	きぐるみ
きぐるみ	着包み	名詞	きぐるみ

放到 ipadic.maze.csv 中 再用脚本拼接生成ja_JP.dic吧。

我的fork:

不知道功能是不是跟这三个mdx类似



如果是自己提取写法的话建议还是从尽可能多一点的词库提取,除了图片里这些还有旺文社的国语辞典和标准国语辞典

MrCorn0-0似乎就是Gary,你的截图中已经有他的名字了,我就是fork的他。他原先提取的词头应该是来自大辞林第三版,因为有几个别的辞典都没有的词头。还有没有别的辞典也收了就不知道了。

混书(混ぜ書き)的还原我还没有做完,但是主要是以《三省堂国语辞典》《新明解国语辞典》作为参考,二十万词级别的辞典就没有考虑了,古文和百科条目考虑混书形式的还原恐怕意义不大。

这个感觉太麻烦了。想来个简单的,像西语变位那样一劳永逸解决变形词的查询。

GoldenDict很早就有西班牙语的"better morphologies"了。

日文是本来就没有拼写检查文件,而且根据已有辞典搞hunspell显然会遇到日文本身的复杂性。