Составление облака слов по дате для результатов поиска в Твиттере? (используя R) - PullRequest
3 голосов
/ 03 июня 2010

Я хочу выполнить поиск в твиттере по слову (скажем, #google), а затем иметь возможность генерировать облако тегов для слов, используемых в твиттах, но в соответствии с датами (например, с движущимся окном в час, это каждый раз на 10 минут и показывает, как разные слова стали чаще употребляться в течение дня).

Буду признателен за любую помощь в том, как это сделать: ресурсы для информации, код для программирования (R - единственный язык, на котором я способен) и идеи по визуализации. Вопросы:

  1. Как получить информацию?

    В R я обнаружил, что в пакете twitteR есть команда searchTwitter. Но я не знаю, насколько большой и н я могу получить от этого. Кроме того, он не возвращает даты, с которых произошел твит.

    Я вижу здесь , что я могу получить до 1500 твитов, но для этого требуется, чтобы я выполнял синтаксический анализ вручную (что приводит меня к шагу 2). Кроме того, для моих целей мне понадобятся десятки тысяч твитов. Возможно ли их получить в ретроспективе? (например, спрашивать старые сообщения каждый раз через URL API?) Если нет, то возникает более общий вопрос о том, как создать персональное хранилище твитов на вашем домашнем компьютере? (вопрос, который лучше оставить в другой ветке SO - хотя мне было бы очень интересно прочитать любые идеи от людей здесь)

  2. Как разобрать информацию (в R)? Я знаю, что в R есть функции, которые могут помочь из пакетов rcurl и twitteR. Но я не знаю, как и как их использовать. Любые предложения будут полезны.

  3. Как анализировать? как убрать все "не интересные" слова? Я обнаружил, что пакет "tm" в R имеет этот пример :

    reuters <- tm_map (reuters, removeWords, стоп-слова («английский»)) </p>

    Это бы сработало? Я должен сделать что-то еще / больше?

    Кроме того, я полагаю, что я хотел бы сделать это после сокращения моего набора данных в соответствии со временем (что потребует некоторых posix-подобных функций (которые я не совсем уверен, что здесь потребуется, или как их использовать).

  4. И, наконец, возникает вопрос визуализации. Как создать облако тегов из слов? Я нашел решение для этого здесь , любые другие предложения / рекомендации?

Я полагаю, что задаю здесь огромный вопрос, но я пытался разбить его на как можно больше простых вопросов. Любая помощь будет приветствоваться!

Best

Tal

Ответы [ 4 ]

6 голосов
/ 03 июня 2010
  • Облако слов / тегов в R с использованием пакета "snippets"
  • www.wordle.net

  • Используя пакет openNLP, вы можете пометить твиты (pos = часть речи), а затем извлечь только существительные, глаголы или прилагательные для визуализации в облаке слов.

  • Возможно, вы можете запросить твиттер и использовать текущее системное время в качестве метки времени, записать в локальную базу данных и запросить снова с шагом x с / мин и т. Д.
  • Исторические данные доступны по http://www.readwriteweb.com/archives/twitter_data_dump_infochimp_puts_1b_connections_up.php и http://www.wired.com/epicenter/2010/04/loc-google-twitter/
2 голосов
/ 17 февраля 2012

Замечу, что это старый вопрос, и есть несколько решений, доступных через веб-поиск, но вот один ответ (через http://blog.ouseful.info/2012/02/15/generating-twitter-wordclouds-in-r-prompted-by-an-open-learning-blogpost/):

require(twitteR)
searchTerm='#dev8d'
#Grab the tweets
rdmTweets <- searchTwitter(searchTerm, n=500)
#Use a handy helper function to put the tweets into a dataframe
tw.df=twListToDF(rdmTweets)

##Note: there are some handy, basic Twitter related functions here:
##https://github.com/matteoredaelli/twitter-r-utils
#For example:
RemoveAtPeople <- function(tweet) {
  gsub("@\\w+", "", tweet)
}
#Then for example, remove @d names
tweets <- as.vector(sapply(tw.df$text, RemoveAtPeople))

##Wordcloud - scripts available from various sources; I used:
#http://rdatamining.wordpress.com/2011/11/09/using-text-mining-to-find-out-what-rdatamining-tweets-are-about/
#Call with eg: tw.c=generateCorpus(tw.df$text)
generateCorpus= function(df,my.stopwords=c()){
  #Install the textmining library
  require(tm)
  #The following is cribbed and seems to do what it says on the can
  tw.corpus= Corpus(VectorSource(df))
  # remove punctuation
  tw.corpus = tm_map(tw.corpus, removePunctuation)
  #normalise case
  tw.corpus = tm_map(tw.corpus, tolower)
  # remove stopwords
  tw.corpus = tm_map(tw.corpus, removeWords, stopwords('english'))
  tw.corpus = tm_map(tw.corpus, removeWords, my.stopwords)

  tw.corpus
}

wordcloud.generate=function(corpus,min.freq=3){
  require(wordcloud)
  doc.m = TermDocumentMatrix(corpus, control = list(minWordLength = 1))
  dm = as.matrix(doc.m)
  # calculate the frequency of words
  v = sort(rowSums(dm), decreasing=TRUE)
  d = data.frame(word=names(v), freq=v)
  #Generate the wordcloud
  wc=wordcloud(d$word, d$freq, min.freq=min.freq)
  wc
}

print(wordcloud.generate(generateCorpus(tweets,'dev8d'),7))

##Generate an image file of the wordcloud
png('test.png', width=600,height=600)
wordcloud.generate(generateCorpus(tweets,'dev8d'),7)
dev.off()

#We could make it even easier if we hide away the tweet grabbing code. eg:
tweets.grabber=function(searchTerm,num=500){
  require(twitteR)
  rdmTweets = searchTwitter(searchTerm, n=num)
  tw.df=twListToDF(rdmTweets)
  as.vector(sapply(tw.df$text, RemoveAtPeople))
}
#Then we could do something like:
tweets=tweets.grabber('ukgc12')
wordcloud.generate(generateCorpus(tweets),3)
2 голосов
/ 03 июня 2010

Что касается графика: здесь я создал облако слов: http://trends.techcrunch.com/2009/09/25/describe-yourself-in-3-or-4-words/, используя пакет snippets, мой код там. Я вручную вытащил определенные слова. Проверьте это и дайте мне знать, если у вас есть более конкретные вопросы.

0 голосов
/ 29 февраля 2012

Я бы хотел ответить на ваш вопрос по созданию большого облака слов. То, что я сделал, это

  1. Используйте s0.tweet <- searchTwitter (KEYWORD, n = 1500) в течение 7 или более дней, например <a href="http://blog.cloudstat.org/post/18296357801/r-twitter-analysis-how-hot-is-the-lynas-rare-earths-mini" rel="nofollow noreferrer"> THIS .

  2. Объедините их с помощью этой команды:

rdmTweets = c (s0.tweet, s1.tweet, s2.tweet, s3.tweet, s4.tweet, s5.tweet, s6.tweet, s7.tweet)

Результат:

Lynas Square Cloud

Это Квадратное Облако состоит из примерно 9000 твитов.

Источник: Люди рассказывают о Lynas Malaysia через Twitter-анализ с помощью R CloudStat

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...