Лемматизация на CountVectorizer не удаляет стоп-слова - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь добавить лематизацию в CountVectorizer из Skit-learn следующим образом

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 '

Лемматизирует все слова и не удаляет стоп-слова. Итак, есть идеи?

1 Ответ

0 голосов
/ 03 мая 2018

Это потому, что лемматизация выполняется перед удалением стоп-слова. И тогда лемматизированные стоп-слова не найдены в наборе стоп-слов, предоставленном stopwords.words('spanish').

Для полного рабочего порядка CountVectorizer, пожалуйста, обратитесь к мой другой ответ здесь . Речь идет о TfidfVectorizer, но порядок тот же. В этом ответе шаг 3 - это лемматизация, а шаг 4 - удаление стоп-слова.

Итак, теперь для удаления стоп-слов у вас есть два варианта:

1) Вы лемматизируете сам набор стоп-слов, а затем передаете его параметру stop_words в CountVectorizer.

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')]

Попробуйте и прокомментируйте, если не работает.

...