我正在一个项目中,我试图计算多个语料库的变形形态百分比以进行比较。
我知道如何使用nltk Porter Stemmer来获得单词的词根,但是如果我可以返回词缀而不是词根,则对我来说将更有帮助。如果可以的话,我可以算出词干截断词缀(“ ly”,“ ed”等)的词缀数量,并将其与单词总数进行比较。这可能是一个简单的翻转,但我不知道该如何从根开始。
答案 0 :(得分:0)
好吧,如果您想获得词缀,只需从原始单词形式中删除根(porter结果)就可以了。
考虑此伪代码:
word = "hopeful"
stem_word = porter(word) # stem_word should be "hope"
affix = word.remove(stem_word) # affix should be "ful"
也许可以帮助您的其他替代方法是使用“连字符”,因为它可以将单词分解为词素,而不仅仅是将单词按词根分开。因此,它可以为您提供更多的词缀信息。
答案 1 :(得分:0)
您确定要谈论屈折形态吗?词尾变化意味着词性保持不变,并且单词被更改只是为了表达某些语法特征(如过去)。屈折词缀始终是后缀,如果我们不考虑不规则词,则数量有限(-ed
,-ing
,-er
,-est
,{ {1}},-s
)。
但是,您似乎在谈论微分形态,因为可能只有一个屈折后缀,所以对它们进行计数对我来说没有任何意义(如果是引理,则为-es
,而{{1} }(如果是变体形式)。
如果您在谈论派生词缀,那么您要找的是词素分割/令牌化,这并不是一件容易的事,因为单词派生过程受许多因素影响且定义不明确。在简单的情况下,我们只需在根目录后添加一个后缀(或前缀前缀),但是在某些情况下,根目录中的某些字母会被删除(0
-> 1
),并被更改({{ 1}}-> arrive
或更常见,例如arrival
-> try
)甚至附加(tried
-> assume
)。此外,您需要具有一些语义知识数据库,因为没有它,就不可能在所有情况下都正确地确定词素。例如,单词assumption
可以标记为drama
+ dramatist
。没有语义,这种形态学分析就显得很合理,因为remember
是一个非常流行的前缀,表示重复,而re-
是一个现有单词。知道语义关系会告诉我们member
和re-
是不相关的(我相信它们可能在词源上是相关的,但是在现代语言中,这种关系并不那么明显)。
检出Lingua Robot和Morfessor。第一个是解析英语Wiktionary并以JSON提供数据的API。前缀是此JSON的一部分。 Morfessor是用于形态分割的工具,因此它可以满足您的需求。