之前在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: