textmining spanish español nlp text-extraction nltk text-analysis

nlp - spanish - text mining python español



Cómo extraer frases comunes/significativas de una serie de entradas de texto (4)

Bueno, para empezar, probablemente tendría que eliminar todas las etiquetas HTML (busque "<[^>] *>" y sustitúyalo por ""). Después de eso, podría probar el enfoque ingenuo de buscar las subcadenas comunes más largas entre cada dos elementos de texto, pero no creo que obtendría muy buenos resultados. Puede hacerlo mejor normalizando las palabras (reduciéndolas a su forma base, eliminando todos los acentos, configurando todo en minúsculas o mayúsculas) primero y luego analice. Nuevamente, dependiendo de lo que quiera lograr, puede agrupar mejor los elementos de texto si permite cierta flexibilidad en el orden de las palabras, es decir, trata los elementos de texto como bolsas de palabras normalizadas y mide la similitud del contenido de la bolsa.

He comentado sobre un tema similar (aunque no idéntico) here .

Tengo una serie de elementos de texto: HTML sin formato de una base de datos MySQL. Quiero encontrar las frases más comunes en estas entradas (no es la frase más común, e idealmente, no hacer cumplir la correspondencia palabra por palabra).

Mi ejemplo es cualquier comentario en Yelp.com, que muestra 3 fragmentos de cientos de comentarios de un restaurante determinado, en el formato:

"Prueba la hamburguesa" (en 44 opiniones)

Por ejemplo, la sección "Aspectos destacados de la revisión" de esta página:

http://www.yelp.com/biz/sushi-gen-los-angeles/

He instalado NLTK y he jugado un poco con él, pero sinceramente estoy abrumado por las opciones. Esto parece ser un problema bastante común y no he podido encontrar una solución sencilla buscando aquí.



Si solo quieres llegar a más de 3 ngrams, puedes intentar esto. Supongo que has eliminado todos los basura como html, etc.

import nltk ngramlist=[] raw=<yourtextfile here> x=1 ngramlimit=6 tokens=nltk.word_tokenize(raw) while x <= ngramlimit: ngramlist.extend(nltk.ngrams(tokens, x)) x+=1

Probablemente no sea muy pitón, ya que solo he estado haciendo esto por un mes o algo así, ¡pero podría ser de ayuda!


Sospecho que no solo quieres las frases más comunes, sino las colocaciones más interesantes. De lo contrario, podría terminar con una representación excesiva de frases compuestas de palabras comunes y menos frases interesantes e informativas.

Para hacer esto, esencialmente querrá extraer n-gramas de sus datos y luego encontrar los que tienen la información mutua (PMI) más puntual . Es decir, desea encontrar las palabras que coexisten juntas mucho más de lo que esperaría por casualidad.

Las instrucciones de uso de NLTK collocations cubren cómo hacer esto en aproximadamente 7 líneas de código, por ejemplo:

import nltk from nltk.collocations import * bigram_measures = nltk.collocations.BigramAssocMeasures() trigram_measures = nltk.collocations.TrigramAssocMeasures() # change this to read in your data finder = BigramCollocationFinder.from_words( nltk.corpus.genesis.words(''english-web.txt'')) # only bigrams that appear 3+ times finder.apply_freq_filter(3) # return the 10 n-grams with the highest PMI finder.nbest(bigram_measures.pmi, 10)