Напишите функцию, которая принимает список текстовых строк и возвращает мешок слов (Bag of Words) в виде словаря, где ключи — это уникальные слова, а значения — их частота встречаемости в текстах. Функция должна выполнять базовую предобработку текста: приведение к нижнему регистру, удаление знаков препинания и стоп-слов.
Пример использования:
texts = [
"I love data science!",
"Data science is amazing.",
"Machine learning is a part of data science."
]
bag_of_words = create_bag_of_words(texts)
print(bag_of_words)
# Ожидаемый результат (пример):
# {'love': 1, 'data': 3, 'science': 3, 'amazing': 1, 'machine': 1, 'learning': 1, 'part': 1}
Решение задачи🔽
from collections import defaultdict
import string
from nltk.corpus import stopwords
import nltk
# Загружаем стоп-слова (если не загружены, выполнить: nltk.download('stopwords'))
nltk.download('stopwords')
stop_words = set(stopwords.words('english'))
def preprocess_text(text):
# Приведение к нижнему регистру и удаление знаков препинания
text = text.lower()
text = text.translate(str.maketrans('', '', string.punctuation))
return text
def create_bag_of_words(texts):
bag = defaultdict(int)
for text in texts:
# Предобработка текста
processed_text = preprocess_text(text)
# Разделение текста на слова и подсчет частот
for word in processed_text.split():
if word not in stop_words: # Игнорируем стоп-слова
bag[word] += 1
return dict(bag)