¿Cómo puedo extraer las palabras clave utilizadas en el texto? [cerrado]


¿Cómo puedo extraer datos de un montón de texto para obtener palabras clave por uso? ("Jacob Smith "o"cerca")

¿Y ya hay un software para hacer esto? incluso de forma semiautomática, y si puede filtrar palabras simples como "el", "y", "o", entonces podría llegar a los temas más rápido.

Author: Robinicks, 2009-10-16

6 answers

El algoritmo general va a ir así:

- Obtain Text
- Strip punctuation, special characters, etc.
- Strip "simple" words
- Split on Spaces
- Loop Over Split Text
    - Add word to Array/HashTable/Etc if it doesn't exist;
       if it does, increment counter for that word

El resultado final es un recuento de frecuencia de todas las palabras en el texto. A continuación, puede tomar estos valores y dividir por el número total de palabras para obtener un porcentaje de frecuencia. Cualquier procesamiento posterior depende de usted.

Usted también va a querer mirar en Stemming. Stemming se usa para reducir las palabras a su raíz. Por ejemplo going => go, cars => car, etc.

Un algoritmo como este va a ser común en el spam filtros, indexación de palabras clave y similares.

 39
Author: Gavin Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-15 21:50:43

Esta es una pregunta abierta en la PNL, por lo que no hay una respuesta simple.

Mi recomendación para "trabajar por mí" rápido y sucio es topia.termextract.

Yahoo tiene un servicio de extracción de palabras clave ( http://developer.yahoo.com/search/content/V1/termExtraction.html ) que es de baja memoria pero de alta precisión. En otras palabras, le da un pequeño número de términos de alta calidad, pero pierde muchos de los términos en sus documentos.

En Python, hay topia.termextract ( http://pypi.python.org/pypi/topia.termextract / ). Es relativamente ruidoso, y propone muchas palabras clave falsas, pero es fácil de usar.

Termino ( http://www.nactem.ac.uk/software/termine / ) es un servicio web del Reino Unido que también es relativamente ruidoso, y propone muchas palabras clave falsas. Sin embargo, me parece un poco más preciso que Topia.termextract. YMMV.

Una forma de eliminar el ruido de los resultados con demasiadas palabras clave (por ejemplo, topia.termextract y termine) es crear un vocabulario de términos que ocurren con frecuencia, y luego deseche los términos propuestos que no están en el vocabulario. En otras palabras, haga dos pasadas sobre su corpus: La primera pasada, cuente la frecuencia de cada palabra clave. En la segunda pasada, descarta las palabras clave que son demasiado raras.

Si quieres escribir el tuyo, quizás la mejor introducción la escriba Park, que ahora está en IBM:

  • "Extracción automática del glosario: más allá de la identificación terminológica" disponible en http://portal.acm.org/citation.cfm?id=1072370
  • "Extracción y utilización del glosario en el sistema de búsqueda y entrega de información para el soporte técnico de IBM"

Aquí hay algunas referencias más, si quieres aprender más:

  • http://en.wikipedia.org/wiki/Terminology_extraction
  • "CorePhrase: Extracción de Frases clave para la agrupación de Documentos"
  • Liu et al 2009 de NAACL HLT
  • "Identificación Automática de Frases no compositivas "
  • "Data Mining Meets Collocations Discovery"
  • Así como una gran cantidad de otras referencias que puede desenterrar sobre el tema.
 119
Author: Joseph Turian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-15 22:08:44

También hay un servicio llamado Alchemy que puede hacer extracción de términos, etiquetado de conceptos, análisis de sentimientos, etc.

Es válido, lo probé pero no conozco las políticas comerciales (si las hay). Proporcionan API para cualquier tipo de lenguaje (prácticamente).

Leí en alguna parte (lo siento, ya no recuerdo dónde) que la salida dada por Alchemy es menos ruidosa en comparación con las propuestas de Joseph.

 9
Author: Fabiano Francesconi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-12-19 10:18:38

No especificó una tecnología con la que está trabajando, así que supongo que un script de shell también es una posibilidad.

Siempre me ha impresionado el ejemplo de análisis de frecuencia de palabras en la Guía Avanzada de Scripting de Bash (12-11)

Lo siguiente, por ejemplo, obtiene un libro del proyecto Gutenburg y escribe un informe de análisis de frecuencia de palabras:

wget http://www.gutenberg.org/files/20417/20417-8.txt -q -O- | 
sed -e 's/\.//g'  -e 's/\,//g' -e 's/ /\
/g' | tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr > output.txt

Debe ser extensible para excluir palabras de una lista 'común' (el, y, a...) sucesivamente.

 5
Author: ChristopheD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-15 22:16:51

Yo personalmente recomiendo Maui ( http://code.google.com/p/maui-indexer / ): se basa en KeA pero se extiende de varias maneras. Es entrenable y puede usar terminologías con formato RDF.

 1
Author: bongo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-18 08:23:34

He usado NTLK para reconocer entidades con nombre antes con cierto éxito. Es especialmente bueno para reconocer los nombres de personas y organizaciones.

 0
Author: litso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-05 00:03:31