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í.
Creo que lo que estás buscando es hacer pedazos . Recomendé leer el capítulo 7 del libro NLTK o tal vez mi propio artículo sobre extracción de trozos . Ambos asumen el conocimiento del etiquetado de parte del discurso, que se trata en el capítulo 5 .
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)