3

再会。

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

正如我注意到的那样,大多数字典在 .dic 文件中都有单独的单词:bid and biding,set and setting,get and getting等等。我在 Hunspell 方面没有那么有经验,但没有任何聪明的方法可以处理 3 个字母单词的双 d 或 t?有没有办法让它认为“设置”实际上是从“设置”派生的?

我目前对 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。有什么办法可以绕过它吗?我在正则表达式的开头尝试了 ^ 符号,但它似乎不起作用。我该怎么做才能让它发挥作用?

提前致谢。

4

1 回答 1

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

还有其他不规则的词,比如singing(与singing对比),它们并不常见,它们可能最好单独编码。因此,您的字典文件或多或少会喜欢以下内容:

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 doubledGs= gerund single or similar。对于英语来说可能不是问题,但对于其他语言来说肯定是这样。如果你没有很多词缀,你可能会选择g(不加倍)和G(加倍)。

于 2015-01-12T20:25:51.520 回答