Анализ инаугурационных речей президентов
В то время как нейронные сети и CNN сделали гигантский скачок в области компьютерного зрения, обработка естественного языка остается недооцененной. Его часто упускают из виду из-за того, что он еще не превосходит человеческий уровень. Тем не менее, по мере того, как мы собираемся разобраться в этой серии статей, мы можем создать несколько довольно изящных инструментов, которые помогут нам не только получить представление, но и автоматизировать задачи.
Весь указанный код доступен здесь. Возможно, вам придется скопировать некоторые из вспомогательных функций, которые я написал по ссылке на github. Упоминание об этом здесь сделало бы все слишком сгруппированным.
Для начала мы проведем базовый анализ выступлений американского президента от первого президента до выступления Обамы в 2009 году. Здесь мы будем использовать три библиотеки
1. nltk
2. pyphen - для разделения слов на слоги
3. matplotlib - ну, для рисования
Все это можно установить с помощью pip install.
Вам нужно будет скачать корпус. Вы можете сделать это, выполнив приведенный ниже код
nltk.download(‘inaugural’) nltk.download('stopwords')
Или вы можете просто выполнить nltk.download () и загрузить «вводные» и «стоп-слова» в разделе корпусов после появления загрузчика, как показано на снимке экрана ниже. Таким же образом можно исследовать и другие корпуса.
Теперь мы импортируем пакет nltk и выступления со следующим кодом (это может занять несколько секунд в зависимости от вашего компьютера)
import nltk from nltk.corpus import stopwords from nltk.corpus import inaugural from nltk.tokenize import word_tokenize, sent_tokenize import matplotlib.pyplot as plt import pyphen
Поскольку мы импортировали инаугурационные речи, мы можем взглянуть на данные. Мы видим, что у нас есть данные о 56 президентах, от Вашингтона до Обамы в 2009 году.
Посмотрим на выступления. Чтобы получить необработанный формат данных, мы можем просто использовать inaugural.raw()
. Но, как мы видим, мы не можем четко разделить это на слова. К счастью, у нас есть inaugural.words()
работать за нас.
Теперь, когда наша речь разбита на слова, мы можем приступить к ее базовому анализу. Начнем с определения частотного распределения. Это покажет нам, сколько раз встречается определенное слово. Плюс это уже расставлено в порядке убывания.
Мы столкнулись с проблемой, она перегружена наличием игнорируемых слов. Часто есть слова и знаки препинания, которые повторяются чаще, чем другие, и обычно не дают нам дополнительной информации о данных. В nltk уже есть небольшой список таких слов, и они называются stopwords
. Они доступны на нескольких языках. Добавляем еще несколько символов в список импортируемых стоп-слов.
Итак, теперь, когда у нас есть список стоп-слов, мы пишем небольшой код, чтобы удалить все стоп-слова из речи и снова выяснить частотное распределение.
Это лучше и дает нам некоторое представление о данных. Но это дает нам данные только об одном выступлении, нам нужно что-то, что позволит нам сравнивать вместе несколько выступлений президента.
Итак, мы начинаем считать, сколько слов из 2,3,4 букв использовал президент xyz. Затем мы берем среднее количество букв в слове каждого президента и наносим его на график.
«Я чувствую себя счастливым» - среднее количество букв в слове составляет 3,33 (1 + 4 + 5) / 3.
«Я излучаю эйфорию» - среднее количество букв в слове составляет 4,66 (1 + 5 + 8) / 3.
Более высокое количество букв в слове означает, что президент в основном использовал «громкие» слова. Сначала мы подсчитываем, сколько слов из x букв было использовано каждым президентом.
При этом мы также сохранили среднее количество букв в слове в переменной с именем presidents_avg
. Используя matplotlib для построения графика, мы видим, что со временем / президентами он явно уменьшился.
Идя по тому же пути, мы начинаем считать, сколько слов сказал президент xyz в одном предложении. Затем мы берем среднее количество слов в предложении для каждого президента и строим график.
Более высокое среднее количество слов в предложении означало бы, что президент в основном использовал «длинные» предложения. Мы также сохраняем среднее количество слов в предложении в переменной presidents_avg_words_per_sentence
. Используя matplotlib для построения графика, мы видим, что со временем / президентами он явно уменьшился.
А теперь давайте посмотрим, может ли анализ гапаксов что-нибудь нам дать. В корпусной лингвистике hapax legomenon - это слово, которое встречается только один раз в контексте / речи. words.hapaxes()
дает нам все уникальные слова в данном корпусе.
Но считая нет. уникальных слов недостаточно. Нам также нужно разделить его на длину всей речи. Почему? Поскольку длина речи сильно различается, в более крупной речи может быть больше уникальных слов, и нам необходимо устранить эту предвзятость. Итак, мы находим уникальные слова в одной речи, подсчитываем их, усредняем и строим графики для каждого президента.
Кажется, немного уменьшается, хотя это не очень заметно.
Для окончательного анализа мы вычисляем количество слогов на слово, используемое каждым президентом в своей речи, для этого мы используем библиотеку pyphen, поскольку обычно такие существительные, как «Афганистан», не имеют заранее определенного количества слогов.
Затем мы берем среднее значение слога в слове для каждого президента и наносим его на график.
Когда мы видим график, мы видим, что со временем он уменьшился.
Таким образом, нынешние президенты используют более короткие слова и более короткие предложения по сравнению с предыдущими президентами.
Это может происходить по многим причинам. Английский язык сам по себе претерпел значительные изменения в течение 200 лет, но это также может быть связано с развитием средств массовой информации. Когда речи президента стали доходить до обычных людей, которые, естественно, предпочитали более короткие предложения и слова меньшего размера, речи президента стали меняться в зависимости от новой аудитории. Они были не столько о том, чтобы произвести впечатление на немногих образованных людей в Вашингтоне, сколько о том, чтобы получить голоса от простого человека.