有没有一种简单的方法可以从 Hunspell/Aspell 字典数据文件生成人类可读的变形列表?
例如,我想生成以下输出(针对不同的语言):
...
书,书
书,书,预定,预定
...
去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去去了
...
我查看了 Hunspell/Aspell 文档,但找不到可以执行此操作的 API 调用。
命令行有一种方法,但它并不能完全按照您要查找的格式输出。如果您愿意,您也可以手动执行此操作,只需使用正则表达式编写一些简单的脚本即可。
每组词缀的格式为
TYPE TAG REMOVE REPLACE MATCH
这样 where匹配文件中给定单词TAG
后面的内容,您可以执行以下操作(假设您已经删除了 的单词):/
.dic
/...
if($word =~ /$match$/) $word =~ s/$remove$/$replace/;
注意$
那里匹配行尾/单词。^
如果是前缀,请调整。
有三个警告:
.aff
文件的 $match 在几乎所有情况下都等同于标准正则表达式。有一些细微的变化,如果匹配类似于[abc-gh]
,你最好将其更改为(a|b|c|-|g|h)
or [abcgh-]
(hunspell 不使用连字符作为元字符),否则它将被解释为[abcdefgh]
(标准正则表达式)。对于否定字符类,您的选项是手动将 移动-
到表达式的末尾(例如,移动[^a-df]
到[^adf-]
或使用否定的look behinds。/...
,你需要重新处理它,因为它有一个双词缀。当心。根据我的粗略计算,我正在编写的字典可能包含超过 5000 万个单词(如果超过 1 亿个,我不会感到惊讶)。