CountVectorizer上的词形还原不会删除停用词

时间:2018-05-03 12:32:18

标签: scikit-learn nltk stop-words lemmatization countvectorizer

我试图从Skit-learn向CountVectorizer添加Lematization,如下所示

import nltk
from pattern.es import lemma
from nltk import word_tokenize
from nltk.corpus import stopwords
from sklearn.feature_extraction.text import CountVectorizer
from nltk.stem import WordNetLemmatizer

class LemmaTokenizer(object):
    def __call__(self, text):
        return [lemma(t) for t in word_tokenize(text)]

vectorizer = CountVectorizer(stop_words=stopwords.words('spanish'),tokenizer=LemmaTokenizer())

sentence = ["EVOLUCIÓN de los sucesos y la EXPANSIÓN, ellos juegan y yo les dije lo que hago","hola, qué tal vas?"]

vectorizer.fit_transform(sentence)

这是输出:

[u',', u'?', u'car', u'decir', u'der', u'evoluci\xf3n', u'expansi\xf3n', u'hacer', u'holar', u'ir', u'jugar', u'lar', u'ler', u'sucesos', u'tal', u'yar']

已更新

这是出现的停用词,并且已被词形化:

  

你',你' ler',你'

所有单词都是lemmatice,并且不会删除停用词。那么,任何想法?

1 个答案:

答案 0 :(得分:4)

多数民众赞成,因为词义化是在停止删除词之前完成的。然后在stopwords.words('spanish')提供的停用词集中找不到词形化的停用词。

有关CountVectorizer的完整工作订单,请参阅my other answer here。它关于TfidfVectorizer但订单是一样的。在该答案中,第3步是词形还原,第4步是删除词。

现在要删除停用词,您有两种选择:

1)你将停用词集自身解释,然后将其传递给CountVectorizer中的stop_words param。

my_stop_words = [lemma(t) for t in stopwords.words('spanish')]
vectorizer = CountVectorizer(stop_words=my_stop_words, 
                             tokenizer=LemmaTokenizer())

2)在LemmaTokenizer本身中包含停用词删除。

class LemmaTokenizer(object):
    def __call__(self, text):
        return [lemma(t) for t in word_tokenize(text) if t not in stopwords.words('spanish')]

如果不能正常工作,请尝试这些并发表评论。