Анализ текста с помощью R: сбор и очистка данных

Пример твитов из комментариев крупнейших СМИ Индонезии.

Text Mining - это процесс интеллектуального анализа данных, основанный на текстовом формате. Этот процесс может включать в себя большой объем информации, например, темы, о которых говорят люди, анализ их настроений по какой-либо теме или определение того, какие слова наиболее часто используются в данный момент.

Twitter - одна из популярных социальных сетей в Индонезии. Я тоже его использую. По данным Statcounter, им пользуются 7,4% населения Индонезии.

Twitter предоставляет людям платформу, на которой они могут высказать свое мнение, а также получить информацию, основанную на том, что им нужно. Твиты содержат много информации, которую нужно раскрыть. Таким образом, Twitter - отличная площадка для тех, кто хочет заниматься Text Mining.

В этой статье я покажу вам, как выполнять интеллектуальный анализ текста в Твиттере, особенно в отношении комментариев индонезийских пользователей сети, взятых из одного из крупнейших СМИ Индонезии - Kompas. В этой статье объясняется только, как собирать и очищать данные с помощью R.

В следующей статье я покажу вам, как эти текстовые данные могут содержать много информации путем исследования, анализа настроений и последующего моделирования тем.

План атаки

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

  1. Сбор данных с помощью Twitter API
  2. Очистка данных
  3. Исследование
  4. Тематическое моделирование
  5. Анализ настроений

В этой статье я покажу вам только 1-й и 2-й шаг. Об остальном - в следующей статье.

Сбор данных

Первый шаг, который нам нужно сделать, - это собрать данные из Twitter. Прежде чем собирать твиты, вы должны рассмотреть некоторые аспекты, например, какие цели вы хотите достичь и где вы хотите разместить твит, будь то поиск по ним с помощью некоторых запросов или сбор его от некоторых пользователей.

Примечание. Убедитесь, что у вас есть ключи API Twitter для доступа к API. Вы можете зарегистрироваться и прочитать дополнительную информацию здесь.

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

Причина, по которой мы должны принимать комментарии из учетных записей средств массовой информации, заключается в том, что их комментарии касаются широких тем, а также они содержат меньше спам-твитов.

Спам-твит, о котором я говорю, например твиты, которые используют какие-то хэштеги, но не говорят об этом, или, другими словами, твиты вне контекста.

Исходя из этой цели, мы соберем твит из упоминаний учетной записи, имя пользователя которой - kompascom. Если мы просто хотим получать твиты, которые являются ответами на него, мы можем использовать специальное ключевое слово, которое должно быть: ‹здесь имя пользователя›. Как и этот код ниже,

# Import the library
library(rtweet)
# Note: Use your own token 
twitter_token <- create_token(
  app = appname,
  consumer_key = key,
  consumer_secret = secret,
  access_token = "xxx",
  access_secret = "xxx"
)
# Search the tweets
news_tweets <- search_tweets("to:kompascom", n = 18000, include_rts = F)
# Select specific columns only
data_fix <- news_tweets %>%
              # Remove Duplicate
              distinct(text, .keep_all = T) %>%
              # Take The Text Only
              select(created_at, text)
# Create id column as the tweet identifier
data_fix["id"] <- 1:nrow(data_fix)
# Convert the created_at to date format
data_fix$created_at <- as.Date(data_fix$created_at, format = "%Y-%m-%d")

В этом случае мы возьмем около 18000 твитов, которые будут отправлены на имя пользователя. После запуска кода у нас получилось около 16746 твитов и 90 столбцов. Мы не будем использовать все столбцы, вместо этого мы выбираем только даты, а также текст из твита, а также удаляем твиты, которые дублируются друг другом. Также мы должны сделать столбец id в качестве идентификатора твита. Таким образом, у нас будет 16418 твитов и 3 колонки.

Очистка данных

Очистка данных - важный этап, на который уйдет больше времени, чем на любой другой этап интеллектуального анализа текста. Это важно, потому что мы хотим удалить слова и символы, которые не влияют на его значение. Вот примеры твитов, которые еще не чисты,

Как видно из вышесказанного, некоторые твиты содержат слова и символы, которые мы удаляем, такие как упоминания (например, @ kompascom), хэштеги (например, # COVID19), escape-последовательности (например, \ n), символы UTF (например, ‹U + 0001F637› ) и многое другое.

Кроме того, мы должны удалить слова, не влияющие на семантическое значение твита, который мы назвали стоп-словом. Примеры стоп-слов на индонезийском языке: тидак, я, букан, карена, унтук и многие другие. В качестве стоп-слова мы будем использовать репозиторий GitHub, который вы можете скачать здесь.

Когда мы очищаем твиты, нам приходится решать дополнительную задачу. Большинство индонезийцев пишут свой твит, сокращая его, и в нем много слов, но он имеет то же значение.

Например, на индонезийском языке, если мы хотим сказать «нет», мы скажем «тидак». У этого слова есть много письменных форм, есть «так», «га», «гак», или даже они будут использовать дополнительный алфавит, чтобы выделить слово, подобное «тидакккк». Это вызовет головную боль у тех, кто хочет анализировать твиты на индонезийском языке.

Из-за этого у нас нет быстрого метода его очистки, поэтому нам нужно выделить время для этого.

Примечание: чтобы упростить нашу работу, мы не будем удалять слова с дополнительным алфавитом, вместо этого мы удаляем только стоп-слова и символы. Это потому, что слово не часто встречается, поэтому, когда мы анализируем его, мы просто игнорируем его.

Вот код, который мы будем использовать,

# Get the text column
text <- data_fix$text
# Set the text to lowercase
text <- tolower(text)
# Remove mentions, urls, emojis, numbers, punctuations, etc.
text <- gsub("@\\w+", "", text)
text <- gsub("https?://.+", "", text)
text <- gsub("\\d+\\w*\\d*", "", text)
text <- gsub("#\\w+", "", text)
text <- gsub("[^\x01-\x7F]", "", text)
text <- gsub("[[:punct:]]", " ", text)
# Remove spaces and newlines
text <- gsub("\n", " ", text)
text <- gsub("^\\s+", "", text)
text <- gsub("\\s+$", "", text)
text <- gsub("[ |\t]+", " ", text)
# Put the data to a new column
data_fix["fix_text"] <- text
head(data_fix$fix_text, 10)

Возможно, вы запутаетесь, как работает функция gsub. Позвольте мне немного объяснить вам это. Функция gsub принимает 3 параметра: это шаблон слов и символов с использованием регулярного выражения, его замена, а затем строка или векторы, которые мы хотим обработать.

Регулярное выражение - это в основном шаблон для поиска слова с форматом. В этом примере, если вы хотите удалить упоминания, шаблон будет выглядеть как «@ \\ w +», где @ - это начало шаблона. Затем \\ w отмечает каждый отдельный символ слова в диапазоне от A до Z, a-z и числовой, например 0–9. Наконец, + означает, что он показывает ему один или несколько символов. Если он соответствует шаблону, тогда слово будет заменено заданным словом или пустой строкой.

Помимо очистки текста, мы должны преобразовать его в аккуратный формат данных, а также удалить стоп-слова. Код выглядит так,

library(tidytext)
# Remove Stopwords
stop_id <- scan(paste(getwd(), "/stopwords-id.txt", sep=""), character(), sep="\n")
# Create dataframe of the stop words
stop_words <- data.frame(
  word <- stop_id,
  stringsAsFactors = F
)
colnames(stop_words) <- "word"
# Convert to tidy format
tidy_text <- data_fix %>%
  select(created_at, id, fix_text) %>%
  # Tokenize the word from the tweets
  unnest_tokens(input = fix_text, output = word) %>%
  # Remove stop words
  anti_join(stop_words, by="word")

После того, как мы уберем и приведем в порядок твиты, вот как это выглядит:

С этим мы можем двигаться дальше к его изучению.

Заключение

В заключение, Twitter - отличный набор данных для анализа текстовых данных. Мы можем получить из него много информации, например, проанализировать его настроение, узнать обсуждаемую тему и многое другое. Индонезия - один из крупнейших пользователей Twitter. Следовательно, есть много информации, которую нужно добывать и анализировать.

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

использованная литература

[1] Статистика социальных сетей Индонезии. Https://gs.statcounter.com/social-media-stats/all/indonesia
[2] Силдж, Дж. И Робинсон, Д. Анализ текста с помощью R: аккуратный подход (2017). O’Reilly Media, Inc.