data-structures graph data-mining text-analysis

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:

Más generalmente, hay una gran cantidad de paquetes de minería de texto en la vista Procesamiento de lenguaje natural en CRAN .