Análisis de idiomas para encontrar palabras importantes

9

Estoy buscando información y teoría sobre cómo abordar un tema léxico.

Digamos que tengo una colección de cadenas, que pueden ser solo una oración o potencialmente múltiples oraciones. Me gustaría analizar estas cadenas y extraer las palabras más importantes, tal vez con una puntuación que denote la probabilidad de que la palabra sea importante.

Veamos algunos ejemplos de lo que quiero decir.

Ejemplo 1:

"Realmente quiero un Keurig, ¡pero no puedo pagarlo!"

Este es un ejemplo muy básico, solo una oración. Como humano, puedo ver fácilmente que "Keurig" es la palabra más importante aquí. Además, "pagar" es relativamente importante, aunque claramente no es el punto principal de la oración. La palabra "I" aparece dos veces, pero no es importante en absoluto, ya que realmente no nos da ninguna información. Podría esperar ver un hash de palabras / puntajes algo como esto:

"Keurig" => 0.9
"afford" => 0.4
"want"   => 0.2
"really" => 0.1
etc...

Ejemplo # 2:

"Acabo de tener una de las mejores prácticas de natación de mi vida. Espero poder mantener mis tiempos en la competencia. Si tan solo hubiera recordado quitarme mi reloj no resistente al agua".

Este ejemplo tiene varias oraciones, por lo que habrá palabras más importantes en todo momento. Sin repetir el ejercicio de puntos del ejemplo # 1, probablemente esperaría ver dos o tres palabras realmente importantes que salgan de esto: "natación" (o "práctica de natación"), "competencia" y "reloj" (o "impermeable" ver "o" reloj no resistente al agua "dependiendo de cómo se maneje el guión).

Dado un par de ejemplos como este, ¿cómo harías para hacer algo similar? ¿Existen bibliotecas o algoritmos existentes (de código abierto) en la programación que ya lo hagan?

Matt Huggins
fuente
Además, esta es mi primera publicación en programmers.stackexchange.com. Disculpas si este es el lugar equivocado y pertenece a StackOverflow u otro sitio de SE. Feliz de mover la pregunta si es necesario.
Matt Huggins
No entiendo de la pregunta qué estás tratando de lograr. Para el primer ejemplo en particular, las palabras "Keurig" y "permitir" podrían identificarse mediante un simple control estadístico: entre las palabras de la oración, estas dos palabras son menos comunes en inglés que las otras. Entonces, si tuviera una base de datos de frecuencias de palabras, podría identificarlas fácilmente.
Qwertie

Respuestas:

5

Definitivamente hay personas que piensan en el problema que usted describe. La Clasificación y extracción de palabras únicas relevantes en texto (pdf) de João Ventura y Joaquim Ferreira da Silva es una buena introducción a las técnicas de clasificación existentes, así como sugerencias para mejorar. Todas las técnicas que describen se basan en un corpus (mucho texto) versus una o dos líneas de texto. Su corpus tendría que ser la colección de todas las muestras o posiblemente muchos corpus de muestras recolectadas de fuentes específicas. Tenga en cuenta que la relevancia de una sola palabra (unigrama) es en gran medida un problema sin resolver. Como describe el artículo:

"... utilizando métodos puramente estadísticos, este tipo de clasificación no siempre es directa o incluso exacta porque, aunque la noción de relevancia es un concepto fácil de entender, normalmente no hay consenso sobre la frontera que separa la relevancia de la no relevancia. Por ejemplo, palabras como "República" o "Londres" tienen relevancia significativa y palabras como "o" y "ya que" no tienen ninguna relevancia, pero ¿qué pasa con palabras como "leer", "terminar" y "siguiente"? de palabras son problemáticas porque generalmente no hay consenso sobre su valor semántico ".

Hay muchos kits de herramientas de procesamiento de lenguaje natural de código abierto . (Tenga cuidado. Algunas herramientas son gratuitas para la investigación, pero requieren una licencia comercial para uso comercial). Le facilitarán la vida independientemente del enfoque que elija.

Estoy más familiarizado con el Kit de herramientas de lenguaje natural (NLTK) . Es fácil de usar, está bien documentado y aparece en el libro, Procesamiento del lenguaje natural con Python (disponible gratuitamente en línea). Como un ejemplo simple de lo que NLTK podría hacer por usted, imagine usar su etiquetador de parte del discurso . Con la parte del discurso de cada palabra identificada, puede considerar que los nombres propios son muy importantes y los adjetivos no lo son tanto. Los verbos pueden ser importantes y los adverbios menos. De ninguna manera es una clasificación de vanguardia, pero obtienes información útil con poco esfuerzo. Cuando esté listo para pasar a un análisis más sofisticado, la capacidad incorporada de NLTK para tokenizar, etiquetar, fragmentar y clasificar le permitirá concentrarse en los otros detalles de su solución.

Corbin March
fuente
1

El procesamiento del lenguaje natural es su propia disciplina con una gran cantidad de investigación formal realizada al respecto. Empezaría mirando allí.

También reconsideraría mis necesidades. Incluso después de más de 50 años de investigación, los mejores informáticos que han podido encontrar es Siri. No esperaría que una computadora haga con éxito lo que está hablando con regularidad.

Si hay ciertas limitaciones en el discurso (como Siri, suponiendo que tenga un comando simple o una pregunta), puede ser mejor. Reconsiderar mis necesidades (suponiendo que necesito PNL) incluiría definir mis limitaciones. Después de eso, probablemente buscaría un montón de ejemplos. En parte para probar cualquier cosa que se me ocurra, pero muchas soluciones modernas implican el aprendizaje automático. Necesitaría esos ejemplos como entrada para la curva de aprendizaje.

En resumen, dudo seriamente que algo pueda darle buenos puntajes en este tipo de escenario sin contexto.

Telastyn
fuente
+1 para Siri dig ... o promoción ...
Aaron McIver