德语词干分析器没有删除女性后缀“in”和“innen”

2024-09-27 19:11:34 发布

您现在位置:Python中文网/ 问答频道 /正文

在德语中,每个工作都有女性化和男性化的版本。女性化的词尾是由男性词尾加上“-in”后缀而来的。在复数形式中,这变成了“-innen”。在

示例:

      | English          | German
------+------------------+-----------------------
masc. | teacher  doctor  | Lehrer      Arzt
fem.  | teacher  doctor  | Lehrerin    Ärztin
masc. | teachers doctors | Lehrer      Ärzte
fem.  | teachers doctors | Lehrerinnen Ärztinnen

目前,我正在使用NLTK的nltk.stem.snowball.GermanStemmer。 它返回这些茎:

^{pr2}$

有没有办法让这个词干分析器为所有四个版本返回相同的词干,女性和男性?或者,还有其他词干分析器在做这个吗?在

更新

最后,我添加了“-innen”和“-in”作为步骤1后缀元组中的第一个条目,如下所示:

stemmer = GermanStemmer()
stemmer._GermanStemmer__step1_suffixes = ("innen", "in") + stemmer._GermanStemmer__step1_suffixes

这样,上面所有的单词都分别以lehr和{}为词干。另外,我迄今为止尝试过的所有其他“工作形式”的词干都是正确的,这意味着男性和女性的词干是相同的。另外,如果“工作形式”来源于动词,如Lehrer/in,那么它们的词干与动词相同。在


Tags: in版本后缀形式doctorteacher男性词干
1条回答
网友
1楼 · 发布于 2024-09-27 19:11:34

德国雪球茎器follows a three step process

  1. 删除ernemereneses后缀
  2. 删除estenerst后缀
  3. 删除ischlichheitkeitendungigik后缀

由于不太了解德语语法,似乎in与步骤3后缀属于同一类(在NLTK源代码中称为“派生后缀”)。似乎在这个后缀列表中添加in应该会迫使Snowball词干分析器删除它,但是有两个问题。在

第一个问题是,从您的示例中,我看到in跟在en后变成{}。这可以通过将in和{}添加到步骤3后缀列表中来解决,但这并不能解决第二个问题。在

看看^{} source,每个步骤只删除一个后缀。因此,如果有一个以上的派生后缀(即in加上上面列出的任何后缀),则只有一个将被删除。在

在这种情况下(我对德语的了解不多,不知道是否真的会发生这种情况),您需要手动编辑GermanStemmer.stem()来添加第四个“in删除”步骤。这也允许在复数的情况下进行更精细的控制。但老实说,在这一点上,最好是通过包装您的GermanStemmer.stem()调用来临时删除{}。例如:

from nltk.stem.snowball import GermanStemmer

def stem_german(word):
    plural = word.endswith("en") #for deciding if we are looking for "in" or "inn"
    stemmed_word = GermanStemmer().stem(word)

    feminine_suffix = "in" if not plural else "inn"
    if stemmed_word.endswith(feminine_suffix):
        stemmed_word = stemmed_word[:-len(feminine_suffix)]

    return stemmed_word

编辑

如果要将in添加到一个雪球茎杆生成器步骤中,可以使用以下方法执行此操作:

^{pr2}$

注意"in"后的逗号。没有它这个代码就不能工作。您还可以将3替换为您希望修改的任何步骤。我不完全确定为什么它是_GermanStemmer__step3_suffixes,而不仅仅是__step3_suffixes,但是我已经验证了这段代码在python3.6.4和nltk3.2.5上可以工作。在

不过,我不推荐这种方法,因为它不能正确地处理innen。另外,由于每个步骤最多删除一个后缀,因此它不能正确处理Lehrerinnen这些单词有{}、in和{}(步骤3不检查er)。我认为最好的办法是复制并粘贴GermanStemmer(可以在上面的源代码链接中找到)。使用cd47{cd4{5}和

相关问题 更多 >

    热门问题