2009-07-17 13 views
10

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 tratando de hacer, si un usuario realiza una entrada en el blog como:Analizando Significado del texto

"Manny Ramírez hace su regreso con los Dodgers de hoy en contra de los Astros de Houston",

lo que es un peso ligero/manera 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, ¿cuáles son las cosas que 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 one other question sobre el tema y estoy investigando esos recursos ahora.

Respuesta

8

Utilice la NLTK, en particular, chapter 7 on Information Extraction.

Usted dice que desea 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 NLP pueden manejar en este momento.

Vea las secciones 7.5 y 7.6 sobre los subtemas de Reconocimiento de Entidad Nombrada (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. A partir de sus ejemplos, la extracción de 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) 
    ...) 

Nota usted todavía necesita 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.

10

Debe mirar el Natural Language Toolkit, que es exactamente para este tipo de cosas.

Esta sección del manual se ve muy relevante: Categorizing and Tagging Words - aquí está 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 que y es CC, una conjunción de coordinación; ahora y completamente son RB, o adverbios; para es IN, una preposición; algo es NN, un nombre; y diferente es JJ, un adjetivo.

1

Este es un tema muy 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.

En general, 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?

3

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

Some links here

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

4

Aquí está el libro me topé recientemente: Natural Language Processing with Python

+0

Ha, acabo de añadir eso a mi carrito en Amazon antes de volver aquí. ¿Tiene algo de bueno? Me preguntaba sobre la falta de críticas. – Tom

+0

Parece que tiene una descripción bastante decente de NTLK - toolkit mencionado en una de las respuestas – zakovyrya

7

Procesamiento del Lenguaje Natural (PLN) es el nombre para el análisis, así, 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 Foundations of Statistical Natural Language Processing de Chris Manning y Hinrich Schütze.

alt text http://nlp.stanford.edu/fsnlp/fsnlp-bigger.jpg

+1

Este libro es una excelente introducción a los conceptos en torno a Statistical NLP! –

-1

Las expresiones regulares pueden ayudar en algunos casos. Aquí hay un ejemplo detallado: What’s the Most Mentioned Scanner on CNET Forum, que utilizó una expresión regular para encontrar todos los escáneres mencionados en las publicaciones del foro de CNET.

en el puesto, 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))) 

con el fin de que coincida con uno de los siguientes:

  • dos palabras, a continuación, el número de modelo (incluyendo all-in- uno), a continuación, “scanner”
  • “scanner”, a continuación, una o dos palabras, a continuación, el número de modelo (incluyendo todo-en-uno)

Como resultado, el texto extraído del poste era como,

  1. descontinuado escáner fotográfico HP C9900A
  2. el escaneo de sus viejos rayos X
  3. nueva V700 Epson escáner
  4. HP ScanJet 4850 escáner
  5. Epson Perfection 3170 escáner

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

Cuestiones relacionadas