Análisis del significado del texto

Me doy cuenta de que este es un tema amplio, pero estoy buscando un buen manual para analizar el significado del texto, idealmente en Python. Como ejemplo de lo que estoy buscando hacer, si un usuario hace una publicación de blog como:

“Manny Ramírez hace su regreso para los Dodgers hoy contra los Astros de Houston”,

¿Cuál es una forma liviana / fácil de obtener los sustantivos de una oración? Para empezar, creo que lo limitaría a los nombres propios, pero no me gustaría limitarme solo a eso (y no quiero confiar en una expresión regular simple que asume que cualquier cosa que contiene un título es un nombre propio).

Para hacer esta pregunta aún peor, ¿cuáles son las cosas que no estoy pidiendo que debería ser? ¿Necesito un corpus de palabras existentes para empezar? ¿Qué cosas del análisis léxico necesito saber para hacer que esto funcione? Me encontré con otra pregunta sobre el tema y ahora estoy investigando esos recursos.

Utilice el NLTK , en particular el capítulo 7 sobre Extracción de información.

Usted dice que quiere extraer significado, y hay módulos para el análisis semántico, pero creo que IE es todo lo que necesita, y honestamente, una de las únicas áreas de computadoras de PNL puede manejar ahora.

Consulte las secciones 7.5 y 7.6 sobre los subtemas de Reconocimiento de Entidades Nombradas (para dividir y clasificar a Manny Ramerez como persona, a los Dodgers como organización deportiva, ya los Astros de Houston como otra organización deportiva, o lo que sea que se adapte a su dominio) y Extracción de relaciones. Hay un Chunker NER que puede conectar una vez que tenga instalado el NLTK. De sus ejemplos, se extrae una entidad geopolítica (GPE) y una persona:

>>> sent = nltk.corpus.treebank.tagged_sents()[22] >>> print nltk.ne_chunk(sent) (S The/DT (GPE US/NNP) is/VBZ one/CD ... according/VBG to/TO (PERSON Brooke/NNP T./NNP Mossman/NNP) ...) 

Tenga en cuenta que aún necesitará conocer la tokenización y el etiquetado, como se explicó en capítulos anteriores, para obtener su texto en el formato correcto para estas tareas de IE.

Debe consultar el kit de herramientas de lenguaje natural , que es exactamente para este tipo de cosas.

Esta sección del manual parece muy relevante: categorizar y etiquetar palabras : aquí hay un extracto:

 >>> text = nltk.word_tokenize("And now for something completely different") >>> nltk.pos_tag(text) [('And', 'CC'), ('now', 'RB'), ('for', 'IN'), ('something', 'NN'), ('completely', 'RB'), ('different', 'JJ')] 

Aquí vemos eso y es CC, una conjunción coordinadora; ahora y completamente son RB, o adverbios; Porque es IN, una preposición; algo es NN, un sustantivo; Y diferente es JJ, un adjetivo.

Procesamiento de lenguaje natural (NLP) es el nombre para analizar, bueno, lenguaje natural. Existen muchos algoritmos y heurísticas, y es un campo de investigación activo. Cualquiera que sea el algoritmo que codificarás, deberá ser entrenado en un corpus. Al igual que un ser humano: aprendemos un idioma leyendo un texto escrito por otras personas (y / o escuchando oraciones pronunciadas por otras personas).

En términos prácticos, eche un vistazo al kit de herramientas de lenguaje natural . Para una base teórica de lo que se va a codificar, puede consultar Fundamentos de procesamiento estadístico del lenguaje natural por Chris Manning y Hinrich Schütze.

texto alternativo
(fuente: stanford.edu )

Aquí está el libro que encontré recientemente: Procesamiento de lenguaje natural con Python

Lo que se quiere se llama fragmentación (extracción) de NP (nombre de frase).

Algunos enlaces aqui

Como se ha señalado, esto es un problema muy específico del dominio. Cuanto más pueda reducirlo, más efectivo será. Y vas a tener que entrenar tu progtwig en tu dominio específico.

Este es un tema realmente muy complicado. Generalmente, este tipo de cosas cae bajo la rúbrica de Procesamiento del lenguaje natural, y tiende a ser complicado en el mejor de los casos. La dificultad de este tipo de cosas es precisamente por qué todavía no existe un sistema completamente automatizado para manejar el servicio al cliente y similares.

En general, el enfoque de este tema depende REALMENTE de cuál sea el dominio de su problema. Si puede reducir el dominio del problema, puede obtener algunos beneficios muy serios; Para usar tu ejemplo, si eres capaz de determinar que tu dominio de problema es el béisbol, entonces eso te da una gran ventaja. Incluso entonces, es MUCHO trabajo conseguir algo particularmente útil.

Para lo que valga, sí, un corpus de palabras existente será útil. Más importante aún, determinar la complejidad funcional esperada del sistema va a ser fundamental; ¿Necesita analizar oraciones simples o es necesario analizar un comportamiento complejo? ¿Puedes restringir las entradas a un conjunto relativamente simple?

Las expresiones regulares pueden ayudar en algún escenario. Aquí hay un ejemplo detallado: ¿Cuál es el escáner más mencionado en el foro de CNET , que usó una expresión regular para encontrar todos los escáneres mencionados en las publicaciones del foro de CNET?

En el post, se usó una expresión regular como tal:

 (?i)((?:\w+\s\w+\s(?:(?:(?:[0-9]+[az\-]|[az]+[0-9\-]|[0-9])[a-z0-9\-]*)|all-in-one|all in one)\s(\w+\s){0,1}(?:scanner|photo scanner|flatbed scanner|adf scanner|scanning|document scanner|printer scanner|portable scanner|handheld scanner|printer\/scanner))|(?:(?:scanner|photo scanner|flatbed scanner|adf scanner|scanning|document scanner|printer scanner|portable scanner|handheld scanner|printer\/scanner)\s(\w+\s){1,2}(?:(?:(?:[0-9]+[az\-]|[az]+[0-9\-]|[0-9])[a-z0-9\-]*)|all-in-one|all in one))) 

para coincidir con cualquiera de los siguientes:

  • dos palabras, luego el número de modelo (incluido el dispositivo todo en uno), luego “escáner”
  • “Escáner”, luego una o dos palabras, luego el número de modelo (incluido el todo en uno)

Como resultado, el texto extraído de la publicación era como,

  1. descontinuado el escáner fotográfico HP C9900A
  2. escaneando sus viejas radiografías
  3. Nuevo escáner Epson V700
  4. Escáner HP ScanJet 4850
  5. Escáner Epson Perfection 3170

Esta solución de expresión regular funcionó de una manera.