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