CountVectorizer для создания словаря для удаления лишних слов

#python #pandas #scikit-learn #nlp #countvectorizer

#python #панды #scikit-learn #nlp #countvectorizer

Вопрос:

У меня есть список предложений в столбце pandas:

 sentence
I am writing on Stackoverflow because I cannot find a solution to my problem.
I am writing on Stackoverflow. 
I need to show some code. 
Please see the code below
  

Я хотел бы выполнить некоторый анализ текста и проанализировать их, например, чтобы получить частоту слов.
Чтобы сделать это, я использую этот подход:

 from sklearn.feature_extraction.text import CountVectorizer
# list of text documents
text = ["I am writing on Stackoverflow because I cannot find a solution to my problem."]
vectorizer = CountVectorizer()
# tokenize and build vocab
vectorizer.fit(text)
  

Как я могу применить его к своей колонке, удалив лишние стоп-слова после создания словаря?

Ответ №1:

Вы можете использовать stop_words параметр в CountVectorizer, который позаботится об удалении стоп-слов:

 from nltk.corpus import stopwords
from sklearn.feature_extraction.text import CountVectorizer
text = ["I am writing on Stackoverflow because I cannot find a solution to my problem."]
stopwords = stopwords.words("english") # you may add or define your stopwords here
vectorizer = CountVectorizer(stop_words=stopwords)
vectorizer.fit_transform(text)
  

Если вы хотите выполнить всю предварительную обработку внутри фрейма данных pandas :

 from nltk.corpus import stopwords
from sklearn.feature_extraction.text import CountVectorizer
text = ["I am writing on Stackoverflow because I cannot find a solution to my problem.", "I am writing on Stackoverflow."]
df = pd.DataFrame({"text": text})
stopwords = stopwords.words("english") # you may add or define your stopwords here
vectorizer = CountVectorizer(stop_words=stopwords)
df["counts"] = vectorizer.fit_transform(df["text"]).todense().tolist()
df
                                                text              counts
0  I am writing on Stackoverflow because I cannot...  [1, 1, 1, 1, 1, 1]
1                     I am writing on Stackoverflow.  [0, 0, 0, 0, 1, 1]
  

В обоих случаях у вас есть vocab с удаленными стоп-словами:

 print(vectorizer.vocabulary_)
{'writing': 5, 'stackoverflow': 4, 'cannot': 0, 'find': 1, 'solution': 3, 'problem': 2}
  

Комментарии:

1. Спасибо за ваше очень хорошее и понятное объяснение, Сергей!

2. Добро пожаловать! Обратите внимание, что подсчеты в матрице CountVectorizer относятся к порядку слов в алфавитном порядке (или к тому, что задается значениями в vocab dic).