使用wordcloud通过twitter挖掘文本的非英语字母的问题

时间:2017-01-25 22:17:27

标签: r text-mining word-cloud

我是Stackoverflow的新手,我一直在尽力遵守指南。如果有什么我错过了,请告诉我。

最近我一直在玩R中的文本挖掘;我是新手的东西。我一直在使用您在下面嵌套的代码中找到的软件包来执行此操作。但是,当wordcloud显示瑞典字母å,ä和ö时会出现问题。正如你在附图中看到的那样,点的定位有点奇怪。

Wordcloud image

我一直在努力尽我所能解决这个问题,但无论我一直在努力,我似乎​​无法让它发挥作用。

我试图做的事情:

  1. 使用Encoding(tweets) <- "UTF-8"尝试将tweets设置为UTF-8
  2. 使用iconv(tweets, from = "UTF-8", to = "UTF-8", sub = "")
  3. 此外,定义语料库的代码的最后部分是从tm-package的作者复制的。在其他人提到wordcloud函数的问题并将语料库向量作为输入之后,他将此列为解决方案。没有它,我在尝试创建wordcloud时收到错误消息。

        #Get and load necessary packages:
        install.packages("twitteR")
        install.packages("ROAuth")
        install.packages("wordcloud")
        install.packages("tm")
        library("tm")
        library("wordcloud")
        library("twitteR")
        library("ROAuth") 
    
        #Authentication:
        api_key <- "XXX"
        api_secret <- "XXX"
        access_token <- "XXX"
        access_token_secret <- "XXX"
        cred <- setup_twitter_oauth(api_key,api_secret,access_token,
                    access_token_secret)
    
        #Extract tweets:
        search.string <- "#svpol"
        no.of.tweets <- 3200
        tweets <- searchTwitter(search.string, n=no.of.tweets, since = "2017-01-01")
        tweets.text <- sapply(tweets, function(x){x$getText()})
    
        #Remove tweets that starts with "RT" (retweets):
        tweets.text <- gsub("^\bRT", "", tweets.text)
        #Remove tabs:
        tweets.text <- gsub("[ |\t]{2,}", "", tweets.text)
        #Remove usernames:
        tweets.text <- gsub("@\\w+", "", tweets.text)
        tweets.text <- (tweets.text[!is.na(tweets.text)])
        tweets.text <- gsub("\n", " ", tweets.text)
        #Remove links:
        tweets.text <- gsub("http[^[:space:]]*", "", tweets.text)
        #Remove stopwords:
        stopwords_swe <- c("är", "från", "än")
        #Just a short example above, the real one is very large
        tweets.text <- removeWords(tweets.text,stopwords_swe)
    
        #Create corpus:
        tweets.text.corpus <- Corpus(VectorSource(tweets.text))
        #See notes in the longer text about the corpus vector
        tweets.text.corpus <- tm_map(tweets.text.corpus,
                              content_transformer(function(x) iconv(x, to='UTF-8-MAC', sub='byte')), mc.cores=1)
        tweets.text.corpus <- tm_map(tweets.text.corpus, content_transformer(tolower), mc.cores=1)
        tweets.text.corpus <- tm_map(tweets.text.corpus, removePunctuation, mc.cores=1)
        tweets.text.corpus <- tm_map(tweets.text.corpus, function(x)removeWords(x,stopwords(kind = "en")), mc.cores=1)
    
        wordcloud <- wordcloud(tweets.text.corpus, min.freq = 10,
                       max.words=300, random.order=FALSE, rot.per=0.35, 
                       colors=brewer.pal(8, "Set2"))
        wordcloud
    

    非常乐意接受这方面的帮助!

1 个答案:

答案 0 :(得分:1)

通过首先将向量编码为UTF-8-MAC来管理解决它(因为我在OSX上),然后使用gsub()函数手动更改å,ä,ö的十六进制代码(我遇到问题的信件)到实际的字母。例如gsub("0xc3 0x85", "å", x)gsub("0xc3 0xa5", "å", x)(因为区分大小写)。

最后将tm_map()函数的参数从UTF-8-MAC更改为latin1。这对我来说很有把握,希望其他人会在将来发现它很有用。