Часто мы хотим узнать, какие слова наиболее распространены в текстовом корпусе, потому что мы ищем какие-то закономерности.
Объяснение
vec = CountVectorizer (). fit (корпус)
Здесь мы получаем модель Bag of Word, которая очистила текст, удалив нецифровые символы и стоп-слова.
bag_of_words = vec.transform (корпус)
bag_of_words матрица, где каждая строка представляет определенный текст в корпусе, а каждый столбец представляет слово в словаре, то есть все слова, найденные в корпусе . Обратите внимание, что bag_of_words [i, j] - это слово j в тексте я.
sum_words = bag_of_words.sum (ось = 0)
sum_words - вектор, содержащий сумму каждого вхождения слова во всех текстах в корпусе. Другими словами, мы добавляем элементы для каждого столбца матрицы bag_of_words .
words_freq = [(word, sum_words [0, idx]) для слова, idx в vec.vocabulary_.items ()]
word_freq = sorted (words_freq, key = lambda x: x [1], reverse = True) - частота_слов = отсортировано (частота_слов, ключ = лямбда x: x [1], обратный = истина)
Наконец, мы сортируем список кортежей, которые содержат слово и их появление в корпусе.
Пример использования
У меня есть список объявлений о продаже автомобилей с указанием года выпуска, производителя и модели. Вы можете скачать набор данных здесь.
cars_for_sell =
[line.replace("\n", "") for line in open("cars_for_sell.txt")]
print(cars_for_sell[:5])
['2017 GMC Sierra 1500', '2010 Toyota Sienna', '2016 Volkswagen Beetle', '2011 Dodge Ram', '2003 Land-Rover Range Rover']
Теперь я хочу получить 20 самых популярных слов:
ford 200 chevrolet 181 2013 84 2014 78 toyota 67 2015 67 2012 66 dodge 60 2010 58 2011 55 2016 54 2008 54 2007 53 2006 49 nissan 49 bmw 46 ram 44 2009 44 silverado 42 honda 42
Кажется, мы нашли интересные вещи:
- В основном продаются автомобили Ford и Chevrolets.
- На продажу выставлены более крупные автомобили, выпущенные в 2013 и 2014 годах.