在python中对整个句子进行柠檬化是行不通的

在python中对整个句子进行柠檬化是行不通的,python,pandas,scikit-learn,nltk,text-mining,Python,Pandas,Scikit Learn,Nltk,Text Mining,我正在使用python中NLTK包中的WordNetLemmatizer()函数对电影评论数据集的整个句子进行lemmatize 这是我的密码: from nltk.stem import LancasterStemmer, WordNetLemmatizer lemmer = WordNetLemmatizer() def preprocess(x): #Lemmatization x = ' '.join([lemmer.lemmatize(w) for w in x.r

我正在使用python中NLTK包中的WordNetLemmatizer()函数对电影评论数据集的整个句子进行lemmatize

这是我的密码:

from nltk.stem import LancasterStemmer, WordNetLemmatizer
lemmer = WordNetLemmatizer()

def preprocess(x):

    #Lemmatization
    x = ' '.join([lemmer.lemmatize(w) for w in x.rstrip().split()])

    # Lower case
    x = x.lower()

    # Remove punctuation
    x = re.sub(r'[^\w\s]', '', x)

    # Remove stop words
    x = ' '.join([w for w in x.split() if w not in stop_words])    
    ## EDIT CODE HERE ## 

    return x

df['review_clean'] = df['review'].apply(preprocess)
df中的review是我想要处理的文本评论栏

在df上使用preprocess函数后,新的列review_clean包含已清理的文本数据,但它仍然没有柠檬化文本。我可以看到很多单词以-ed,-ing结尾

提前感谢。

你必须传递“v”(动词)来进行柠檬化:

x = ' '.join([lemmer.lemmatize(w, 'w') for w in x.rstrip().split()])

例如:

In [11]: words = ["answered", "answering"]

In [12]: [lemmer.lemmatize(w) for w in words]
Out[12]: ['answered', 'answering']

In [13]: [lemmer.lemmatize(w, 'v') for w in words]
Out[13]: ['answer', 'answer']

谢谢你,安迪,这对我很有效。我还有一个问题:我们只是通过将“v”传递给函数来对动词进行语法化。是否有可能在一个函数中对所有单词进行语法化?例如,我仍然在文本中看到复数形式的名词(例如,'methods','days'),在运行柠檬化之后,@MMAASS-hmm,“answers”是去复数形式的,所以这里有点奇怪。这可能是一个很好的新问题,特别是关于这个柠檬化函数。我只是在函数中定义了另一个柠檬化参数,并将“n”而不是“v”传递给它。成功了。试试这个: