Cómo calcular la proximidad de palabras a un término específico en un documento

Estoy tratando de encontrar una manera de calcular las proximidades de palabras a un término específico en un documento, así como la proximidad promedio (por palabra). Sé que hay preguntas similares sobre SO, pero nada que me dé la respuesta que necesito o incluso me señale algún lugar útil. Entonces digamos que tengo el siguiente texto:

song <- "Far over the misty mountains cold To dungeons deep and caverns old We 
must away ere break of day To seek the pale enchanted gold. The dwarves of 
yore made mighty spells, While hammers fell like ringing bells In places deep, 
where dark things sleep, In hollow halls beneath the fells. For ancient king 
and elvish lord There many a gleaming golden hoard They shaped and wrought, 
and light they caught To hide in gems on hilt of sword. On silver necklaces 
they strung The flowering stars, on crowns they hung The dragon-fire, in 
twisted wire They meshed the light of moon and sun. Far over the misty 
mountains cold To dungeons deep and caverns old We must away, ere break of 
day, To claim our long-forgotten gold. Goblets they carved there for 
themselves And harps of gold; where no man delves There lay they long, and 
many a song Was sung unheard by men or elves. The pines were roaring on the 
height, The winds were moaning in the night. The fire was red, it flaming 
spread; The trees like torches blazed with light. The bells were ringing in 
the dale And men they looked up with faces pale; The dragon’s ire more fierce 
than fire Laid low their towers and houses frail. The mountain smoked beneath 
the moon; The dwarves they heard the tramp of doom. They fled their hall to 
dying fall Beneath his feet, beneath the moon. Far over the misty mountains 
grim To dungeons deep and caverns dim We must away, ere break of day,
To win our harps and gold from him!"

Quiero poder ver qué palabras aparecen dentro de 15 (me gustaría que este número sea intercambiable) palabras a cada lado (15 a la izquierda y 15 a la derecha) de la palabra "fuego" (también intercambiable) cada vez que aparece. Quiero ver cada palabra y la cantidad de veces que aparece en este lapso de 15 palabras para cada instancia de "fuego". Entonces, por ejemplo, "fuego" se usa 3 veces. De esas 3 veces, la palabra "luz" cae dentro de 15 palabras a cada lado dos veces. Me gustaría una tabla que muestre la palabra, la cantidad de veces que aparece dentro de la proximidad especificada de 15, la distancia máxima (que en este caso es 12), la distancia mínima (que es 7) y la distancia promedio (que es 9.5).

Pensé que necesitaría varios pasos y paquetes para que esto funcione. Mi primer pensamiento fue utilizar la función "kwic" de quanteda, ya que le permite elegir una "ventana" alrededor de un término específico. Luego, un recuento de frecuencia de términos basados en los resultados de kwic no es tan difícil (con las palabras vacías eliminadas para la frecuencia, pero no para la medida de proximidad de palabras). Mi verdadero problema es encontrar las distancias máximas, mínimas y promedio desde el término de enfoque y luego obtener los resultados en una buena tabla ordenada con los términos como filas en orden descendente por frecuencia y las columnas que me dan el conteo de frecuencia, la distancia máxima, el mínimo distancia y distancia promedio.

Esto es lo que tengo hasta ahora:

library(quanteda)
library(tm)

mysong <- char_tolower(song)

toks <- tokens(mysong, remove_hyphens = TRUE, remove_punct = TRUE, 
remove_numbers = TRUE, remove_symbols = TRUE)

mykwic <- kwic(toks, "fire", window = 15, valuetype ="fixed")
thekwic <- as.character(mykwic)

thekwic <- removePunctuation(thekwic)
thekwic <- removeNumbers(thekwic)
thekwic <- removeWords(thekwic, stopwords("en"))

kwicFreq <- termFreq(thekwic)

Cualquier ayuda es muy apreciada.

Respuestas a la pregunta(2)

Su respuesta a la pregunta