WordNetlemmatizer错误 - 所有字母都被词形化

时间:2017-06-26 02:55:44

标签: python pandas nltk wordnet lemmatization

我正在尝试将我的数据集用于情感分析 - 我该怎样做才能获得预期的输出而不是当前的输出?输入文件是一个csv - 存储为DataFrame对象。

dataset = pd.read_csv('xyz.csv')

这是我的代码

from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
list1_ = []
for file_ in dataset:
    result1 = dataset['Content'].apply(lambda x: [lemmatizer.lemmatize(y) for y in x])
    list1_.append(result1)
dataset = pd.concat(list1_, ignore_index=True)

预期

>> lemmatizer.lemmatize('cats')
>> [cat]

当前输出

>> lemmatizer.lemmatize('cats')
>> [c,a,t,s]

1 个答案:

答案 0 :(得分:1)

<强> TL; DR

result1 = dataset['Content'].apply(lambda x: [lemmatizer.lemmatize(y) for y in x.split()])

Lemmatizer接受任何字符串作为输入。

如果dataset['Content']列是字符串,则遍历字符串将遍历字符而不是“单词”,例如

>>> from nltk.stem import WordNetLemmatizer
>>> wnl = WordNetLemmatizer()
>>> x = 'this is a foo bar sentence, that is of type str'
>>> [wnl.lemmatize(ch) for ch in x]
['t', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 'f', 'o', 'o', ' ', 'b', 'a', 'r', ' ', 's', 'e', 'n', 't', 'e', 'n', 'c', 'e', ',', ' ', 't', 'h', 'a', 't', ' ', 'i', 's', ' ', 'o', 'f', ' ', 't', 'y', 'p', 'e', ' ', 's', 't', 'r']

所以你必须先对你的句子字符串进行标记,例如:

>>> from nltk import word_tokenize
>>> [wnl.lemmatize(word) for word in x.split()]
['this', 'is', 'a', 'foo', 'bar', 'sentence,', 'that', 'is', 'of', 'type', 'str']
>>> [wnl.lemmatize(ch) for ch in word_tokenize(x)]
['this', 'is', 'a', 'foo', 'bar', 'sentence', ',', 'that', 'is', 'of', 'type', 'str']
另一个例如。

>>> from nltk import word_tokenize
>>> x = 'the geese ran through the parks'
>>> [wnl.lemmatize(word) for word in x.split()]
['the', u'goose', 'ran', 'through', 'the', u'park']
>>> [wnl.lemmatize(ch) for ch in word_tokenize(x)]
['the', u'goose', 'ran', 'through', 'the', u'park']

但是为了获得更准确的词形还原,你应该将句子标记为标记化和pos标记,请参阅https://github.com/alvations/earthy/blob/master/FAQ.md#how-to-use-default-nltk-functions-in-earthy