Crie uma frase net com R

8

Alguém conhece um pacote R ou tem uma maneira de criar redes de frases como essa? insira a descrição da imagem aqui

Tyler Rinker
fonte

Respostas:

5

Espero que isto faça sentido. Eu meio que juntei tudo, mas parece que é o que você quer fazer. Peguei alguns testes no hiperlink de recompensa acima. Ele mostrará as palavras que vêm depois de uma determinada palavra, bem como a proporção de vezes que esses resultados ocorreram. Isso não fará nada para a visualização, embora eu tenha certeza de que não seria impossível criar. Deve fazer a maior parte da matemática de fundo.

library(tau)

#this will load the string
x <- tokenize("Questions must be at least 2 days old to be eligible for a bounty. There can only be 1 active bounty per question at any given time. Users must have at least 75 reputation to offer a bounty, and may only have a maximum of 3 active bounties at any given time. The bounty period lasts 7 days. Bounties must have a minimum duration of at least 1 day. After the bounty ends, there is a grace period of 24 hours to manually award the bounty. If you do not award your bounty within 7 days (plus the grace period), the highest voted answer created after the bounty started with at least 2 upvotes will be awarded half the bounty amount. If there's no answer meeting that criteria, the bounty is not awarded to anyone. If the bounty was started by the question owner, and the question owner accepts an answer during the bounty period, and the bounty expires without an explicit award – we assume the bounty owner liked the answer they accepted and award it the full bounty amount at the time of bounty expiration. In any case, you will always give up the amount of reputation specified in the bounty, so if you start a bounty, be sure to follow up and award your bounty to the best answer! As an additional bonus, bounty awards are immune to the daily reputation cap and community wiki mode.")

#the number of tokens in the string
n <- length(x)

list <- NULL

count <- 1

#this will remove spaces, list is new string with no spaces
for (i in 1:n) {
  if (x[i] != " ") {
    list[count] <- x[i]
    count <- count + 1
  }
}

#the unique words in the string
y <- unique(list)

#number of tokens in the string
n <- length(list)
#number of distinct tokens
m <- length(y)


#assign tokens to values
ind <- NULL
val <- NULL
#make vector of numbers in place of tokens
for (i in 1:m) {
  ind[i] <- i
  for (j in 1:n) {
    if (y[i] == list[j]) {
      val[j] = i
    } 
  }
}


d <- array(0, c(m, m))

#this finds the number of count of the word after the current word
for (i in 1:(n-1)) {
   d[val[i], val[i+1]] <- d[val[i], val[i+1]] + 1
}

#pick a word
word <- 4

#show the word
y[word]
#[1] "at"

#the words that follow
y[which(d[word,] > 0)]
#[1] "least" "any"   "the" 

#the prob of words that follow
d[word,which(d[word,]>0)]/sum(d[word,])
#[1] 0.5714286 0.2857143 0.1428571
darrelkj
fonte
Isso está dando ótimos passos para um enredo que se parece mais com o acima. Na verdade, é a trama / visualização disso com a qual estou lutando. O gráfico é quase como uma nuvem de palavras (tamanho = frequência) e as setas são semelhantes a um sociograma na análise de rede, mas as setas transmitem significado, pois são um elo mais forte. Eu acho que o trabalho que você fez será útil para traçar as flechas. Na verdade, não estou muito familiarizado com a análise e visualização de rede, por isso preciso de muita ajuda aqui.
Tyler Rinker
1
Adicione isso ao final para obter um gráfico. No entanto, será claro que você provavelmente desejará filtrar as palavras de classificação mais baixa e usar apenas aquelas com um suporte maior. dd <- t (d) plotagem da biblioteca (diagrama) (dd [1:10, 1:10], tamanho da caixa = 0,05, nome = y [1:10], lwd = 2 * dd [1:10,] )
darrelkj 19/02/12
@ darrelkj Isso parece ser limitado a 10 palavras, mas acho que com um pouco de trabalho conectando-o a sociogramas ou algo assim, teríamos uma função bastante refinada. Estou marcando essa resposta como correta. darrelkj depois de tanto trabalho, você deve dar os retoques finais e jogá-lo em um pacote. Se você nos informar. Obrigado pela ajuda.
Tyler Rinker
Não é limitado a 10, eu simplesmente não queria usar toda a matriz. Os dez usados ​​aqui também são mal escolhidos.
21412 Darrelkj
Eu estou corrigido. Eu tinha cometido um erro no código quando tentei e, portanto, obtive um erro fora dos limites. Você está bem correto.
Tyler Rinker
1

Você pode criar redes de frases com o Many Eyes , que é o tipo de casa "oficial" dessa técnica de visualização. Lá, você pode enviar seus dados (provavelmente um corpo de texto), escolher "Phrase Net" como a técnica de visualização e obter o que está procurando.

De fato, sua ilustração vem da página Phrase Net em Many Eyes .

Carlos Accioly
fonte
1
Sim, eu percebo isso, mas eu esperava fazê-lo em R por causa da flexibilidade. Você pode alterar todos os tipos de parâmetros para representar melhor os dados que não pode com o Many Eyes.
Tyler Rinker
1

Você pode usar o pacote igraphpara criar e plotar um gráfico, com controle sobre todos os aspectos. Os pacotes graphe Rgraphviztrabalham juntos para definir e plotar gráficos. Ambas as opções oferecem muito controle. ( graphviztambém é um pacote independente, onde você pode usar todos os tipos de software para gerar o gráfico e graphvizexibi-lo.)

Obviamente, você precisa processar seus dados em um gráfico, fazendo algo como o @darrelkj sugere.

Wayne
fonte