首页 > 解决方案 > 如何从词干中排除某些名称和术语(Python NLTK SnowballStemmer (Porter2))

问题描述

我刚开始接触 NLP、Python 并同时在 Stackoverflow 上发帖,所以如果我看起来很无知,请耐心等待 :)。

我在 Python 的 NLTK 中使用 SnowballStemmer 来提取词干以进行文本分析。虽然词形还原似乎低估了我的标记,但我阅读的雪球 porter2 词干分析器比基本的搬运工词干分析器更受欢迎,但它却超过了我的标记。我正在分析推文,其中包括许多名字,可能还有地点和其他不应该被阻止的词,例如:希拉里、汉尼提、总统,现在被简化为希拉里、汉尼提和总统(你可能已经猜到我正在分析谁的推文) .

有没有一种简单的方法可以从词干中排除某些术语?相反,我也可以仅对标记进行词形还原,并包含一个用于常见后缀的规则,例如 -ed、-s、...。另一个想法可能是仅使用词干动词和形容词以及以 s 结尾的名词。这也可能足够接近......

到目前为止,我正在使用以下代码:

# LEMMATIZE AND STEM WORDS

from nltk.stem.snowball import EnglishStemmer

lemmatizer = nltk.stem.WordNetLemmatizer()
snowball = EnglishStemmer() 

def lemmatize_text(text):

    return [lemmatizer.lemmatize(w) for w in text]

def snowball_stemmer(text):

    return [snowball.stem(w) for w in text]

# APPLY FUNCTIONS

tweets['text_snowball'] = tweets.text_processed.apply(snowball_stemmer)
tweets['text_lemma'] = tweets.text_processed.apply(lemmatize_text)

我希望有人能提供帮助……与我过去处理各种问题的经验相反,到目前为止,我还没有在网上找到足够的帮助来解决我的问题。

谢谢!

标签: pythonnlpnltkstemminglemmatization

解决方案


你知道NER吗?这意味着命名实体识别。您可以预处理文本并找到所有命名实体,然后将其从词干中排除。词干提取后,您可以再次合并数据。


推荐阅读