波特词干分析员可以返回词缀而不是词干吗?



我正在做一个项目,在这个项目中,我试图计算多个语料库的屈折形态的百分比,以便进行比较。

我知道如何使用 nltk Porter Stemmer 来获取单词的词根,但如果我可以返回词缀而不是词根,那对我来说会更有帮助。如果我能做到这一点,我可以计算词干分析器截掉的词缀数量("ly"ed"等),并将其与单词总数进行比较。这可能是一个简单的翻转,但我无法弄清楚如何用根做到这一点。

你确定你在谈论屈折形态吗?屈折意味着词性保持不变,单词仅更改以表达某些语法特征(如过去)。屈折词缀总是后缀,如果我们不考虑不规则词,它们的数量有限(-ed-ing-er-est-s-es)。

但是,您似乎在谈论派生形态学,因为可能只有一个屈折后缀,因此我计算它们没有意义(如果是引理,则0,如果是屈折形式,则1)。

如果你在谈论派生词缀,那么你正在寻找的被称为语素分割/标记化,这不是一件容易的事情,因为单词派生过程受到许多因素的影响并且没有很好的定义。在简单的情况下,我们只是在根后附加一个后缀(或前缀前缀),但是在某些情况下,根中的某些字母被删除(arrive->arrival),更改(try->tried或更不寻常,如assume->assumption)甚至附加(drama->dramatist)。此外,您需要拥有一些语义知识数据库,因为没有它,就不可能在所有情况下正确确定语素。例如,单词remember可以标记为re-+member。如果没有语义,这种形态分析看起来相当合理,因为re-是一个非常流行的前缀,意思是重复,member是一个现有的词。了解语义关系会告诉我们memberremember是不相关的(我相信它们可能在词源上相关,但在现代语言中,这种关系并不那么明显)。

结帐 Lingua Robot 和 Morfessor。第一个是解析英语维基词典并以 JSON 格式提供数据的 API。词缀作为此 JSON 的一部分提供。Morfessor 是一种形态分割工具,因此它完全符合您的需求。

好吧,如果你想获得词缀,只需从原始单词形式中删除根(波特结果)应该可以。

考虑以下伪代码:

word = "hopeful"
stem_word = porter(word)           #  stem_word should be "hope"
affix = word.remove(stem_word)     # affix should be "ful" 

其他可能可以帮助您的替代方法是使用"连字符",因为它可能会将单词分成语素,而不仅仅是按词根拆分单词。因此,它可以为您提供更多附加信息。

最新更新