#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).