Часто мы хотим узнать, какие слова наиболее распространены в текстовом корпусе, потому что мы ищем какие-то закономерности.

Объяснение

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 годах.

Привет! Вы поощряете строить гистограмму?