Crea una frase net con R

Respuestas:

5

Espero que esto tenga sentido. Lo uní, pero parece que es lo que quieres hacer. Tomé alguna prueba del hipervínculo de recompensa anterior. Mostrará las palabras que vienen después de una palabra determinada, así como la proporción de veces que ocurrieron estos resultados. Esto no hará nada para la visualización, aunque estoy seguro de que no sería imposible de crear. Debería hacer la mayor parte de las matemáticas de fondo.

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
fuente
Esto está haciendo algunos grandes avances hacia una trama que se parece más a lo anterior. En realidad, es la trama / visualización de esto con lo que estoy luchando. La trama es casi como una nube de palabras (tamaño = frecuencia) y las flechas son similares a un sociograma en el análisis de redes, pero las flechas transmiten significado en el sentido de que son un enlace más fuerte. Creo que el trabajo que hiciste será útil para trazar las flechas. En realidad, no estoy muy familiarizado con el análisis y la visualización de redes, por lo que necesito mucha ayuda aquí.
Tyler Rinker
1
Agregue esto al final para obtener un gráfico. Sin embargo, será simple, probablemente querrás filtrar las palabras de menor rango y solo usar aquellas con un soporte más grande. dd <- t (d) biblioteca (diagrama) plotmat (dd [1:10, 1:10], box.size = 0.05, nombre = y [1:10], lwd = 2 * dd [1:10,] )
darrelkj
@ darrelkj Esto parece estar limitado a 10 palabras, pero creo que con un poco de trabajo para conectarlo a los sociogramas o algo así tendríamos una función bastante pulida. Estoy marcando esta respuesta como correcta. darrelkj después de tanto trabajo deberías darle los toques finales a esto y tirarlo a un paquete. Si lo haces, avísanos. Gracias por tu ayuda.
Tyler Rinker
No está limitado a 10, simplemente no quería usar toda la matriz. Los diez utilizados aquí están mal elegidos también.
darrelkj
Estoy corregido. Cometí un error en el código cuando lo probé y, por lo tanto, obtuve un error fuera de límites. Tienes toda la razón.
Tyler Rinker
1

Puede crear redes de frases con Many Eyes , que es el hogar "oficial" de esta técnica de visualización. Allí puede cargar sus datos (que probablemente sea un cuerpo de texto), elegir "Phrase Net" como técnica de visualización y obtener lo que está buscando.

De hecho, su ilustración proviene de la página de Phrase Net en Many Eyes .

Carlos Accioly
fuente
1
Sí, me doy cuenta de esto, pero esperaba hacerlo en R debido a la flexibilidad. Podrías alterar todo tipo de parámetros para representar mejor los datos que no puedes con Many Eyes.
Tyler Rinker
1

Puede usar el paquete igraphpara hacer y trazar un gráfico, con control sobre todos los aspectos. Los paquetes graphy Rgraphviztrabajan juntos para definir y trazar gráficos. Ambas opciones proporcionan mucho control. ( graphviztambién es un paquete independiente, donde puede usar todo tipo de software para generar el gráfico y graphvizmostrarlo).

Por supuesto, debe procesar sus datos en un gráfico, haciendo algo como sugiere @darrelkj.

Wayne
fuente