2015-11-21 3 views
2

Какой лучший подход использовать библиотеку tm для сравнения текста с положительным списком опорных слов и возврата количества положительных слов? Я хочу чтобы иметь возможность вернуть сумму положительных слов в справочный текст.R tm Пакет: Как сравнить текст с положительным списком справочных слов и возвратить количество положительных словных событий

Вопрос: Каков наилучший способ сделать это?

Например:

positiveword_list <- c("happy", "great", "fabulous", "great") 

текст ссылки:

exampleText <- c("ON A BRIGHT SPRING DAY in the year 1677, “the good ship 
Kent,” Captain Gregory Marlowe, Master, set sail from the great docks of London. She carried 230 English Quakers, outward bound for a new home in British North America. As the ship dropped down the Thames she was hailed by King Charles II, who happened to be sailing on the river. The two vessels made a striking contrast. The King’s yacht was sleek and proud in gleaming paintwork, with small cannons peeping through wreaths of gold leaf, a wooden unicorn prancing high above her prow, and the royal arms emblazoned upon her stern. She seemed to dance upon the water— new sails shining white in the sun, flags streaming bravely from her mastheads, officers in brilliant uniform, ladies in court costume, servants in livery, musicians playing, and spaniels yapping. At the center of attention was the saturnine figure of the King himself in all his regal splendor. On the other side of the river came the emigrant ship. She would have been bluff-bowed and round-sided, with dirty sails and a salt-stained hull, and a single ensign drooping from its halyard. Her bulwarks were lined with apprehensive passengers— some dressed in the rough gray homespun of the northern Pen-nines, others in the brown drab of London tradesmen, several in the blue suits of servant-apprentices, and a few in the tattered motley of the country poor.") 

Вот некоторые фон:

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

count <- length(which(lapply(positiveword_list, grepl, x = exampleText]) == TRUE)) 

таким образом:

dataframeIn %>% mutate(posCount <- (length(which(lapply(positiveword_list, grepl, x = text) == TRUE)))) 

где текст колонки в dataFrameIn (т.е. dataFrameIn $ текста)

ответ

1

Вот еще один метод, с помощью настраиваемого встроенного инструмента, в котором можно определить словарь положительных слов и применить это к любому числу текстов, чтобы подсчитать положительные ключевые слова. Это использует пакет quanteda и метод dfm() для создания матрицы признаков документа с аргументом dictionary =. (См ?dictionary.)

require(quanteda) 
posDic <- dictionary(list(positive = positiveword_list)) 
myDfm <- dfm(exampleText, dictionary = posDic) 
# Creating a dfm from a character vector ... 
# ... lowercasing 
# ... tokenizing 
# ... indexing documents: 1 document 
# ... indexing features: 157 feature types 
# ... applying a dictionary consisting of 1 key 
# ... created a 1 x 1 sparse dfm 
# ... complete. 
# Elapsed time: 0.014 seconds. 

as.data.frame(myDfm) 
#  positive 
# text1  1 

# produces a data frame with the text and the positive count 
cbind(text = exampleText, as.data.frame(myDfm)) 

Примечание: Это, вероятно, не важно, к примеру, но использование «большой» в exampleText не в качестве положительного слова. Иллюстрирует опасности многозначности и словарей.

+1

Ken, Спасибо за информацию - это здорово. Я действительно ценю твою помощь. Библиотека quanteda - именно то, что я искал. Perfecto! – Technophobe01

+0

@PeteJarvis приятно слушать. Мы активно его разрабатываем, поэтому приветствуем любые отзывы/запросы/сообщения об ошибках. –

+0

Ken, отлично, это будет очень полезно для тестирования масштабирования R на более сложных проблемах анализа языка. В северном направлении Мы разработали механизм создания совокупных компьютеров в программном обеспечении. Подумайте о 5 компьютерных системах, которые отображаются как один компьютер. То есть Одна операционная система (Centos), работающая поверх 5 узлов 1T.5b физической DRAM, масштабируется до 100Tb Ram и т. Д. Я занят написанием и нахождением примеров, которые могут использовать системы :-) Будьте осторожны и благодарны за указатели. – Technophobe01

1

Вы можете сделать это без использования tm пакета.

Попробуйте

contained <- lapply(positiveword_list, grepl, x = exampleText) 

lapply возвращает список.

Слова представляют:

>positiveword_list[contained == T] 
"great" "great" 
>length(contained[contained==T]) 
2 

Слово нет:

>positiveword_list[contained == F] 
"happy" "fabulous" 
>length(contained[contained==F]) 
2 
+1

Narenda - благодарю вас за помощь. Очень признателен. – Technophobe01

+0

Что такое 'd',' positiveWords' и 'strsPos'? Я считаю, что причиной ошибки является то, что 'positiveWords' в вашем коде представляет собой целое число, а не числовой вектор. 'mutate' добавляет новый столбец. Поэтому 'positiveWords' должен быть вектором. Я рекомендую задавать следующий вопрос со ссылкой на этот вопрос, если это необходимо? Если этот вопрос решает вашу проблему, закройте это, приняв его и задайте новый вопрос об ошибке, которую вы получаете. –

+1

Nagendra, Сортировка. Я использовал «<-» внутри мутанта() не «=». Я хочу, чтобы ваша реклама очень ценилась. Спасибо, что помогли мне здесь. – Technophobe01