python parsing nlp lexical-analysis

python - Analizando Significado del Texto



parsing nlp (7)

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 un 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",

¿Qué es una forma liviana / fácil de sacar los sustantivos de una oración? Para empezar, creo que lo limitaría a los nombres propios, pero no me gustaría limitarme a eso (y no quiero confiar en una expresión regular simple que asume que el Título limitado es un nombre propio).

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



El procesamiento de lenguaje natural (NLP) es el nombre para analizar, bueno, el lenguaje natural. Existen muchos algoritmos y heurísticas, y es un campo activo de investigación. Cualquiera que sea el algoritmo que codifique, tendrá que ser entrenado en un corpus. Como un ser humano: aprendemos un idioma leyendo textos escritos por otras personas (y / o escuchando frases pronunciadas por otras personas).

En términos prácticos, eche un vistazo a Natural Language Toolkit . Para obtener un fundamento teórico de lo que sea que vaya a codificar, puede consultar Fundamentos del procesamiento estadístico del lenguaje natural por Chris Manning y Hinrich Schütze.

texto alternativo http://nlp.stanford.edu/fsnlp/fsnlp-bigger.jpg


Este es un tema realmente complicado. En general, este tipo de material cae bajo la rúbrica de procesamiento de lenguaje natural, y tiende a ser complicado en el mejor de los casos. La dificultad de este tipo de cosas es precisamente la razón por la cual todavía no existe un sistema completamente automatizado para manejar el servicio al cliente y demás.

Generalmente, el enfoque de esto depende REALMENTE de cuál es exactamente tu dominio problemático. Si puede descifrar el dominio del problema, puede obtener algunos beneficios muy serios; para usar tu ejemplo, si eres capaz de determinar que tu dominio problemático es el béisbol, eso te dará una buena ventaja. Incluso entonces, es MUCHO trabajo conseguir algo especialmente útil.

Por lo que vale, sí, un corpus de palabras existente va a ser útil. Más importante aún, determinar la complejidad funcional que se espera del sistema será crítico; ¿necesita analizar oraciones simples, o hay una necesidad de analizar el 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 CNET Forum , que utilizó una expresión regular para encontrar todos los escáneres mencionados en las publicaciones del foro de CNET?

En la publicación, se utilizó una expresión regular como tal:

(?i)((?:/w+/s/w+/s(?:(?:(?:[0-9]+[a-z/-]|[a-z]+[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]+[a-z/-]|[a-z]+[0-9/-]|[0-9])[a-z0-9/-]*)|all-in-one|all in one)))

para que coincida con cualquiera de los siguientes:

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

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

  1. descontinuado 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.


Lo que quiere se llama fragmentación NP (frase nominal) o extracción.

Algunos enlaces aquí

Como se señaló, esto es algo muy específico del dominio del problema. Cuanto más puedas reducirlo, más efectivo será. Y tendrá que entrenar su programa en su dominio específico.


Necesita ver el Juego de herramientas de lenguaje natural , que es exactamente para este tipo de cosas.

Esta sección del manual se ve 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 de coordinación; ahora y completamente son RB, o adverbios; porque es IN, una preposición; algo es NN, un sustantivo; y diferente es JJ, un adjetivo.


Use 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 sinceramente, una de las únicas áreas de las computadoras NLP puede manejarlo en este momento.

Consulte las secciones 7.5 y 7.6 sobre los subtemas de Reconocimiento de entidades con nombre (para dividir y categorizar a Manny Ramerez como persona, Dodgers como organización deportiva y Astros de Houston como otra organización deportiva, o lo que sea adecuado para su dominio) y Extracción de relaciones. Hay un chunker NER que puedes usar una vez que tienes instalado el NLTK. De sus ejemplos, extrayendo una entidad geopolítica (GPE) y una persona:

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

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