词典引擎地址:fstd
自研了一款基于有限状态转换器(Finite State Transducer)作为索引的新词典格式,fstdx/fstdd,分别对应mdx/mdd。
支持正则搜索,和基于编辑距离的模糊搜索,当然也支持基于trie的传统词典的前缀搜索。
下面效果图的图形界面并不包含在词典引擎项目中。
正则搜索效果:
模糊搜索效果:
很多时候动词在使用中都会变形,我们划词或复制粘贴搜索的时候都找不到动词的原形。英语词典还好,对于查找变形后的单词能直接跳转到动词原形词条,但其它语言,至少日语和韩语,支持这个的词典很少。这也是我写这个词典引擎的动因之一。在日韩语中,动词和形容词原形的后缀是固定的,japanese (“する”, “う”, “く”, “ぐ”, “す”, “つ”, “ぬ”, “ぶ”, “む”, “る”, “い”) , Korean (“하다”, “다”)。我写了一个自动机算法,通过公共前缀和优先后缀去排序候选词。当然,不是在所有的情况下都有最好的效果。
前缀距离+优先后缀搜索效果:
至于后缀搜索,有正则表达式的".*suffix"的完全等价形式,但因为这个未知前缀,正则表达式自动机无法提前剪枝,导致要遍历所有的状态和边,虽然我加了并行优化,但如果词头非常多也会比较慢。建议可以用".{0,5}suffix"这样的不完全等价形式进行搜索,性能会好很多。如果非要支持这个功能就需要把所有词头倒排后编译fst索引,性能和前缀搜索一样,但内存要翻倍。
项目从一开始就考虑了要支持从mdx/mdd转化成fstdx/fstdd。转换器:mdict-fstd。转换器readme还没有完全完善,mdd还不支持,但都支持手动extract mdx/mdd出原生文件后用fstd进行编译。
目前已在linux和macos arm64/x86测试通过,下载release压缩包后可执行路径bin/fstd。windows平台可编译但有bug,我定位了一下好像是启动线程池的时候会segment fault,因为我没有windows的机子,不方便修复,有人能修复的话可以给我pull request。
欢迎大家提提意见。



