gpt4 book ai didi

python - 德语词干分析器不会删除女性后缀 "-in"和 "-innen"

转载 作者:行者123 更新时间:2023-12-01 01:46:10 24 4
gpt4 key购买 nike

在德语中,每项工作都有女性和男性版本。阴性词是在阳性词的基础上加上“-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。它返回这些词干:

Lehrer      -> lehr      | Arzt      -> arzt
Lehrerin -> lehrerin | Ärztin -> arztin
Lehrer -> lehr | Ärzte -> arzt
Lehrerinnen -> lehrerinn | Ärztinnen -> arztinn

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

更新

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

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

这样,上述所有单词都将分别词干为 lehrarzt。此外,到目前为止我尝试过的所有其他“工作形式”的词干都是正确的,这意味着男性和女性形式具有相同的词干。此外,如果“工作形式”源自动词,例如 Lehrer/in,它们与动词具有相同的词干。

最佳答案

德国雪球词干分析器 follows a three step process :

  1. 删除 ernemerenese, s 后缀
  2. 删除 estenerst 后缀
  3. 删除 ischlichheitkeitendungigik 后缀

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

第一个问题是,从您的示例中我看到,当后面跟着 en 时,in 变成了 inn 。可以通过将 ininn 添加到步骤 3 后缀列表来解决此问题,但这并不能解决第二个问题。

查看GermanStemmer.stem() source ,每一步只会删除一个后缀。因此,如果有多个派生后缀(即 in 加上上面列出的任何后缀),则仅删除一个。

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

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 添加到 Snowball Stemmer 步骤之一,您可以使用以下方法来实现:

#Using nltk.stem.snowball.SnowballStemmer
stemmer = SnowballStemmer("german")
stemmer.stemmer._GermanStemmer__step3_suffixes += ("in",) #add "in" to the step 3 suffixes

#Using nltk.stem.snowball.GermanStemmer
stemmer = GermanStemmer()
stemmer._GermanStemmer__step3_suffixes += ("in",)

注意“in”之后的逗号。如果没有它,该代码将无法工作。您还可以将 3 替换为您想要修改的任何步骤。我不完全确定为什么它是 _GermanStemmer__step3_suffixes 而不仅仅是 __step3_suffixes,但我已经验证此代码适用于 Python 3.6.4 和 NLTK 3.2.5。

不过,我推荐这种方法,因为它无法正确处理innen。此外,由于每个步骤最多删除一个后缀,因此它无法正确处理像 Lehrerinnen 这样具有 eniner(第 3 步不检查 er)。我认为最好的选择是复制并粘贴整个 GermanStemmer (在上面的源代码链接中找到。使用 ctrl+f)并将步骤 2.5 添加到 stem() 检查并删除 in/inn

关于python - 德语词干分析器不会删除女性后缀 "-in"和 "-innen",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51316438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com