Gitter es sala de chat para desarrolladores.
nlpnet --- Procesamiento del lenguaje natural con redes neuronales nlpnet es una biblioteca de Python para tareas de procesamiento del lenguaje natural basadas en redes neuronales. Actualmente, realiza un etiquetado de parte de voz, etiquetado de rol semántico y análisis de dependencia. La mayor parte de la arquitectura es independiente del lenguaje, pero algunas funciones se adaptaron especialmente para trabajar con portugués. Este sistema se inspiró en Senna.
IMPORTANTE: Para usar los modelos capacitados para NLP portugués, deberá descargar los datos de http://nilc.icmc.usp.br/nlpnet/models.html.
nlpnet requiere NLTK y Numpy. Además, necesita descargar algunos datos de NLTK. Después de instalarlo, llame
>>> nltk.download()
Vaya a la pestaña Modelos y seleccione el tokenizador Punkt. Se usa para dividir el texto en oraciones.
Cython se usa para generar extensiones C y ejecutar más rápido. Probablemente no lo necesite, ya que el archivo .c generado ya está proporcionado con NLPNET, pero necesitará un compilador C. En los sistemas Linux y Mac esto no debería ser un problema, pero puede estar en Windows, porque SetupTools requiere el compilador de Microsoft C de forma predeterminada. Si aún no lo tiene, generalmente es más fácil instalar Mingw y seguir las instrucciones aquí.
nlpnet se puede usar tanto como una biblioteca de Python como por sus scripts independientes. Ambos usos se explican a continuación.
Puede usar nlpnet como biblioteca en el código de Python de la siguiente manera:
> >> import nlpnet
> >> tagger = nlpnet . POSTagger ( '/path/to/pos-model/' , language = 'pt' )
> >> tagger . tag ( 'O rato roeu a roupa do rei de Roma.' )
[[( u'O' , u'ART' ), ( u'rato' , u'N' ), ( u'roeu' , u'V' ), ( u'a' , u'ART' ), ( u'roupa' , u'N' ), ( u'do' , u'PREP+ART' ), ( u'rei' , u'N' ), ( u'de' , u'PREP' ), ( u'Roma' , u'NPROP' ), ( u'.' , 'PU' )]] En el ejemplo anterior, el constructor POSTagger recibe como el primer argumento del directorio donde se encuentra su modelo capacitado. El segundo argumento es el código de lenguaje de dos letras (actualmente, Onle pt y en son compatibles). Esto solo tiene un impacto en la tokenización.
Llamar a una herramienta de anotación es bastante sencilla. Los proporcionados son POSTagger , SRLTagger y DependencyParser , todos ellos tienen una tag de método que recibe cadenas con texto para ser etiquetados (en DependencyParser , hay un alias en el parse del método, que suena más adecuado). El etiquetador divide el texto en oraciones y luego toca cada uno (de ahí la devolución de la postesger es una lista de listas).
La salida del srltagger es un poco más complicado:
>>> tagger = nlpnet.SRLTagger() >>> tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' ) [<nlpnet.taggers.SRLAnnotatedSentence at 0x84020f0>]
En lugar de una lista de tuplas, las oraciones están representadas por instancias de SRLAnnotatedSentence . Esta clase sirve básicamente como un titular de datos y tiene dos atributos:
>>> sent = tagger.tag( u ' O rato roeu a roupa do rei de Roma. ' )[ 0 ] >>> sent.tokens [u'O', u'rato', u'roeu', u'a', u'roupa', u'do', u'rei', u'de', u'Roma', u'.'] >>> sent.arg_structures [(u'roeu', {u'A0': [u'O', u'rato'], u'A1': [u'a', u'roupa', u'do', u'rei', u'de', u'Roma'], u'V': [u'roeu']})]
arg_structures es una lista que contiene todas las estructuras de argumento de predicado en la oración. El único en este ejemplo es para el verbo roeu. Está representado por una tupla con el predicado y un diccionario mapeo de etiquetas de rol semántico a los tokens que constituyen el argumento.
Tenga en cuenta que el verbo aparece como el primer miembro de la tupla y también como el contenido de la etiqueta 'V' (que significa verbo). Esto se debe a que algunos predicados son múltiples palabras. En estos casos, la palabra predicada "principal" (generalmente el verbo en sí) aparece en arg_structures[0] , y todas las palabras aparecen bajo la clave 'V'.
Aquí hay un ejemplo con DependencyParser:
>>> parser = nlpnet.DependencyParser( ' dependency ' , language = ' en ' ) >>> parsed_text = parser.parse( ' The book is on the table. ' ) >>> parsed_text [<nlpnet.taggers.ParsedSentence at 0x10e067f0>] >>> sent = parsed_text[ 0 ] >>> print (sent.to_conll()) 1 The _ DT DT _ 2 NMOD 2 book _ NN NN _ 3 SBJ 3 is _ VBZ VBZ _ 0 ROOT 4 on _ IN IN _ 3 LOC-PRD 5 the _ DT DT _ 6 NMOD 6 table _ NN NN _ 4 PMOD 7 . _ . . _ 3 P
El método to_conll() de los objetos de parsedsentence los imprime en la notación de conll. Se puede acceder a los tokens, etiquetas e índices de cabeza a través de variables de miembros:
>>> sent.tokens [u'The', u'book', u'is', u'on', u'the', u'table', u'.'] >>> sent.heads array([ 1, 2, -1, 2, 5, 3, 2]) >>> sent.labels [u'NMOD', u'SBJ', u'ROOT', u'LOC-PRD', u'NMOD', u'PMOD', u'P']
La variable de miembro heads es una matriz numpy. La posición I-Th en la matriz contiene el índice de la cabeza del token i-th, excepto el token raíz, que tiene una cabeza de -1. Observe que estos índices están basados en 0, mientras que los que se muestran en la función to_conll() están basados en 1.
nlpnet también proporciona scripts para etiquetar texto, capacitar a nuevos modelos y probarlos. Se copian al subdirectorio de scripts de su instalación de Python, que puede incluirse en la variable de ruta del sistema. Puede llamarlos desde la línea de comandos y dar alguna entrada de texto.
$ nlpnet-tag.py pos --data /path/to/nlpnet-data/ --lang pt
O rato roeu a roupa do rei de Roma.
O_ART rato_N roeu_V a_ART roupa_N do_PREP+ART rei_N de_PREP Roma_NPROP ._PU Si no se proporciona --data , el script buscará los modelos capacitados en el directorio actual. --lang predeterminado a en . Si ya tiene texto tokenizado, puede usar la opción -t ; Asume que los tokens están separados por espacios en blanco.
Con etiquetado de rol semántico:
$ nlpnet-tag.py srl /path/to/nlpnet-data/
O rato roeu a roupa do rei de Roma.
O rato roeu a roupa do rei de Roma .
roeu
A1: a roupa do rei de Roma
A0: O rato
V: roeuEl usuario escribió la primera línea, y la segunda es el resultado de la tokenización.
Y análisis de dependencia:
$ nlpnet-tag.py dependency --data dependency --lang en
The book is on the table.
1 The _ DT DT _ 2 NMOD
2 book _ NN NN _ 3 SBJ
3 is _ VBZ VBZ _ 0 ROOT
4 on _ IN IN _ 3 LOC-PRD
5 the _ DT DT _ 6 NMOD
6 table _ NN NN _ 4 PMOD
7 . _ . . _ 3 PPara obtener más información sobre el entrenamiento y la prueba de nuevos modelos y otras funcionalidades, consulte la documentación en http://nilc.icmc.usp.br/nlpnet
Las siguientes referencias describen el diseño de NLPNET, así como los experimentos llevados a cabo. Algunas mejoras en el código se han implementado desde su publicación.