#ruby #twitter #text-analysis
#ruby #Twitter #анализ текста
Вопрос:
Я хотел бы создать простой список популярных ключевых слов или фраз в твитах, содержащих определенный хэштег.
Например, для всех твитов с хэштегом «#justinbieber» я хотел бы получить упорядоченный список из десяти самых популярных слов и / или фраз, используемых в этих твитах, без учета обычных неуместных слов, таких как «и», «the» и т. Д. Это не обязательно должно быть идеальным, просто значимым.
Какие инструменты Ruby доступны для выполнения анализа текста? Конечно, часть анализа не обязательно должна быть специфичной для Twitter.
Скорее всего, я буду периодически запрашивать и сохранять твиты с заданным хэштегом, а затем применять анализ к твитам в течение заданного периода времени.
Работа будет выполняться в приложении Rails или Sinatra на Heroku, но анализ будет выполняться в задаче rake или в каком-либо запланированном задании. Я еще не решил, как я буду хранить твиты.
Ответ №1:
Я был очень доволен использованием OpenNLP через JRuby. Для таких простых вещей, как это, может быть достаточно и более простого подхода. Давайте возьмем случайный твит из поиска Twitter для #justinbieber:
s = "If u never give up and if u fight for everything that u want, u can live our dreams. #JustinBieber"
Удалите некоторые ненужные слова:
words = s.split(/W/).reject(amp;:empty?) - %w(the and u our if for that)
# => ["If", "never", "give", "up", "fight", "everything", "want", "can", "live", "dreams", "JustinBieber"]
Создание счетчиков:
words.each_with_object(Hash.new{ |h,k| h[k] = 0}) { |w, h| h[w] = 1 }
#=> {"If"=>1, "never"=>1, "give"=>1, "up"=>1, "fight"=>1, "everything"=>1, "want"=>1, "can"=>1, "live"=>1, "dreams"=>1, "JustinBieber"=>1}
Если вы сделаете это для более чем 1 твита, подсчет будет иметь больше смысла. Кроме того, поскольку у вас уже есть хэш Ruby, его легко просто сохранить, например, в коллекции MongoDB.
Комментарии:
1. Спасибо, Майкл. Я посмотрю на материал OpenNLP. Мне нужно будет извлекать фразы, а также отдельные слова, поэтому простой подход может быть не таким простым…