Анализ настроений с использованием R (код работает неправильно)
Я пытаюсь использовать метод начисления лексиконов для анализа настроений в текстах. Я непосредственно позаимствовал свой код у http://analyzecore.com/2014/04/28/twitter-sentiment-analysis/ после прочтения поста о переполнении стека: анализ чувств R с фразами в словарях
Вот немного резюме о моем наборе данных:
> summary(data$text)
Length Class Mode
30 character character
> str(data$text)
chr [1:30] "Hey everybody, are you guys free on Sunday for a game play + dinner afterwards? I'll reserve a"| __truncated__ ...
и код, который я использую:
require(plyr)
require(stringr)
require(data.table)
score.sentiment = function(sentences, pos.words, neg.words, .progress='none')
{
scores = laply(sentences, function(sentence, pos.words, neg.words) {
sentence = gsub('[[:punct:]]', '', sentence)
sentence = gsub('[[:cntrl:]]', '', sentence)
sentence = gsub('\\d+', '', sentence)
# and convert to lower case:
sentence = tolower(sentence)
# split into words. str_split is in the stringr package
word.list = str_split(sentence, '\\s+')
# sometimes a list() is one level of hierarchy too much
words = unlist(word.list)
# compare our words to the dictionaries of positive & negative terms
pos.matches = match(words, pos.words)
neg.matches = match(words, neg.words)
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
# and conveniently enough, TRUE/FALSE will be treated as 1/0 by sum():
score = (sum(pos.matches) - sum(neg.matches))
return(score)
} , pos.words, neg.words, .progress=.progress)
scores.df = data.frame(score = scores, text = sentences)
return(scores.df)
}
Я использую словарь мнений Бин Лю, и я загрузил их как:
pos_BL = read.table(file = 'positive-words.txt', stringsAsFactors = F)
neg_BL = read.table(file = 'negative-words.txt', stringsAsFactors = F)
и вот код, который я использовал для запуска данных и словаря через функцию оценки:
score_result = score.sentiment(sentences = data$text,
pos.words = pos_BL,
neg.words = neg_BL,
.progress= 'text')
Тем не менее, независимо от того, что я делаю, я получаю только 0 баллов за все мои 30 строк. (см. таблицу ниже для итоговой информации):
> table(score_result$score)
0
30
У меня нет идей о том, где исправить (я обнаружил много ошибок в своем собственном коде, прежде чем опубликовать этот вопрос здесь). Любая помощь высоко ценится!
1 ответ
Пример:
list=list(a='This place is awesome', b='I failed in the exam')
lapply(list, polarity)
Вы должны позаботиться о том, чтобы не вводить таблицу или df вместо вектора в качестве параметров pos.words и neg.words функции score.sentiment. Это займет больше времени и в этом случае результата не будет. Попробуйте что-то вроде этого:
score_result = score.sentiment(sentences = data$text,
pos.words = as.character(pos_BL[ , 1]),
neg.words = as.character(neg_BL[ , 1]),
.progress= 'text')
Возможно, функция as.character() не нужна.