PNL | Fragmentación distribuida con Execnet

El artículo tiene como objetivo realizar fragmentación y etiquetado en una puerta de enlace execnet. Aquí se enviarán dos objetos en lugar de uno, y se recibe un Árbol, que requiere decapado y decapado para su serialización.

Cómo funciona ?

  • Utilice un etiquetador en escabeche.
  • En primer lugar, seleccione el fragmentador predeterminado utilizado por nltk.chunk.ne_chunk() , aunque cualquier fragmentador serviría.
  • A continuación, cree una puerta de enlace para el módulo remote_chunk, obtenga un canal y envíe el etiquetador y el fragmentador en escabeche.
  • Luego, reciba un árbol encurtido, que se puede decapar e inspeccionar para ver el resultado. Finalmente, salga de la puerta de enlace:

Código: Explicando el funcionamiento

# importing libraries
import execnet, remote_chunk
import nltk.data, nltk.tag, nltk.chunk
import pickle
from nltk.corpus import treebank_chunk
  
tagger = pickle.dumps(nltk.data.load(nltk.tag._POS_TAGGER))
chunker = pickle.dumps(
        nltk.data.load(nltk.chunk._MULTICLASS_NE_CHUNKER))
gw = execnet.makegateway()
  
channel = gw.remote_exec(remote_chunk)
channel.send(tagger)
channel.send(chunker)
channel.send(treebank_chunk.sents()[0])
  
chunk_tree = pickle.loads(channel.receive())
  
print (chunk_tree)
gw.exit()

Producción :

Tree('S', [Tree('PERSON', [('Pierre', 'NNP')]), Tree('ORGANIZATION',
[('Vinken', 'NNP')]), (', ', ', '), ('61', 'CD'), ('years', 'NNS'),
('old', 'JJ'), (', ', ', '), ('will', 'MD'), ('join', 'VB'), ('the',
'DT'), ('board', 'NN'), ('as', 'IN'), ('a', 'DT'), ('nonexecutive',
'JJ'), ('director', 'NN'), ('Nov.', 'NNP'), ('29', 'CD'), ('.', '.')]) 

La comunicación esta vez es ligeramente diferente como en la figura que se muestra a continuación:

  • El módulo remote_chunk.py es un poco más complicado que el módulo remote_tag.py.
  • Además de recibir un etiquetador en escabeche, también espera recibir un fragmentador en escabeche que implemente la interfaz ChunkerI.
  • Una vez que tiene un etiquetador y un fragmentador, espera recibir cualquier cantidad de oraciones tokenizadas, que etiqueta y analiza en un árbol. Luego, este árbol se decapa y se envía de vuelta por el canal:

Código: Explicando el funcionamiento anterior

import pickle
  
if __name__ == '__channelexec__':
    tagger = pickle.loads(channel.receive())
    chunker = pickle.loads(channel.receive())
  
for sentence in channel:
    chunk_tree = chunker.parse(tagger.tag(sent))
    channel.send(pickle.dumps(chunk_tree))

La única dependencia externa del módulo remote_chunk es el módulo pickle, que forma parte de la biblioteca estándar de Python. No necesita importar ningún módulo NLTK para usar el etiquetador o el fragmentador, porque todos los datos necesarios se conservan y se envían por el canal.

Publicación traducida automáticamente

Artículo escrito por mathemagic y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *