Анализ текста средствами языка программирования R



Книга Анализ текста средствами языка программирования R

“Люди часто восхваляют классические произведения, даже не читая их”, — Марк Твен.


Надеюсь, что ваш опыт опровергает это высказывание Марка Твена, а также верю, что вы всё-таки читали хотя бы одно из его классических произведений. Если нет, возможно, эта статья подтолкнёт вас к изучению его книг через призму текстовой аналитики.


Что такое анализ текста?


Анализ текста — это процесс изучения неструктурированных данных, которые представлены в форме текста. Ее задача —  получить представление о паттернах и интересующих темах.


Почему она так важна?


Есть много причин для проведения текстового анализа. Самая главная из них — разобраться в настроениях и эмоциях, используемых в приложениях и сервисах, которые мы посещаем каждый день. Благодаря текстовой аналитике мы можем извлекать важную информацию из твитов, электронных писем, текстовых сообщений, рекламы, карт и многого другого.


В этом туториале я покажу вам, как начать с базовых возможностей в языке R, которые понадобятся для текстовой аналитики.


R является и языком, и средой для статистических вычислений и графики.


Поехали


Мы собираемся установить пакет gutenbergr, чтобы получить доступ в библиотеку общедоступных книг и публикаций. 


Пакет gutenbergr поможет загрузить и обработать по областям открытые работы из коллекции Project Gutenberg. В него входят также инструменты для загрузки книг (и разбора заголовка/информации в нижнем колонтитуле), а ещё полный датасет метаданных Project Gutenberg, который можно использовать для поиска слов, предоставляющих интерес. 


Давайте установим и загрузим библиотеку в R Studio.


install.packages("gutenbergr")library(gutenbergr)

Книги Марка Твена


Сейчас мы собираемся извлечь несколько книг авторства Марка Твена из библиотеки gutenbergr.


В библиотеке gutenbergr каждая книга маркирована идентификационным номером (ID). Нам он понадобится для установления их местонахождения.



mark_twain <- gutenberg_download(c(76, 74, 3176, 245))

При помощи функции 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)

Шаги:


  1. Формула unnest tokens и проходы по входным данным нужны, чтобы определить, что именно мы хотим подвергнуть токенизации и где получить доступ к тексту. 
  2. При помощи anti_join мы в значительной степени исключаем все слова, которые находятся в базе данных stop_words.
  3. Сохраняем всю нашу работу в новую переменную tidy_mark_twain.
  4. Посмотрите:

Видно, что слова разделены и ID-номер книги указывает на них

Обратите внимание, что с тех пор, как каждый объект подвергся токенизации, у нас стало 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)

Некоторые ключевые шаги, которые нужно пройти, чтобы получить точный граф:


  1. filter() нужен, чтобы убедиться, что мы не выведем количество для каждого слова, которое встречается в тексте. Это было бы слишком много. Так мы устанавливаем границу слов, которые встречаются чаще, чем 400 раз.
  2. mutate() нужен, чтобы организовать представление слов в лучшем виде.
  3. coord_flip() нужен, чтобы развернуть граф и сделать его привлекательнее визуально.


Заключение


Текст повсюду, а значит, есть бессчетное количество возможностей анализировать и придавать смысл неструктурированным данным. Теперь у вас есть база, которая должна пригодится вам в начале путешествия по анализу текста.


799   0  

Comments

    Ничего не найдено.