词干提取时保持专有名词和大写单词

Maintain proper nouns and capitalised words while stemming

我正在设计一个文本处理程序,需要对单词进行词干处理,以便稍后进行探索性分析。我的一个过程是词干,我必须使用 Porter Stemmer。

我设计了一个DataFrame结构来存储我的数据。此外,我还设计了一个应用于DataFrame的函数。当我将该函数应用于 DataFrame 时,词干提取有效,但它不保留大写(或专有名词)词。

我的代码片段:

from nltk.stem.porter import PorterStemmer

def stemming(word):
    stemmer = PorterStemmer()
    word = str(word)
    if word.title():
        stemmer.stem(word).capitalize()
    elif word.isupper():
        stemmer.stem(word).upper()
    else:
        stemmer.stem(word)
    return word

dfBody['body'] = dfBody['body'].apply(lambda x: [stemming(y) for y in x])

这是我的结果,其中没有大写单词: output

数据集样本(我的数据集很大):

file    body
PP3169 ['performing', 'Maker', 'USA', 'computer', 'Conference', 'NIPS']

预期输出(应用词干提取功能后):

file    body
PP3169 ['perform', 'Make', 'USA', 'comput', 'Confer', 'NIPS']

任何建议将不胜感激!

首先:您应该将结果分配给 word

word = stemmer.stem(word).capitalize()

其次:word.title() 不检查单词是否大写但它创建大写单词所以你应该检查

if word == word.title():

最终

if word[0].isupper() and word[1:].islower():

def stemming(word):
    stemmer = PorterStemmer()
    word = str(word)
    if word == word.title():
        word = stemmer.stem(word).capitalize()
    elif word.isupper():
        word = stemmer.stem(word).upper()
    else:
        word = stemmer.stem(word)
    return word