textos tecnicas software para herramientas español data big analisis algorithm text nlp analysis lexical-analysis

algorithm - tecnicas - Algoritmos o bibliotecas para el análisis textual, específicamente: palabras dominantes, frases en el texto y colección de texto



software para analisis de textos en español (7)

También me gustaría ver si hay una forma de identificar frases importantes. (En lugar de contar una palabra, el recuento de una frase es de 2 a 3 palabras juntas)

Esta parte de su problema se denomina extracción de ubicación . (Al menos, si considera que las "frases importantes" son frases que aparecen significativamente más a menudo que por casualidad). Respondí en otra pregunta sobre ese subproblema específico.

Estoy trabajando en un proyecto en el que necesito analizar una página de texto y colecciones de páginas de texto para determinar las palabras dominantes. Me gustaría saber si hay una biblioteca (prefiero c # o java) que manejará el trabajo pesado para mí. Si no, ¿hay algún algoritmo o múltiple que logre mis objetivos a continuación?

Lo que quiero hacer es similar a las nubes de palabras creadas a partir de una fuente de URL o RSS que encuentre en la web, excepto que no quiero la visualización. Se utilizan todo el tiempo para analizar los discursos de los candidatos presidenciales para ver cuál es el tema o las palabras más usadas.

La complicación es que necesito hacer esto en miles de documentos cortos, y luego colecciones o categorías de estos documentos.

Mi plan inicial era analizar el documento, luego filtrar palabras comunes: de, el, ella, etc. Luego, cuente el número de veces que las palabras restantes aparecen en el texto (y la colección / categoría general).

El problema es que, en el futuro, me gustaría manejar formas derivadas, plurales, etc. También me gustaría ver si hay una manera de identificar frases importantes. (En lugar de contar una palabra, el recuento de una frase es de 2 a 3 palabras juntas)

Se aprecia cualquier orientación sobre una estrategia, bibliotecas o algoritmos que ayuden.


Bien. Entonces, tienes un documento que contiene texto y una colección de documentos (un corpus). hay muchas maneras de hacer esto.

Yo sugeriría usar el motor Lucene (Java) para indexar sus documentos. Lucene admite una estructura de datos (índice) que contiene una cantidad de documentos. Un documento en sí mismo es una estructura de datos que puede contener "campos", por ejemplo, autor, título, texto, etc. Puede elegir qué campos están indexados y cuáles no.

Agregar documentos a un índice es trivial . Lucene también está diseñado para la velocidad y puede escalar magníficamente.

A continuación, desea averiguar los términos y las frecuencias. Como lucene ya lo ha calculado durante el proceso de indexación, puede usar la función docFreq y crear su propia función de frecuencia de términos, o usar la función getTermFreqVectors de la clase IndexReader para obtener los términos (y frecuencias de los mismos).

Ahora depende de usted cómo ordenarlo y qué criterios desea usar para filtrar las palabras que desea. Para averiguar las relaciones, puede usar una API de Java para la biblioteca de código abierto de wordnet. Para contener palabras, usa la clase PorterStemFilter de Lucene. La parte de la frase de la frase es más complicada, pero una vez que has llegado hasta aquí, puedes buscar consejos sobre cómo integrar la búsqueda de n-gramas en Lucene (hint) .

¡Buena suerte!


Para agregar a la respuesta de Robert Elwell:

  • derivación y colapso de formas de palabras. Un método simple en inglés es usar Porter Stemming en las formas de palabras de caja inferior.
  • un término para las "palabras comunes" es "detener palabra" o "detener lista"
  • Leer el libro NLTK como se sugiere explicará bien muchos de estos temas introductorios.
  • algunos de los problemas que tiene que abordar son analizar oraciones (para que sus frases bigrams y n-gramas no crucen los límites de las oraciones), dividir oraciones en tokens y decidir qué hacer con las formas posesivas, por ejemplo.

Nada de esto está claro, ni tiene "respuestas correctas". Ver también las etiquetas SO "nlp" y "lenguaje natural".

¡Buena suerte! Este es un proyecto no trivial.


Parece que lo que estás buscando se llama agrupamiento / clasificación de documentos bolsa de palabras. Encontrarás una guía con esta búsqueda.



Una opción para lo que está haciendo es frecuencia de término a frecuencia de documento inversa, o tf-idf. Los términos más fuertes tendrán la ponderación más alta según este cálculo. Compruebe si está aquí: http://en.wikipedia.org/wiki/Tf-idf

Otra opción es usar algo como un clasificador de bayes ingenuo usando palabras como características y encontrar cuáles son las características más fuertes en el texto para determinar la clase del documento. Esto funcionaría de manera similar con un clasificador de entropía máximo.

En cuanto a las herramientas para hacer esto, la mejor herramienta para comenzar sería NLTK, una biblioteca de Python con una extensa documentación y tutoriales: http://nltk.sourceforge.net/

Para Java, prueba OpenNLP: http://opennlp.sourceforge.net/

Para las cosas de frase, considere la segunda opción que ofrecí usando bigrams y trigrams como características, o incluso como términos en tf-idf.

¡Buena suerte!


Verifique el modelo de MapReduce para obtener el conteo de palabras y luego obtenga la frecuencia como se describe en tf-idf

Hadoop es un marco Apache MapReduce que se puede usar para la tarea de levantar objetos pesados ​​en muchos documentos. http://hadoop.apache.org/common/docs/current/mapred_tutorial.html

No puede obtener un solo marco que resuelva todo lo que desee. Debe elegir una combinación correcta de conceptos y marco para obtener lo que desea.