Следующий код сопоставляет положительные и отрицательные слова в тексте и считает их. Давайте рассмотрим, например,
sentences<-c("You are not perfect!",
"However, let us not forget what happened across the Atlantic.",
"And I can't support you.",
"No abnormal energy readings",
"So with gratitude, the universe is abundant forever.")
Сначала мы импортируем положительные и отрицательные слова
pos = readLines("positive-words.txt")
neg = readLines("negative-words.txt")
из текстовых файлов. В этих файлах мы нашли:
abundant
gratitude
perfect
support
для positive-words.txt
и
abnormal
для negative-words.txt
. Следующие команды:
sentence = gsub("[[:punct:]]", "", sentence)
sentence = gsub("[[:cntrl:]]", "", sentence)
sentence = gsub('\\d+', '', sentence)
удаляют цифры, управляющие символы и знаки препинания. Затем мы разбиваем предложение на слова с помощью str_split (stringr package)
word.list = str_split(sentence, "\\s+")
words = unlist(word.list)
и сравниваем слова со словарями положительных и отрицательных терминов
pos.matches = match(words, pos)
neg.matches = match(words, neg)
pos.matches = !is.na(pos.matches)
neg.matches = !is.na(neg.matches)
Переменная sentence
может быть sentences[1]
, sentences[2]
, sentences[3]
, sentences[4]
или sentences[5]
. Например, если sentence=sentences[5]
, этот код правильно возвращает два положительных слова; фактически результат:
> pos.matches
[1] FALSE FALSE TRUE FALSE FALSE FALSE TRUE FALSE
То же самое происходит для всех других предложений. Например, если sentence=sentences[4]
:
> neg.matches
[1] FALSE TRUE FALSE FALSE
В любом случае, я хотел бы изменить этот код для того, чтобы разрешить ситуации, заключенные в sentences[1]
, sentences[3]
и sentences[4]
. На самом деле: perfect
в sentences[1]
является положительным словом, но ему предшествует not
, и тогда я хотел бы рассмотреть эти два слова как один (отрицательный) термин; support
в sentences[3]
является положительным словом, но ему предшествует cant
, и тогда я хотел бы рассмотреть эти два слова как отрицательный термин; abnormal
в sentences[4]
является отрицательным словом, но ему предшествует no
, и тогда я хотел бы рассмотреть эти два слова как один положительный термин. Например, желаемый результат для sentence=sentences[4]
:
> pos.matches
[1] TRUE FALSE FALSE
Вместо этого с помощью этого кода я получаю:
> pos.matches
[1] FALSE FALSE FALSE FALSE
Я подумал, а затем определить переменную с отрицаниями и отрицаниями:
NegativesNegations <- paste("\\b(", paste(c("no","not","couldnt","cant"), collapse = "|"), ")\\b")
Но я не знаю, как двигаться вперед с этим.