“Люди часто восхваляют классические произведения, даже не читая их”, — Марк Твен.
Надеюсь, что ваш опыт опровергает это высказывание Марка Твена, а также верю, что вы всё-таки читали хотя бы одно из его классических произведений. Если нет, возможно, эта статья подтолкнёт вас к изучению его книг через призму текстовой аналитики.
Анализ текста — это процесс изучения неструктурированных данных, которые представлены в форме текста. Ее задача — получить представление о паттернах и интересующих темах.
Есть много причин для проведения текстового анализа. Самая главная из них — разобраться в настроениях и эмоциях, используемых в приложениях и сервисах, которые мы посещаем каждый день. Благодаря текстовой аналитике мы можем извлекать важную информацию из твитов, электронных писем, текстовых сообщений, рекламы, карт и многого другого.
В этом туториале я покажу вам, как начать с базовых возможностей в языке R, которые понадобятся для текстовой аналитики.
R является и языком, и средой для статистических вычислений и графики.
Мы собираемся установить пакет gutenbergr, чтобы получить доступ в библиотеку общедоступных книг и публикаций.
Пакет gutenbergr поможет загрузить и обработать по областям открытые работы из коллекции Project Gutenberg. В него входят также инструменты для загрузки книг (и разбора заголовка/информации в нижнем колонтитуле), а ещё полный датасет метаданных Project Gutenberg, который можно использовать для поиска слов, предоставляющих интерес.
Давайте установим и загрузим библиотеку в R Studio.
install.packages("gutenbergr")library(gutenbergr)Сейчас мы собираемся извлечь несколько книг авторства Марка Твена из библиотеки gutenbergr.
В библиотеке gutenbergr каждая книга маркирована идентификационным номером (ID). Нам он понадобится для установления их местонахождения.
При помощи функции gutenberg_download берём книги и сохраняем их в датафрейм mark_twain.
Скриншот датафрейма mark_twainПри помощи R книги помещаются в отдельные строчки и соотносятся со столбцом по релевантному ID-номеру. Очевидно, что данные достаточно беспорядочные и на этом этапе приносят не слишком много пользы анализу.
Когда вы проанализируете любой текст, то увидите, что всегда будут попадаться избыточные слова, которые могут изменить результат в зависимости от того, какие шаблоны или тенденции вы пытаетесь обнаружить. Их называют стоп-словами. Вам самим решать, хотите ли вы удалить их, а в моём примере мы определённо их уберем.
Для начала нам нужно загрузить библиотеку tidytext.
library(tidytext)Дальше мы просмотрим stop_words во всей базе данных R (не в книгах Марка Твена).
data(stop_words) Так выглядят первые несколько строк функции stop_wordsОбратите внимание, что у нас получилось 1,139 строк.
Для удаления стоп-слов и токенизации нашего текста используем метод “трубопровода” из библиотеки dplyr.
Токенизация — это задача по разделению текста на кусочки.
Понимайте это так, что токенизация разрезает предложение на отдельные слова. В процессе анализа текста это даёт программе структуру данных для работы.
Источник: Стэндфордский пример ОЕЯ (обработки естественного языка) — ТокенизацииМы совместим в одну цепочку (piping) несколько шагов, чтобы удалить стоп-слова, пока будет происходить токенизация датафрейма mark_twain.
library(dplyr)
tidy_mark_twain <- mark_twain %>%
unnest_tokens(word, text) %>% #tokenize
anti_join(stop_words) #remove stop words
print(tidy_mark_twain)
Шаги:
Обратите внимание, что с тех пор, как каждый объект подвергся токенизации, у нас стало 182,706 строчек! Это потому, что каждое слово теперь находится в отдельной строчке.
Наша задача — найти паттерны в данных. Частотное распределение слов — это отличный способ увидеть, какие слова нужно сортировать и искать.
tidy_mark_twain %>%
count(word, sort=TRUE)
Самое популярное слово — время
Если вы читали любую из книг Марка Твена, то не удивитесь, что Том — это второе по популярности слово. А еще интереснее, что самое популярное слово “время” встречается 1226 раз!
При помощи библиотеки ggplot2 мы можем добавить определенный визуальный контекст, чтобы увидеть, какие из слов чаще употребляются в тексте.
library(ggplot2)
freq_hist <-tidy_mark_twain %>%
count(word, sort=TRUE) %>%
filter(n > 400) %>%
mutate(word = reorder(word,n )) %>%
ggplot(aes(word, n))+
geom_col(fill= 'lightgreen')+
xlab(NULL)+
coord_flip()
print(freq_hist)
Некоторые ключевые шаги, которые нужно пройти, чтобы получить точный граф:
Текст повсюду, а значит, есть бессчетное количество возможностей анализировать и придавать смысл неструктурированным данным. Теперь у вас есть база, которая должна пригодится вам в начале путешествия по анализу текста.
Перевод статьи Jason Lee: Text Analytics in R
Комментарии