Анализ инаугурационных речей президентов

В то время как нейронные сети и 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 лет, но это также может быть связано с развитием средств массовой информации. Когда речи президента стали доходить до обычных людей, которые, естественно, предпочитали более короткие предложения и слова меньшего размера, речи президента стали меняться в зависимости от новой аудитории. Они были не столько о том, чтобы произвести впечатление на немногих образованных людей в Вашингтоне, сколько о том, чтобы получить голоса от простого человека.