CountVectorizer 上的词形还原不会删除停用词
Lemmatization on CountVectorizer doesn't remove Stopwords
我正在尝试将 Lematization 添加到 Skit-learn 中的 CountVectorizer,如下所示
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']
已更新
这是出现并被词形化的停用词:
u'lar', u'ler', u'der'
它会提取所有单词并且不会删除停用词。那么,有什么想法吗?
那是因为词形还原是在停止词删除之前完成的。然后在 stopwords.words('spanish')
.
提供的停用词集中找不到词形化的停用词
CountVectorizer的完整工作顺序,请参考。它与 TfidfVectorizer 有关,但顺序相同。在那个答案中,第 3 步是词形还原,第 4 步是删除停用词。
现在要删除停用词,您有两个选择:
1) 对停用词集本身进行词形还原,然后将其传递给 CountVectorizer 中的 stop_words
参数。
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')]
试试这些,如果不起作用请发表评论。
我正在尝试将 Lematization 添加到 Skit-learn 中的 CountVectorizer,如下所示
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']
已更新
这是出现并被词形化的停用词:
u'lar', u'ler', u'der'
它会提取所有单词并且不会删除停用词。那么,有什么想法吗?
那是因为词形还原是在停止词删除之前完成的。然后在 stopwords.words('spanish')
.
CountVectorizer的完整工作顺序,请参考
现在要删除停用词,您有两个选择:
1) 对停用词集本身进行词形还原,然后将其传递给 CountVectorizer 中的 stop_words
参数。
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')]
试试这些,如果不起作用请发表评论。