Hunspell附加条件正则表达式格式。有什么方法可以匹配开始吗?

时间:2014-09-02 00:27:21

标签: nlp stemming hunspell

美好的一天。

我正在尝试使用Hunspell作为我的应用程序中的词干分析器。我不太喜欢搬运工和雪球,因为他们的“切碎”字样结果就像“abus”,“exampl”。 Lemmatizing似乎是一个很好的选择,但我不知道任何好的CoreNLP替代品,我当然不准备将我的项目的源代码移植到Java或使用桥接器。理想情况下,我希望看到给定单词的初始字典形式。

正如我已经注意到,大多数词典在.dic文件中都有单独的单词:出价和出价,设置和设置,获取和获取等等。我不是在Hunspell有经验,但是没有任何聪明的方法来处理双字母或三字母单词?有没有办法让它认为“设置”实际上是从“集合”推导出来的?

我目前与Hunspell的特殊问题是我无法获得有关创建/编辑词缀文件的完整文档。这就是文件中所说的:http://manpages.ubuntu.com/manpages/dapper/man4/hunspell.4.html

(4) condition.

Zero stripping or affix are indicated by zero. Zero condition is
indicated   by   dot. Condition is a simplified, regular
expression-like pattern, which must be met before the affix  can
be  applied. (Dot  signs  an arbitrary character. Characters in
braces sign an arbitrary character from  the  character  subset.
Dash  hasn’t  got  special  meaning, but circumflex (^) next the
first brace sets the complementer character set.)

默认一个是:

SFX G Y 2
SFX G   e     ing        e
SFX G   0     ing        [^e] 

我试过这个:

SFX G Y 4
SFX G   e     ing        e
SFX G   0     ing        [^e] 
SFX G   0     ting       [bcdfghjklmnpqrstvwxz][aeiou]t 
SFX G   0     ding       [bcdfghjklmnpqrstvwxz][aeiou]d 

但它显然也会匹配asSET。有什么方法可以绕过它吗?我在regexp的开头尝试了^符号,但似乎它不起作用。我能做些什么才能让它发挥作用?

提前致谢。

1 个答案:

答案 0 :(得分:2)

为什么它匹配资产?这不是一个动词,因此不应该附加该后缀。

语言不完全正常的问题。我们在SoftAstur的Asturian拼写检查器中使用的解决方案是跟踪以某种方式形成某些后缀的动词列表,并根据我们的列表构建.dic文件的脚本保持。

所以对于英语,你要定义两个单独的词缀 1

SFX Gs Y 3
SFX Gs e ing [^eoy]e
SFX Gs 0 ing [eoy]e
SFX Gs 0 ing [^e]

SFX Gd Y 9
SFX 0 bing [^aeiou][aeiou]b
SFX 0 king [^aeiou][aeiou]c
SFX 0 ding [^aeiou][aeiou]d
SFX 0 ling [^aeiou][aeiou]l   # for British English
SFX 0 ming [^aeiou][aeiou]m
SFX 0 ning [^aeiou][aeiou]n
SFX 0 ping [^aeiou][aeiou]p
SFX 0 ring [^aeiou][aeiou]r
SFX 0 ting [^aeiou][aeiou]t

还有其他的非正式选择,例如烧毛(与唱歌对比),这些非常罕见,它们可能最好被编码为单独的。因此,您的字典文件或多或少会更喜欢以下内容:

admit/Gd    --> admitting
bake/Gs     --> baking
commit/Gd   --> committed
free/Gs     --> freeing
dye/Gs      --> dyeing
inherit/Gs  --> inherited
picnic/Gd   --> picnicking
target/Gs   --> targetting
tiptoe/Gs   --> tiptoeing
travel/Gs   --> traveling  (if American English)
travel/Gd   --> travelling (if British English)
refer/Gd    --> referring
sing/Gs     --> singing
singe
singing
sob/Gd      --> sobbing
smile/Gs    --> smiling
stop/Gd     --> stopping
tap/Gd      --> tapping
visit/Gs    --> visiting

1。我更喜欢两个字母的标签,因为如果你有一个包含大量标签的单词,它们会更容易阅读,例如Gd = gerund doubled Gs = gerund single 或类似的。对于英语来说可能不是问题,但它肯定适用于其他语言。如果你没有很多词缀,你可能会选择g(不加倍)和G(加倍)。功能