Saludos con todos.Realmente soy un novato con respecto al mineo de textos, entiendo el concepto, pero no he hecho mucho sobre el tema.Tengo una tarea, que me parece compleja, pero creo que se puede hacer de una manera optima:En resumen lo que tengo que hacer, es asignar un código a unos datos: el problema es que por un lado tengo una columna de nombres, y a estos les debo asignarel código, y por el otro lado tengo 2 columnas, el código y el nombre. Como verán, tengo que hacer un match por nombre, el problema es que los nombres no necesariamente son los mismos, estos contienen abreviaciones, puntuaciones, etc. Al hacer el match, no se me cruza casi nada.Mi pregunta es, cómo hacer algo como lo que hace el help de R, que realiza una búsqueda difusa o una especie de match pero no exacto. Les pongo un ejemplo: dat Aautomovilbicicleta montañerapatinetabicicleta de pista dat B codigo Bautomovil 01bicicleta 02avion 03tren 04camion 05 lo que tengo que hacer es un cruse de todos contra todos y sacar una estadistica de similitud y en base a los valores altos de similitud, asignar el codigo dat A | dat B | similitud (%)automovil | automovil 1automovil | bicicleta 0automovil | avion 0automovil | tren 0bicicleta montañera | automovil | 0bicicleta montañera | bicicleta | 0,85...bicicleta de pista | bicicleta | 0,80...etc no se cual función me hace esa comparación y me vota un valor de coincidencia.Gracias.Saludos [[alternative HTML version deleted]]
Quizás esto pueda ayudarte: http://rwiki.sciviews.org/doku.php?id=tips:data-strings:levenshtein Es una implementación en R del algoritmo para calcular la distancia de Levenshtein (http://es.wikipedia.org/wiki/Distancia_de_Levenshtein). Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El día 17 de febrero de 2011 23:28, Patricio Fuenmayor Viteri <cpfuenmayor en hotmail.com> escribió:> > Saludos con todos.Realmente soy un novato con respecto al mineo de textos, entiendo el concepto, pero no he hecho mucho sobre el tema.Tengo una tarea, que me parece compleja, pero creo que se puede hacer de una manera optima:En resumen lo que tengo que hacer, es asignar un código a unos datos: el problema es que por un lado tengo una columna de nombres, y a estos les debo asignarel código, y por el otro lado tengo 2 columnas, el código y el nombre. Como verán, tengo que hacer un match por nombre, el problema es que los nombres no necesariamente son los mismos, estos contienen abreviaciones, puntuaciones, etc. Al hacer el match, no se me cruza casi nada.Mi pregunta es, cómo hacer algo como lo que hace el help de R, que realiza una búsqueda difusa o una especie de match pero no exacto. Les pongo un ejemplo: > dat Aautomovilbicicleta montañerapatinetabicicleta de pista > dat B codigo Bautomovil 01bicicleta 02avion 03tren 04camion 05 > lo que tengo que hacer es un cruse de todos contra todos y sacar una estadistica de similitud y en base a los valores altos de similitud, asignar el codigo > dat A | dat B | similitud (%)automovil | automovil 1automovil | bicicleta 0automovil | avion 0automovil | tren 0bicicleta montañera | automovil | 0bicicleta montañera | bicicleta | 0,85...bicicleta de pista | bicicleta | 0,80...etc > no se cual función me hace esa comparación y me vota un valor de coincidencia.Gracias.Saludos > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >
Hola Patricio, Para hacer el cruce que quieres, lo primero que tienes que resolver es el problema de los nombres, que es por lo que realmente pareces preguntar. Este problema lo puedes resolver de varias maneras, entre ellas se me ocurren las siguientes: 1. El fichero de datos lo pre-procesas antes de cargarlo en R. Con procesarlo me refiero a que resuelves estos problemas con los nombres: sustituyes espacio, caracteres intermedios, medias-palabras por el nombre que corresponde. Para esta labor tienes muchos mecanismos; por ejemplo de forma muy general e independientemente del Sistema Operativo que utilices, los editores de ficheros que suelen tener esta posibilidad de búsqueda y sustitución. Si utilizas Linux/Unix también tienes posibilidades a través de la línea de comandos con múltiples funciones (sed, awk, grep, etc, etc). Recientemente también Google (como no), hizo pública una herramienta con este propósito específico: http://code.google.com/p/google-refine/ 2. La segunda opción es que esta labor de "limpieza" la hagas completamente en R. Para ello tendrás que utilizar de forma bastante intensiva las funciones para tratar las cadenas de texto. Pero entre ellas, que a veces son un tanto peculiares (por el uso de expresiones regulares), ha aparecido una muy sencilla de usar que es "stringr". Aquí tienes una breve descripción de su uso y funcionalidades: http://journal.r-project.org/archive/2010-2/RJournal_2010-2_Wickham.pdf Saludos, Carlos Ortega www.qualityexcellence.es www.datanalytics.com/blog 2011/2/17 Patricio Fuenmayor Viteri <cpfuenmayor@hotmail.com>> > Saludos con todos.Realmente soy un novato con respecto al mineo de textos, > entiendo el concepto, pero no he hecho mucho sobre el tema.Tengo una tarea, > que me parece compleja, pero creo que se puede hacer de una manera optima:En > resumen lo que tengo que hacer, es asignar un código a unos datos: el > problema es que por un lado tengo una columna de nombres, y a estos les debo > asignarel código, y por el otro lado tengo 2 columnas, el código y el > nombre. Como verán, tengo que hacer un match por nombre, el problema es que > los nombres no necesariamente son los mismos, estos contienen abreviaciones, > puntuaciones, etc. Al hacer el match, no se me cruza casi nada.Mi pregunta > es, cómo hacer algo como lo que hace el help de R, que realiza una búsqueda > difusa o una especie de match pero no exacto. Les pongo un ejemplo: > dat Aautomovilbicicleta montañerapatinetabicicleta de pista > dat B codigo Bautomovil 01bicicleta 02avion 03tren > 04camion 05 > lo que tengo que hacer es un cruse de todos contra todos y sacar una > estadistica de similitud y en base a los valores altos de similitud, asignar > el codigo > dat A | dat B | similitud (%)automovil | automovil 1automovil | > bicicleta 0automovil | avion 0automovil | tren > 0bicicleta montañera | automovil | 0bicicleta montañera | bicicleta | > 0,85...bicicleta de pista | bicicleta | 0,80...etc > no se cual función me hace esa comparación y me vota un valor de > coincidencia.Gracias.Saludos > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >[[alternative HTML version deleted]]
Buenas. A lo que comenta Carlos, yo añadiría que dieras un vistazo a alguno de los paquetes de text mining, como tm, que contiene funciones útiles de limpieza y tal vez también necesites Rstem o Snowball para hacer stemming, es decir, quedarte con la raíz de cada palabra eliminando plurales, tiempos verbales y ese tipo de variantes. En un día o dos pondré un ejemplo en mi blog y puedes ver ejemplos del uso de expresiones regulares para extraer ciertos tipos de información en este post: http://www.grserrano.es/wp/2011/02/analizando-tuits-en-r-parte-2/ Un saludo Gregorio R. Serrano El 18 de febrero de 2011 09:46, Carlos Ortega <coforfe@gmail.com> escribió:> Hola Patricio, > > Para hacer el cruce que quieres, lo primero que tienes que resolver es el > problema de los nombres, que es por lo que realmente pareces preguntar. > > Este problema lo puedes resolver de varias maneras, entre ellas se me > ocurren las siguientes: > 1. El fichero de datos lo pre-procesas antes de cargarlo en R. Con > procesarlo me refiero a que resuelves estos problemas con los nombres: > sustituyes espacio, caracteres intermedios, medias-palabras por el nombre > que corresponde. > Para esta labor tienes muchos mecanismos; por ejemplo de forma muy general > e > independientemente del Sistema Operativo que utilices, los editores de > ficheros que suelen tener esta posibilidad de búsqueda y sustitución. Si > utilizas Linux/Unix también tienes posibilidades a través de la línea de > comandos con múltiples funciones (sed, awk, grep, etc, etc). > Recientemente también Google (como no), hizo pública una herramienta con > este propósito específico: > http://code.google.com/p/google-refine/ > > 2. La segunda opción es que esta labor de "limpieza" la hagas completamente > en R. > Para ello tendrás que utilizar de forma bastante intensiva las funciones > para tratar las cadenas de texto. Pero entre ellas, que a veces son un > tanto > peculiares (por el uso de expresiones regulares), ha aparecido una muy > sencilla de usar que es "stringr". Aquí tienes una breve descripción de su > uso y funcionalidades: > http://journal.r-project.org/archive/2010-2/RJournal_2010-2_Wickham.pdf > > Saludos, > Carlos Ortega > www.qualityexcellence.es > www.datanalytics.com/blog > > 2011/2/17 Patricio Fuenmayor Viteri <cpfuenmayor@hotmail.com> > > > > > Saludos con todos.Realmente soy un novato con respecto al mineo de > textos, > > entiendo el concepto, pero no he hecho mucho sobre el tema.Tengo una > tarea, > > que me parece compleja, pero creo que se puede hacer de una manera > optima:En > > resumen lo que tengo que hacer, es asignar un código a unos datos: el > > problema es que por un lado tengo una columna de nombres, y a estos les > debo > > asignarel código, y por el otro lado tengo 2 columnas, el código y el > > nombre. Como verán, tengo que hacer un match por nombre, el problema es > que > > los nombres no necesariamente son los mismos, estos contienen > abreviaciones, > > puntuaciones, etc. Al hacer el match, no se me cruza casi nada.Mi > pregunta > > es, cómo hacer algo como lo que hace el help de R, que realiza una > búsqueda > > difusa o una especie de match pero no exacto. Les pongo un ejemplo: > > dat Aautomovilbicicleta montañerapatinetabicicleta de pista > > dat B codigo Bautomovil 01bicicleta 02avion 03tren > > 04camion 05 > > lo que tengo que hacer es un cruse de todos contra todos y sacar una > > estadistica de similitud y en base a los valores altos de similitud, > asignar > > el codigo > > dat A | dat B | similitud (%)automovil | automovil 1automovil | > > bicicleta 0automovil | avion 0automovil | tren > > 0bicicleta montañera | automovil | 0bicicleta montañera | bicicleta | > > 0,85...bicicleta de pista | bicicleta | 0,80...etc > > no se cual función me hace esa comparación y me vota un valor de > > coincidencia.Gracias.Saludos > > > > [[alternative HTML version deleted]] > > > > > > _______________________________________________ > > R-help-es mailing list > > R-help-es@r-project.org > > https://stat.ethz.ch/mailman/listinfo/r-help-es > > > > > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Dr. Gregorio R. Serrano Dpto. Economía Cuantitativa (UCM) Voz:+34 91394 2361 Fax:+34 91394 2591 http://www.grserrano.es [[alternative HTML version deleted]]
A riesgo de ser pesado, he colgado el post sobre análisis de tuits que comentaba, tal vez encuentres cosas útiles ahí. http://www.grserrano.es/wp/2011/02/analizando-tuits-en-r-parte-3/ Un saludo Gregorio R. Serrano El 17 de febrero de 2011 23:28, Patricio Fuenmayor Viteri < cpfuenmayor@hotmail.com> escribió:> > Saludos con todos.Realmente soy un novato con respecto al mineo de textos, > entiendo el concepto, pero no he hecho mucho sobre el tema.Tengo una tarea, > que me parece compleja, pero creo que se puede hacer de una manera optima:En > resumen lo que tengo que hacer, es asignar un código a unos datos: el > problema es que por un lado tengo una columna de nombres, y a estos les debo > asignarel código, y por el otro lado tengo 2 columnas, el código y el > nombre. Como verán, tengo que hacer un match por nombre, el problema es que > los nombres no necesariamente son los mismos, estos contienen abreviaciones, > puntuaciones, etc. Al hacer el match, no se me cruza casi nada.Mi pregunta > es, cómo hacer algo como lo que hace el help de R, que realiza una búsqueda > difusa o una especie de match pero no exacto. Les pongo un ejemplo: > dat Aautomovilbicicleta montañerapatinetabicicleta de pista > dat B codigo Bautomovil 01bicicleta 02avion 03tren > 04camion 05 > lo que tengo que hacer es un cruse de todos contra todos y sacar una > estadistica de similitud y en base a los valores altos de similitud, asignar > el codigo > dat A | dat B | similitud (%)automovil | automovil 1automovil | > bicicleta 0automovil | avion 0automovil | tren > 0bicicleta montañera | automovil | 0bicicleta montañera | bicicleta | > 0,85...bicicleta de pista | bicicleta | 0,80...etc > no se cual función me hace esa comparación y me vota un valor de > coincidencia.Gracias.Saludos > > [[alternative HTML version deleted]] > > > _______________________________________________ > R-help-es mailing list > R-help-es@r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es > >-- Dr. Gregorio R. Serrano Dpto. Economía Cuantitativa (UCM) Voz:+34 91394 2361 Fax:+34 91394 2591 http://www.grserrano.es [[alternative HTML version deleted]]