utilizando tutorial textos texto sentimientos procesamiento natural mineria lenguaje español con automático análisis analisis python text nlp nltk

tutorial - procesamiento de lenguaje natural python



detectar alusiones(por ejemplo, coincidencias muy difusas) en el lenguaje de las direcciones inaugurales (1)

Si te sientes inspirado para usar bigrams, puedes construir tus bigrams y, al mismo tiempo, dejar huecos de una, dos o incluso tres palabras para aflojar un poco la definición de bigram. Esto podría funcionar, ya que permitir n huecos significa ni siquiera n veces más "bigrams", y su corpus es bastante pequeño. Con esto, por ejemplo, un "bigram" de su primer párrafo podría ser (similar, inaugurals) .

Estoy tratando de desarrollar un guión de Python para examinar cada oración en el segundo discurso inaugural de Barack Obama y encontrar oraciones similares en pasadas inauguraciones. He desarrollado una combinación difusa muy cruda, y espero mejorarla.

Comienzo por reducir todas las notas inaugurales a listas de oraciones sin palabras intermedias. Luego construyo un índice de frecuencia.

Luego, comparo cada oración en la dirección de 2013 de Obama con cada oración de cada otra dirección, y evalúo la similitud de esta manera:

#compare two lemmatized sentences. Assumes stop words already removed. frequencies is dict of frequencies across all inaugural def compare(sentA, sentB, frequencies): intersect = [x for x in sentA if x in sentB] N = [frequencies[x] for x in intersect] #calculate sum that weights uncommon words based on frequency inaugurals n = sum([10.0 / (x + 1) for x in N]) #ratio of matches to total words in both sentences. (John Adams and William Harrison both favored loooooong sentences that tend to produce matches by sheer probability.) c = float(len(intersect)) / (len(sentA) + len(sentB)) return (intersect, N, n, c)

Por último, filtrar los resultados en función de los umbrales arbitrarios para n y c.

Funciona mejor de lo que uno podría pensar, identificando oraciones que comparten palabras poco comunes en una proporción no despreciable de palabras totales.

Por ejemplo, recogió estos partidos:

Obama, 2013: porque la historia nos dice que si bien estas verdades pueden ser evidentes por sí mismas, nunca han sido autoejecutables; que si bien la libertad es un regalo de Dios, debe ser asegurada por su pueblo aquí en la Tierra.

Kennedy, 1961: Con una buena conciencia, nuestra única recompensa segura, con la historia como el juez final de nuestras acciones, sigamos adelante para dirigir la tierra que amamos, pidiéndole su bendición y su ayuda, pero sabiendo que aquí en la tierra el trabajo de Dios debe verdaderamente ser nuestro

Obama, 2013 A través de la sangre extraída con latigazos y con sangre extraída a espada, aprendimos que ninguna unión fundada en los principios de la libertad y la igualdad podría sobrevivir a la mitad de los esclavos y a medias libres.

Lincoln, 1861 Sin embargo, si Dios quiere que continúe hasta que se haya hundido toda la riqueza acumulada por los doscientos cincuenta años de esclavitud no correspondida del esclavo, y hasta que cada gota de sangre arrastrada con el látigo sea pagada por otro sacado con la espada , como se dijo hace tres mil años, aún así debe decirse que "los juicios del Señor son verdaderos y justos por completo".

Obama, 2013 Esta generación de estadounidenses ha sido probada por crisis que reforzaron nuestra determinación y demostraron nuestra capacidad de recuperación

Kennedy, 1961 Desde que se fundó este país, cada generación de estadounidenses ha sido convocada para dar testimonio de su lealtad nacional.

Pero es muy crudo.

No tengo las habilidades para un gran proyecto de aprendizaje automático, pero sí quiero aplicar más teoría si es posible. Entiendo que bigram busque, pero no estoy seguro de que funcione aquí; no nos interesan tanto las bifurcaciones exactas como la proximidad general de dos palabras que se comparten entre comillas. ¿Hay una comparación de oraciones difusas que analiza la probabilidad y la distribución de palabras sin ser demasiado rígido? La naturaleza de la alusión es que es muy aproximada.

Esfuerzo actual disponible en Cloud9IDE

ACTUALIZACIÓN, 24/1/13 Según la respuesta aceptada, aquí hay una función simple de Python para bigram windows:

def bigrams(tokens, blur=1): grams = [] for c in range(len(tokens) - 1): for i in range(c + 1, min(c + blur + 1, len(tokens))): grams.append((tokens[c], tokens[i])) return grams