2010-04-23 13 views
6

Digamos que hay una frase:¿Cómo obtener partes lógicas de una oración con java?

On March 1, he was born. 

Si lo cambia a

He was born on March 1. 

no se rompe el sentido de la frase, y lo sigue siendo válida. Mezclar palabras de cualquier otra manera produciría oraciones raras a inválidas. Entonces, básicamente, estoy hablando de partes de la oración, que hacen que la información sea más específica, pero eliminarlas no rompe la frase completa. ¿Hay alguna biblioteca PNL en la que esté disponible la identificación de tales partes?

Respuesta

26

Constituyentes

Parece que usted quiere identificar la sentencia de constituents, que son grupos de palabras que funcionan como una sola unidad de acuerdo con la gramática de una lengua.

De hecho, cuando la lingüística intenta descubrir la gramática de un idioma, lo hace en parte mirando movement. Como en su ejemplo, aquí es donde un grupo de palabras se puede mover a una posición diferente en una oración mientras se conserva el significado de la oración.

Los elementos constitutivos pueden ser palabras individuales, frases o incluso grupos más grandes, como cláusulas enteras. Dentro de una oración, tienen una estructura jerárquica anidada. Por ejemplo, la primera frase ejemplo que diste podría ser analizado como:

(S (PP (IN On) (NP (NNP March) (CD 1))) 
    (NP (PRP he)) 
    (VP (VBD was) (VP (VBN born)))) 

La frase completa se compone de un prepositional phrase, seguido por un noun phrase, y luego un verb phrase. La frase preposicional se puede descomponer aún más en una unidad que consiste en la palabra única 'Encendido' seguida de una frase nominal.

analizadores estructura de la frase

Para encontrar constituyentes de forma automática, es probable que desee utilizar una estructura frase analizador.Hay muchos de estos análisis sintácticos para elegir que están disponibles como código abierto, incluyendo:

Los analizadores de Stanford y Berkeley son probablemente los más fáciles de instalar y utilizar. Como se ve en Cer et al. 2010, los analizadores más precisos son Berkeley y Charniak. El analizador de Bikel es más lento y menos preciso que los demás.

Demo en línea

Hay una demostración en línea para el analizador de Stanford here. Usé la demostración para producir el análisis dado arriba de tu oración de ejemplo.

Una nota sobre la Supresión

Dentro de cada constituyente, habrá un head word. Por ejemplo, tomar el sintagma nominal:

(NP (DT The) (JJ big) (JJ blue) (NN ball))

La palabra cabeza aquí es el sustantivo ball, y es modificado por los adjetivos big y blue. Si este sintagma nominal estaba incrustado en una oración, podría eliminar esos modificadores y aún así tener algo que sea consistente con, pero menos específico que, el significado de la oración original.

Dentro de frases nominales, generalmente puede eliminar los adjetivos, los nombres que no son el encabezado y las frases preposicionales anidadas.

Dentro de frases verbales y cláusulas completas, las cosas se vuelven más complicadas ya que borrar material que los servidores como argumento del verbo pueden cambiar completamente la interpretación de una oración. Por ejemplo, al eliminar the book de He sold Jim the book se obtiene He sold Jim.

+1

Estaba viendo todos estos analizadores sintácticos y encontré un artículo escrito por Daniel en http://nlp.stanford.edu/pubs/lrecstanforddeps_final_final.pdf –

+4

Sí, ese es en realidad mi artículo :) – dmcer

+0

Me preguntaba sobre el enlace Grammer Parser performance, pero veo en su documento que lo ha cubierto bajo el analizador de RelEx. –

1

OpenNLP puede hacer algo de esto para usted. Phrase chunking y el análisis debería ayudarlo con esto. Sin embargo, este no es un problema particularmente simple, y los algoritmos tenderán a confundirse a medida que la estructura de las oraciones se vuelve más compleja y ambigua. A veces deberías poder reordenar frases dentro de una oración y mantener el significado.

Cuestiones relacionadas