2017-01-28 9 views
0

Я хочу рассчитать попарные частоты слов большого количества твитов, которые я собрал. Так что я могу использовать их для визуализации в Gephi (сетевой график). Текущие данные выглядят так (это символ).Преобразование большого символа в частотную матрицу слов для Gephi в R

head(Tweet_text) 
[1] "habits that separates successful persons from mediocre persons habit success startup entrepreneurship"     
[2] "business entrepreneurship tech watch youtube star casey neistat ride a drone dressed as santa"   
[3] "how to beat procrastination work deadlines workculture productivity management hr hrd entrepreneurship" 
[4] "reading on entrepreneurship and startups and enjoying my latte"           
[5] "not a very nice way to encourage entrepreneurship and in the same sentence dog another company"   
[6] "us robotics founder on earlyday internet entrepreneurship articles management" 

структура выглядит следующим образом:

str(Tweet_text) 
chr [1:8661] "habits that separates successful persons from mediocre persons habit success startup entrepreneurship" ... 

В этом наборе данных выборки, у меня есть 8661 твитов. Теперь я хочу рассчитать попарные частоты слов во всех этих твитах, которые я могу экспортировать в Gephi. Конечный результат я ищу заключается в следующем:

+------------------------+--------------+------+ 
| term1     | term 2  | Freq | 
+------------------------+--------------+------+ 
| entrepreneurship  | startup  | 2 | 
+------------------------+--------------+------+ 

Так что я начал использовать функцию DocumentTermMatrix в пакете тм:

dtm <- DocumentTermMatrix(Corpus(VectorSource(Tweet_text))) 

Это работал (см ниже частоты «успеха» в первый твит):

inspect(dtm[1, c("success")]) 
<<DocumentTermMatrix (documents: 1, terms: 1)>> 
Non-/sparse entries: 1/0 
Sparsity   : 0% 
Maximal term length: 7 
Weighting   : term frequency (tf) 

    Terms 
Docs success 
    1  1 

После этого я пытался поставить эти частоты в нужном формате таблицы с:

m<-as.matrix(dtm) 
m[m>=1] <- 1 
m <- m %*% t(m) 
Dat_Freq <- as.data.frame(as.table(m)) 

Но теперь начинается первая проблема, что матрица слишком велика. Рядом с этим я не знаю, как я могу ограничить парно-словочастоты определенным значением. Для примера пара должна иметь частоту> 10, чтобы матрица не достигла больших значений.

Понравился бы ваш совет по этому вопросу, как я могу получить эти парные частоты в формате csv.

Все самое лучшее :)

ответ

1

Еще одна вещь, которую вы можете сделать, это использовать пакет tidytext.

Допустим, что ваши данные находятся в dataframe под названием tweets и text является соответствующая переменная

library(tidytext) 
library(dplyr) 

tweets %>% 
    unnest_tokens(bigram, text, token = "ngrams", n = 2) %>% 
    count(bigram, sort = TRUE) %>% 
    head(100) 

даст вам 100 самых частых биграмм. Конечно, было бы неплохо сначала удалить стоп-слова, поэтому взгляните на рецепты в Tidy text mining book

+0

Thanks Yannis P.! Раньше я не знал эту книгу, поэтому я обязательно ее проверю. Я прокомментирую, если найду решение :). И да, вы правы, мне нужно сначала очистить стоп-слова. –

+0

Нашел некоторое время, чтобы проверить, и библиотека tidytext отлично работает для парных частот слов! Спасибо, Яннис! –

+0

Кажется, это новый «переход» для обработки текста в R –

0

Я думаю, вы должны проверить библиотеку RWeka особенно функция NGramTokenizer(). Это позволит вам получить все парные слова. Затем вы должны использовать функцию findFreqTerms(), чтобы выбрать только термины> 10.

+0

Большое спасибо, я буду прямо проверять, работает ли это. :) –