在我的一个应用程序中,我们使用Lucene Analyzer,特别是它的Hunspell部分。我面临的问题是:我需要使用一组词缀规则生成一个单词的所有单词形式。
例如,有单词“educate”和词缀规则ABC,生成单词“educate”的所有形式。- educates、educated、educative等。
我想知道的是:是否可以使用Lucene Hunspell实现(我们使用了一个Hunspell字典(.dic)和附加文件(.aff),因此它必须是一个Hunspell API)?Lucene的Hunspell API并不是很大,我仔细检查了一下,没有找到合适的东西。
我能在SO上找到的最接近的是this,但没有与hunspell相关的答案。
Update 1我现在已经不再从事我曾经遇到过上述问题的项目了,但是如果仍然有一个使用Lucene的Analyzer来实现这一点的解决方案,我很高兴社区能够看到答案。
4条答案
按热度按时间wnrlj8wa1#
Hunspell附带了unmunch命令,它会创建所有的单词形式。你可以这样调用它:
因此,你可以在hunspell源代码中查看它是如何实现的,以及是否可以从外部调用它。上次我检查过这个命令在使用复合词的字典时有点bug--在这种情况下,你无论如何都不能创建 all wordforms,因为它们有无限多个。
dxxyhpgq2#
我想你要找的是Hunspell的单词形式命令:
示例:
请参阅the documentation中的更多内容。
dfddblmv3#
(The最初的问题是关于为一个给定的单词生成所有的形式。这个答案集中在为字典中的所有单词生成所有的形式这个更难的问题上。我把这个贴在这里是因为这是在搜索这个更难的问题时出现的。)
在
unmunch
ing上更新截至2021年,Hunspell提供了两个生成单词形式的工具,分别称为
unmunch
和wordforms
,它们的用法分别是:因此,
affixes.aff
将由您的语言给定,而roots.dic
将是您的语言的参考词典,或者是包含您要生成的新词的词根的自定义词典。**不幸的是,Hunspell的
unmunch
被弃用了¹,无法正常工作。**它是从MySpell继承来的,我猜它并不支持Hunspell的所有功能。显然,它并不正确支持UTF-8。当我尝试将它与参考法语词典(Dicollecte,v7.0)一起使用时,它通过应用它不应该应用的词缀规则生成了垃圾单词(例如:使非动词变位)。wordforms
应该是最新的,因此您 * 可以尝试 * 用wordforms
模拟unmunch
(正如README所建议的那样),* 但是 * 后者只接受 * 一个 * 非限定根,并将其与roots.dic
和affixes.aff
所隐含的整个字典进行比较。你必须用roots.dic
中的所有词根依次调用wordforms
。所以你会有一个二次时间。对我来说,用法语的词缀参考集,这是缓慢到不可用的地步-即使只有10个词根!不可用的Bash代码是,举例来说:此外,请注意
wordforms
生成的是裸词,而unmunch
能够附加派生的元数据(如词性或性别),因此使用wordforms
时,您会丢失信息(这可能对您很重要,也可能不重要)。unmunch
的替代品是a known issue。显然,Hunspell开发者不会在可预测的未来解决这个问题(关于资金的问题?)。这导致了一些人重新实现了这个功能,你可以在GitHub问题中找到指针。wordforms
的源代码编写了an sh/awk script;也许已经过时了,但我还没试过unmunch
好。虽然我不知道它有多准确。¹摘自the repo的自述文件。
rbpvctlc4#
要查找一个单词的所有创建形式,假定en_US. dic包含:word/abc,创建一个文件:
并将其另存为word.dic。用途:
你会得到所有被创造出来的单词形式。