2010-06-24 26 views
5

Me gustaría saber de herramientas de código abierto (para java/python) que podrían ayudarme a extraer las características estilísticas semánticas & del texto. Ejemplos de características semánticas serían la relación adjetivo-sustantivo, una secuencia particular de etiquetas de parte del discurso (adjetivo seguido de un sustantivo: adj | nn) etc. Ejemplos de características estilísticas serían el número de palabras únicas, el número de pronombres, etc. Actualmente, sé solamente de Word to Web Tools que convierte un bloque de texto en el modelo de espacio vectorial rudimentario.Extracción de características semánticas/estilísticas del texto

Soy consciente de algunos paquetes de minería de texto como GATE, NLTK, Rapid Miner, Mallet y MinorThird. Sin embargo, no pude encontrar ningún mecanismo que se adaptara a mi tarea.

Saludos,
--Denzil

Respuesta

1

utilizo analizadores y la indexación mecanismo Lucene 's para construir espacios vectoriales de documentos y luego navegar en este espacio. Puede construir vectores de frecuencia de términos para documentos, usar un documento existente para buscar otros documentos similar en el espacio vectorial. Si sus datos son grandes (millones de documentos, decenas de miles de características), entonces podría querer Lucene. También puedes hacer derivaciones, postagráficos y otras cosas. Este blog post podría ser un buen punto de partida para el etiquetado POS. En resumen, Lucene le proporciona todos los mecanismos necesarios para implementar las tareas que mencionó.

Una biblioteca que escucho con frecuencia es Semantic Vectors. Está nuevamente construido en Lucene pero no tengo una experiencia directa con eso. Aparte de esto, sugiero mirar el Vector Space Model de Wikipedia article.

+0

Amac, Gracias por la respuesta! El "modelo de espacio vectorial", aunque es un modelo muy robusto, es un modelo primitivo y depende más de las estadísticas. Me gustaría implementar un modelo más complejo usando conocimiento semántico a partir de texto como conceptos, etc. La publicación del blog podría ayudarme a extraer una secuencia de patrón POS utilizando Lucene; sin embargo, un paquete más liviano como NLTK (usando una expresión regular por supuesto) puede ayudarme realiza la misma tarea. Gracias por indicarme el paquete de vectores semánticos. Aunque no me ayuda directamente en mi tarea, consideraré su uso para otras tareas. – Dexter

1

Utilicé NLTK para algunas tareas de procesamiento de lenguaje natural (NLP) y funcionó muy bien (aunque lentamente). ¿Por qué exactamente quieres una representación tan estructurada de tu texto? (Verdadera pregunta, ya que dependiendo de la aplicación a veces, las representaciones mucho más simples pueden ser mejores)

+0

Gabe, ¡Gracias por la respuesta! Tengo una lista de oraciones en un archivo .txt (29 millones de oraciones para ser exactos). Cada oración está anotada con algún tema. Puede haber múltiples anotaciones por oración. Tengo una lista de palabras únicas del archivo de texto y la lista de anotaciones únicas también. Necesito crear una palabra (término único) - matriz de anotación (similar a una matriz de documento de términos). Sin embargo, estoy al borde del mar en cuanto a cómo proceder considerando que el número de palabras únicas es de aproximadamente 15 millones y el número de anotaciones es de 318k. El tamaño de la estructura de datos me decepciona. – Dexter

+0

Bueno, * es * bastante grande :-D Para empezar, probablemente no quieras leer todo el archivo a la vez, y por unos segundos: ¿estás seguro de que necesitas toda la estructura de datos en la memoria a la vez? ¿Qué estás tratando de hacer? Dependiendo de lo que esté tratando de hacer, podría no ser inadmisible buscar almacenamiento de datos en una base de datos (ya sea de tipo clave valor DB (couchdb et al.) O una tabla simple en un RDB (mysql). – Gabe

+0

Gabe, estoy de acuerdo con mantener las características en un RDBMS, etc. ¡Sin embargo, el punto principal es extraerlas! – Dexter

2

Si el texto es en su mayoría natural (en inglés), intenta extraer frases utilizando un etiquetador de voz parcial (POS). Monty tagger es un etiquetador de punto de venta de python puro. Tengo un rendimiento muy satisfactorio con un grabador de C++ POS, como el CRFTagger http://sourceforge.net/projects/crftagger/. Lo até a Python usando subprocess.Popen. Las etiquetas POS le permiten conservar solo las partes importantes de una oración: sustantivos y verbos, por ejemplo, que luego pueden indexarse ​​usando cualquier herramienta de indexación como Lucene o Xapian (mi favorito).

+0

Ken, ¡gracias! El problema es que para tareas de clasificación de texto no encuentro un lenguaje de programación que pueda extraer A lo largo de los años hemos visto tantas características estándar utilizadas como la que mencioné anteriormente, pero estoy sorprendido y decepcionado por los investigadores que no envían el código para el mismo. – Dexter

3

creo que el analizador de Stanford es una de las mejores y más completas herramientas de PNL disponibles de forma gratuita: no sólo se permitirá analizar el dependencias estructurales (para contar los sustantivos/adjetivos), sino que también le dará la dependencias gramaticales en la oración (para que pueda extraer el tema, el objeto, etc.). El último componente es algo que las bibliotecas de Python simplemente no puede hacer todavía (ver Does NLTK have a tool for dependency parsing?) y es probablemente va a ser la característica más importante en lo que respecta a la capacidad de su software para trabajar con la semántica.

Si usted está interesado en herramientas Java y Python, a continuación, Jython es probablemente el más divertido de usar para usted. Yo estaba en la misma situación exacta, así que escribí este post sobre el uso de Jython para ejecutar el código de ejemplo proporcionado en el Stanford Analizador - Yo le daría un vistazo y ver lo que piensa: http://blog.gnucom.cc/2010/using-the-stanford-parser-with-jython/

Editar: Después de leer uno de sus comentarios me enteré de que necesita analizar 29 millones de oraciones.Creo que podría beneficiarse enormemente al usar Java puro para combinar dos tecnologías realmente potentes: Stanford Parser + Hadoop. Ambos están escritos exclusivamente en Java y tienen una API extremadamente rica que puede usar para analizar la cantidad de datos en una fracción del tiempo en un grupo de máquinas. Si no tiene las máquinas, puede usar el clúster EC2 de Amazon. Si necesita un ejemplo de uso de Stanford Parser + Hadoop, deje un comentario para mí y actualizaré la publicación con una URL a mi ejemplo.

1

He aquí una recopilación de herramientas de Java PNL que es razonablemente al día: http://www.searchenginecaffe.com/2007/03/java-open-source-text-mining-and.html

LingPipe (http://alias-i.com/lingpipe/) no se ha mencionado en las respuestas, y es un excelente conjunto de herramientas & desarrollado activamente.

+0

Jon, LingPipe me ayuda hasta ahora. usé LingPipe, pero lo que estoy pidiendo probablemente no sea proporcionado por ninguna de las herramientas, incluida LingPipe. – Dexter

Cuestiones relacionadas