2016-05-28 6 views
2

Я пытаюсь сделать некоторый текст, используя данные twitter. Я делаю следующее:функция tolower пакета corpus выдает ошибку

#connect to twitter API 
setup_twitter_oauth(consumer_key, consumer_secret, access_token, access_secret) 

#set radius and amount of requests 
N=200 # tweets to request from each query 
S=200 # radius in miles 

lats=c(38.9,40.7) 
lons=c(-77,-74) 

roger=do.call(rbind,lapply(1:length(lats), function(i) searchTwitter('Roger+Federer', 
                    lang="en",n=N,resultType="recent", 
                    geocode=paste(lats[i],lons[i],paste0(S,"mi"),sep=",")))) 

Это все работает нормально, но когда я хочу использовать функцию TOLOWER пакета мозолистого, как это:

data=as.data.frame(cbind(tweet=rogertext)) 
corpus=Corpus(VectorSource(data$tweet)) 
corpus=tm_map(corpus,tolower) 

Он trows эту ошибку:

> corpus=tm_map(corpus,tolower) 
Error in FUN(X[[i]], ...) : 
invalid input 'RT @Federerism: Roger Federer reaches 5 million followers on twitter Love You Roger í ½í¸˜ í ½í¸ í ½í¸˜ í ½í¸ #Roger #Federer # Federerism #Maestro https:/…' in 'utf8towcs' 

Любая мысль о том, что пойдет не так?

ответ

1

base::tolower дроссели на специальных персонажах. Это часто бывает проблемой при разработке твитов. Вы можете попытаться поймать ошибки или просто использовать подвесной кулон stringi:

# tw <- searchTwitter('Roger Federer reaches 5 million followers on twitter Love You Roger', n=1) 
download.file("https://www.dropbox.com/s/33ilhcu2v82nwuq/twitter_tolower.rda?dl=1", tf <- tempfile(fileext = ".rda"), mode="wb") 
load(tf) 

tw[[1]]$getText() 
# [1] "RT @Federerism: Roger Federer reaches 5 million followers on twitter Love You Roger \xed��\xed�\u0098 \xed��\xed�\u008d \xed��\xed�\u0098 \xed��\xed�\u008d #Roger #Federer # Federerism #Maestro https:/…" 

## Does not work: 
tolower(tw[[1]]$getText()) 
# Error in tolower(tw[[1]]$getText()) : 
# invalid input 'RT @Federerism: Roger Federer reaches 5 million followers on twitter Love You Roger í ½í¸˜ í ½í¸ í ½í¸˜ í ½í¸ #Roger #Federer # Federerism #Maestro https:/…' in 'utf8towcs' 

## Works: 
stringi::stri_trans_tolower(tw[[1]]$getText()) 
# [1] "rt @federerism: roger federer reaches 5 million followers on twitter love you roger \xed��\xed�\u0098 \xed��\xed�\u008d \xed��\xed�\u0098 \xed��\xed�\u008d #roger #federer # federerism #maestro https:/…" 

## Works, too: 
library(tm) 
corp <- Corpus(VectorSource(tw[[1]]$getText())) 
corp <- tm_map(corp, content_transformer(stringi::stri_trans_tolower)) 
content(corp[[1]]) 
# [1] "rt @federerism: roger federer reaches 5 million followers on twitter love you roger \xed��\xed�\u0098 \xed��\xed�\u008d \xed��\xed�\u0098 \xed��\xed�\u008d #roger #federer # federerism #maestro https:/…" 
+0

сладкий! Благодаря!! –

0

Попробуйте следующее:

corpus <- tm_map(corpus, content_transformer(tolower)) 

Там было изменение синтаксиса в tm пакете несколько лет назад. Надеюсь, это решает проблему.

+0

спасибо. но проблема остается. –