2015-06-24 2 views
0

У меня есть набор данных (сообщения в Facebook) (через netvizz), и я использую пакет quanteda в R. Вот мой R-код.R Text Mining with quanteda

# Load the relevant dictionary (relevant for analysis) 
liwcdict <- dictionary(file = "D:/LIWC2001_English.dic", format = "LIWC") 

# Read File 
# Facebooks posts could be generated by FB Netvizz 
# https://apps.facebook.com/netvizz 
# Load FB posts as .csv-file from .zip-file 
fbpost <- read.csv("D:/FB-com.csv", sep=";") 

# Define the relevant column(s) 
fb_test <-as.character(FB_com$comment_message) #one column with 2700 entries 
# Define as corpus 
fb_corp <-corpus(fb_test) 
class(fb_corp) 

# LIWC Application 
fb_liwc<-dfm(fb_corp, dictionary=liwcdict) 
View(fb_liwc) 

Все работает до тех пор:

> fb_liwc<-dfm(fb_corp, dictionary=liwcdict) 
Creating a dfm from a corpus ... 
    ... indexing 2,760 documents 
    ... tokenizing texts, found 77,923 total tokens 
    ... cleaning the tokens, 1584 removed entirely 
    ... applying a dictionary consisting of 68 key entries 
Error in `dimnames<-.data.frame`(`*tmp*`, value = list(docs = c("text1", : 
    invalid 'dimnames' given for data frame 

Как бы вы интерпретировать сообщение об ошибке? Есть ли предложения по решению проблемы?

+0

Трудно сказать, так как я не имею входные файлы текстовых, но что, если вы пытаетесь просто 'DFM (inaugTexts, словарь = liwcdict)', что происходит? У меня есть файл 'LIWC2001_English.dic', а команда' dfm' отлично работает в моей системе с 'inaugTexts' - хотя она медленная и ее необходимо переписать для ее оптимизации (далее в моем списке). –

+0

Теперь это исправлено в ветке dev, которую вы можете установить в соответствии с приведенным ниже ответом. –

ответ

1

Ошибка в квантовой версии 0.7.2, вызвавшая ошибку dfm() при использовании словаря, когда один из документов не содержит признаков. Ваш пример терпит неудачу, потому что на стадии очистки некоторые из «документов» Facebook публикуют все свои функции, удаленные с помощью шагов очистки.

Это не только зафиксировано в 0.8.0, но и мы изменили базовую реализацию словарей в dfm(), что привело к значительному улучшению скорости. (The LIWC еще большой и сложный словарь, и регулярные выражения еще означает, что это гораздо медленнее, чем просто индексации лексем. Мы будем работать над оптимизацией этого дальше.)

devtools::install_github("kbenoit/quanteda") 
liwcdict <- dictionary(file = "LIWC2001_English.dic", format = "LIWC") 
mydfm <- dfm(inaugTexts, dictionary = liwcdict) 
## Creating a dfm from a character vector ... 
## ... indexing 57 documents 
## ... lowercasing 
## ... tokenizing 
## ... shaping tokens into data.table, found 134,024 total tokens 
## ... applying a dictionary consisting of 68 key entries 
## ... summing dictionary-matched features by document 
## ... indexing 68 feature types 
## ... building sparse matrix 
## ... created a 57 x 68 sparse dfm 
## ... complete. Elapsed time: 14.005 seconds. 
topfeatures(mydfm, decreasing=FALSE) 
## Fillers Nonfl Swear  TV Eating Sleep Groom Death Sports Sexual 
##  0  0  0  42  47  49  53  76  81  100 

Он также будет работать, если документ содержит нулевые функции после токенизации и очистки, что, вероятно, является тем, что ломает старый dfm, который вы используете со своими текстами в Facebook.

mytexts <- inaugTexts 
mytexts[3] <- "" 
mydfm <- dfm(mytexts, dictionary = liwcdict, verbose = FALSE) 
which(rowSums(mydfm)==0) 
## 1797-Adams 
##   3 
Смежные вопросы