如何从给定的Hunspell字典中获取所有可能的单词?

7
我希望能解析支持Hunspell格式的Open Office的affdic文件。
例如,可以从此处下载英文affdic文件: http://extensions.openoffice.org/en/project/english-dictionaries-apache-openoffice 我想要扫描给定.dic文件中的每一行,并使用提供的.aff文件生成每一个可能的单词。
我应该如何做呢?
我已经安装了NHunspell框架,但它没有这个功能: https://www.nuget.org/packages/NHunspell/ 例如,对于英语,我们可以考虑:
make/UAGS

make 可以是 make, made, makes, making 等等。

现在我需要解析器来给我所有这些组合。我该如何获得它们?非常感谢。

基本上,我想扫描词典的每一行,并从该行的单词生成所有可能的单词,但我不知道如何做到这一点。

我也可以编写自己的解析器,但对我来说规则似乎相当复杂,而且没有详细和简单的文档。

这就是我想要的基本内容。图像表达得非常清楚。

给出 analyze/ADSGen.dicen.aff 文件,并获得以下所有单词:

analyze, analyzes, analyzing, analyzed, reanalyze, reanalyzes, reanalyzing, reanalyzed

enter image description here


大多数语言都有一种固定的方式来转换单词,例如“Future Tense”下的“Make”变成“Present Tense”的“Making”,“Shake”变成“Shaking”。你可以创建规则:把未来时态转换成现在时态,以字母“e”结尾的词需要去掉“e”,加上“ing”。这通常适用于大多数单词,但是从未来时态到过去时态的转换方式却经常不同。例如“Make”变成“Made”,“Shake”变成“Shook”,“Run”变成“Ran”。虽然你可以制定规则,但仍然会有很多例外。我认为最好的方法是寻找已有的相关单词数据库,或查找第三方库来处理此问题。 - johnny 5
@johnny5我真的需要解决这个问题:( 我已经更新了我的问题。我相信我想要的是可能的。请检查更新后的问题,谢谢。 - Furkan Gözükara
我看到所有的规则都已经包含在字典中并且映射好了,这样就容易理解多了。 - johnny 5
我没有看到基于规则翻译这个的函数,但是我现在在用手机。编译器似乎不难写。只需存储一个字符串到前缀数据列表的字典,将前缀与应用的正则表达式匹配即可。 - johnny 5
@johnny5,我找到了命令 :) 它是wordforms。但是我还不知道如何调用它 :( https://github.com/kris7t/hunspell/blob/master/src/tools/wordforms 。我需要将输出写入文件。 - Furkan Gözükara
显示剩余4条评论
2个回答

8
如果你想获取整个数据库,你可以执行 unmunch
unmunch dictionary.dic dictionary.aff

请注意,hunspell中未压缩单词(unmunch)的当前实现有一个最大单词数、单词变化规则和生成单词长度的限制。因此,如果目标语言超出未压缩单词的限制,则未压缩单词可能会失败。
如果您只想获取条目可能生成的单词列表,可以使用“wordforms”:
wordforms dictionary.aff dictionary.dic word

0

正如Kartal Tabak所指出的,你需要的是命令行工具wordformsunmunch,它们与Hunspell一起分发。但是wordforms只适用于一个词干,而unmunch存在很多错误。请参考this answer中的其他替代方法。

此外,似乎Hunspell没有将这个功能作为库函数公开。如果你想以编程方式使用这个功能(如你提到的C#和NHunspell),那么你可能需要启动这些外部程序并解析它们的输出。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接