Minería de texto: encuentre una palabra dada, luego obtenga las palabras a cada lado de ella<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Estoy tratando de extraer texto en comentarios ingresados manualmente. Afortunadamente hay algo de un patrón. Dentro de las primeras 10 palabras, si aparece la palabra "to", las palabras a cada lado de "to" son las palabras que quiero.
He dado el pequeño paso de crear una columna de Expresión con la fórmula: Palabras[Comentarios]. Ha devuelto una lista de las palabras de la columna de Comentarios - muy bien.
Entonces, ¿qué debo hacer a continuación para encontrar si "to" aparece en las primeras diez palabras y, de ser así, tomar las palabras a ambos lados de "to"?
Re: Minería de texto: encuentre una palabra dada, luego obtenga las palabras a cada lado de ella¡Gracias a todos! Perdón por la respuesta tardía, estaba ocupado haciendo la extracción de texto para una reunión anual que acaba de terminar.
Entonces, usé el enfoque de la fórmula de Jeff porque no tenía mucho tiempo para hacer algo realmente elegante. Ahora, tengo tiempo para aprender expresiones regulares. Desarrollaré una solución con guión para este análisis para que pueda hacerlo rápidamente el próximo año.
La limpieza de datos/extracción de información fue la parte desordenada de este trabajo. La fórmula ayudó a encontrar lo que estaba buscando. Pero, todavía tenía que trabajar mucho en Columnas > recodificar ¡Felicitaciones a aquellos que lo hicieron tan poderoso en JMP12!
Por cierto, la minería de texto sería un excelente seminario web de Mastering JMP .
Re: Minería de texto: encuentre una palabra dada, luego obtenga las palabras a cada lado de ellaSi lo he dicho una vez, lo he dicho un millón de veces.Si va a hacer cualquier cantidad de minería de texto, valdría la pena dedicar una hora a aprender expresiones regulares.Toneladas de excelentes videos de YouTube e incluso hay una muy buena sección sobre ellos en la Guía de secuencias de comandos.
texto = "Texto de ejemplo para la pregunta". ;
respuesta 1 = expresiones regulares ( texto , "(\w+) a (\w+)" , "\1" ) ;
respuesta2 = expresiones regulares ( texto , "(\w+) a (\w+)" , "\2" ) ;
responder = expresiones regulares ( texto , "(\w+) a (\w+)" , "\1" || ", " || "\2" ) ;
impresión ( respuesta 1 ) ;
impresión ( respuesta2 ) ;
impresión ( responder ) ;
producción:
"texto"
"la"
"texto, el"
Re: Minería de texto: encuentre una palabra dada, luego obtenga las palabras a cada lado de ellaIan@JMP tiene un buen ejemplo con guión.
Si desea hacerlo en una fórmula de columna, se verá así.

Esta fórmula utiliza un Variable local para mantener la posición del "a".
Adjunté una tabla de datos con una columna con esta fórmula para mostrar cómo funciona.
NB: Si aparece "to" en la posición 10, le dará las palabras 9 y 11. Si eso no es lo que desea, deberá agregar una condición adicional dentro de If().
Re: Minería de texto: encuentre una palabra dada, luego obtenga las palabras a cada lado de ellaSin ser demasiado elegante, ¿tal vez algo como esto? El segundo da '{}' porque la última 'palabra' es 'to'. No a'. Pero podría codificar eso si es necesario.
Nombres predeterminados a aquí ( 1 ) ;
palabras que soporte a =
Función ({ calle } , { Local predeterminado } ,
strPalabras = Palabras ( calle ) ;
toPos = ubicación ( strPalabras , "a" ) ;
palabras requeridas = {} ;
si ( toPos <= 10 ,
si ( toPos > 1 , Insertar en ( palabras requeridas , strPalabras [ toPos - 1 ])) ;
si ( toPos < Nartículos ( strPalabras ) , Insertar en ( palabras requeridas , strPalabras [ toPos + 1 ])) ;
) ;
EvalList ( palabras requeridas ) ;
) ;
texto de ejemplo = "Aquí hay una frase que no contiene demasiadas veces". ;
Impresión ( palabras que soporte para ( texto de ejemplo )) ;
texto de ejemplo = "Aquí hay una frase que sí contiene to". ;
Impresión ( palabras que soporte a ( texto de ejemplo )) ;