词干提取时保持专有名词和大写单词
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
我正在设计一个文本处理程序,需要对单词进行词干处理,以便稍后进行探索性分析。我的一个过程是词干,我必须使用 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