如何从词干提取中排除某些名称和术语(Python NLTK SnowballStemmer (Porter2))

How to exclude certain names and terms from stemming (Python NLTK SnowballStemmer (Porter2))

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

我在 Python 的 NLTK 中使用 SnowballStemmer 来提取词干以进行文本分析。虽然词形还原似乎理解了我的标记,但我阅读的雪球 porter2 词干分析器比基本的 porter 词干分析器更受欢迎,overstems 我的标记。我正在分析推文,包括许多名字,可能还有地点和其他不应该被阻止的词,比如:hillary、hannity、president,现在被简化为 hillari、hanniti 和 presid(你可能已经猜到我正在分析谁的推文) .

有没有一种简单的方法可以从词干中排除某些术语?相反,我也可以只对标记进行词形还原,并包括一个常见后缀的规则,如 -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)

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

谢谢!

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