data structures - Cómo encontrar frases comunes en un gran cuerpo de texto
data-structures graph (1)
Estoy trabajando en un proyecto en el momento en el que necesito seleccionar las frases más comunes en un gran cuerpo de texto. Por ejemplo, digamos que tenemos tres frases como la siguiente:
- El perro saltó sobre la mujer.
- El perro saltó al coche.
- El perro saltó las escaleras.
Del ejemplo anterior, me gustaría extraer " el perro saltó ", ya que es la frase más común en el texto. Al principio pensé, "oh, vamos a usar un gráfico dirigido [con nodos repetidos]":
gráfico dirigido http://img.skitch.com/20091218-81ii2femnfgfipd9jtdg32m74f.png
EDITAR : Disculpas, cometí un error al hacer este diagrama "sobre", "en" y "arriba", todos deberían vincularse de nuevo a "el".
Iba a mantener un recuento de cuántas veces aparecía una palabra en cada objeto de nodo ("el" sería 6; "perro" y "saltó", 3; etc.) pero a pesar de muchos otros problemas, surgió el principal cuando agregamos algunos ejemplos más (por favor, ignore la gramática incorrecta :-)):
- Perro saltó arriba y abajo.
- Perro saltó como ningún perro había saltado antes.
- Perro saltó alegremente.
Ahora tenemos un problema ya que " perro " iniciaría un nuevo nodo raíz (al mismo nivel que "el") y no identificaríamos " perro saltado ", ya que ahora es la frase más común. Así que ahora estoy pensando que tal vez podría usar un gráfico no dirigido para mapear las relaciones entre todas las palabras y eventualmente seleccionar las frases comunes, pero tampoco estoy seguro de cómo va a funcionar esto, ya que pierde la importante relación de orden entre las palabras.
Entonces, ¿alguien tiene alguna idea general sobre cómo identificar frases comunes en un gran cuerpo de texto y qué estructura de datos usaría?
Gracias ben
Echa un vistazo a esta pregunta relacionada: ¿Qué técnicas / herramientas existen para descubrir frases comunes en trozos de texto? También relacionado con el problema de subcadena común más largo .
He publicado esto antes, pero uso R para todas mis tareas de minería de datos y es muy adecuado para este tipo de análisis. En particular, mira el paquete tm
. Aquí hay algunos enlaces relevantes:
- Documento sobre el paquete en el Journal of Statistical Computing: . El documento incluye un buen ejemplo de un análisis de la lista de correo R-devel ( https://stat.ethz.ch/pipermail/r-devel/ ) publicaciones de grupos de noticias de 2006.
- Página de inicio del paquete: http://cran.r-project.org/web/packages/tm/index.html
- Mire la viñeta de introducción: http://cran.r-project.org/web/packages/tm/vignettes/tm.pdf
Más generalmente, hay una gran cantidad de paquetes de minería de texto en la vista Procesamiento de lenguaje natural en CRAN .