如何阻止NLTK限制器删除尾随" e"?

时间:2014-07-01 19:18:32

标签: python nlp nltk

我使用NLTK词干分析器去除词干的语法变化。 但是,Port或Snowball的提取器会移除尾随的" e"名词或动词的原始形式,例如,简介成为Profil。

如何防止这种情况发生?我知道我可以用条件来防范这个。但显然在不同情况下会失败。

是否有我想要的选项或其他API?

3 个答案:

答案 0 :(得分:6)

我同意菲利普的观点,即词干分子的目标只是保留茎。对于这种特殊情况,你可以尝试使用词形变换器而不是词干分析器,它应该保留更多单词,并且意味着删除完全不同形式的单词,例如' profiles' - > '轮廓&#39 ;. NLTK中有一个类 - 从nltk.stem尝试WordNetLemmatizer()。

要注意它仍然不完美(在处理文本时没有任何意义),因为我过去经常使用“物理”。来自' physics'。

答案 1 :(得分:6)

尝试:

>>> from nltk.stem import WordNetLemmatizer, PorterStemmer
>>> porter = PorterStemmer()
>>> wnl = WordNetLemmatizer()
>>> word = 'profile'
>>> porter.stem(word)
'profil'
>>> wnl.lemmatize(word)
'profile'
>>> wnl.lemmatize(word) if wnl.lemmatize(word).endswith('e') else porter.stem(word)
'profile'

答案 2 :(得分:3)

词干分析器的目标是删除尽可能多的单词,以使其尽可能多地覆盖,但保留单词的核心。简介可能归结为profil的一个原因是涵盖分析的情况。你需要一个有条件或另一个词干来防止这种情况,虽然我想他们中的大多数会删除尾随的'。 (特别是给出' e''案例的数量)