Как импортировать лексику эмоций в R для парсинга данных с Kickstarter

Я пытаюсь создать модель для измерения эмоций в тексте с помощью R. В основном, используя лексикон со словами эмоций, я хочу извлечь только «p» (абзац) из большого количества URL-адресов. Я хочу найти количество слов для каждой эмоции для каждого URL-адреса на основе наличия заранее определенных слов, указывающих на эмоции, с помощью лексики. Ссылка на словарь

Я использую данные в формате JSON от Webrobots: Dataset Link (последний набор).

Любая помощь будет очень признательна, так как я действительно отчаянно хочу начать с этого! Даже просто зная, как я могу импортировать это в R и код для подсчета слов, было бы большим подспорьем.

С уважением, отчаянная безграмотная девушка.

Обновление: файл данных импортируется в R. Однако я не могу найти способ написать код, который проверяет наличие слов, указанных в лексике, для работы с данными. Я пытаюсь создать 6 новых переменных с подсчетом каждой кампании для шести основных эмоций (счастья, грусти, гнева, удивления, страха, отвращения), которые показывают количество слов для наличия этих эмоций.

В файле я уже указывал часть абзаца 'p' при внимательном рассмотрении. Мне просто нужно категоризировать его содержимое.


person Rhino    schedule 16.03.2016    source источник
comment
Добро пожаловать в SO, пожалуйста, будьте более конкретны, задавая вопрос: что вы пробовали, чего вы ожидаете и т. Д. См. как спросить   -  person Nehal    schedule 16.03.2016


Ответы (1)


Список словаря скачать

  1. Первый шаг для вас - вручную загрузить (просто скопировать и вставить) список лексики по этой ссылке и сохранить его в формате .csv:

http://www.saifmohammad.com/WebDocs/NRC-AffectIntensity-Lexicon.txt

Затем вам нужно разбить этот список на 4 отдельные части, каждая часть должна иметь один эффект. В результате получится 4 файла .csv:

anger_list = w.csv
fear_list  = x.csv
joy_list   = y.csv
sad_list   = z.csv

Если вы не хотите делать это вручную, существует альтернативный список лексики, где данные можно напрямую загрузить в отдельные файлы: https://www.cs.uic.edu/~liub/FBS/sentiment-analysis..html#lexicon.

Загрузка текстовых данных

  1. Другая ссылка, которой вы поделились (http://webrobots.io/Kickstarter-datasets/), теперь кажется иметь файлы JSON и csv, и чтение их в R кажется довольно простым.

Очистка URL для извлечения текста

  1. Я не уверен в столбце / поле, которое вы хотите анализировать; поскольку набор данных, который я загрузил по состоянию на февраль 2019 года, не имеет поля "p".

Поскольку вы упомянули наличие URL-адресов, я также делюсь кратким кодом для возможного редактирования или очистки URL-адресов. Это поможет вам получить чистые текстовые данные из URL-адресов:

replacePunctuation <- function(x)
{

  # Lowercase all words for convenience
  x <- tolower(x)

  # Remove words with multiple consecutive digits in them (3 in this case) 
  x <- gsub("[a-zA-Z]*([0-9]{3,})[a-zA-Z0-9]* ?", " ", x)

  # Remove extra punctuation
  x <- gsub("[.]+[ ]"," ",x) # full stop
  x <- gsub("[:]+[ ]"," ",x) # Colon
  x <- gsub("[?]"," ",x)     # Question Marks
  x <- gsub("[!]"," ",x)     # Exclamation Marks
  x <- gsub("[;]"," ",x)     # Semi colon
  x <- gsub("[,]"," ",x)     # Comma
  x <- gsub("[']"," ",x)     # Apostrophe
  x <- gsub("[-]"," ",x)     # Hyphen
  x <- gsub("[#]"," ",x)     

  # Remove all newline characters
  x <- gsub("[\r\n]", " ", x)

  # Regex pattern for removing stop words
  stop_pattern <- paste0("\\b(", paste0(stopwords("en"), collapse="|"), ")\\b")
  x <- gsub(stop_pattern, " ", x)

  # Replace whitespace longer than 1 space with a single space
  x <- gsub(" {2,}", " ", x)

  x
}

Код для добавления оценок к настроениям или аффектам

  1. Далее, я предполагаю, что вы прочитали свои данные как текст в R. Допустим, вы сохранили их как часть некоторого фрейма данных df $ p. Следующим шагом будет добавление дополнительных столбцов в этот фрейм данных:

    df$p # contains text of interest
    

Теперь добавьте дополнительные столбцы в этот фрейм данных для каждого из четырех эффектов.

df$ANGER   = 0
df$FEAR    = 0
df$JOY     = 0
df$SADNESS = 0

Затем вы просто просматриваете каждую строку df, разбивая текст p на слова на основе пробелов. Затем вы ищете вхождение определенных терминов из вашего списка «Лексикон» в выделенные слова. Затем вы присваиваете баллы каждому аффекту, как показано ниже:

for (i in 1:nrow(df))
{
  # counter initialization
  angry = 0
  feared = 0
  joyful = 0
  sad = 0

# for df, let's say the text 'p' is at first column place  
words <- strsplit(df[i,1], " ")[[1]]  
  for (j in 1:length(words))
  {
    if (words[j] %in% anger_list[,1])
      angry = angry + 1
    else {
      if (words[j] %in% fear_list[,1])   
        feared = feared + 1
      else { 
        if (words[j] %in% joy_list[,1])
          joyful = joyful + 1
        else
          sad = sad + 1
      } #else 2
    } #else 1
  } #for 2

  df[i,2] <- angry
  df[i,3] <- feared
  df[i,4] <- joyful
  df[i,5] <- sad

}#for 1

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

person Sandy    schedule 18.02.2019