A continuación se detallan los pasos necesarios para la fragmentación:
- Conversión de oración a un árbol plano.
- Creación de string Chunk usando este árbol.
- Creación de RegexpChunkParser analizando la gramática usando RegexpParser.
- Aplicar la regla de fragmento creada a ChunkString que coincide con la oración en un fragmento.
- Dividir el fragmento más grande en un fragmento más pequeño utilizando las reglas de fragmento definidas.
- ChunkString luego se vuelve a convertir en árbol, con dos subárboles de fragmentos.
Código #1: ChunkString se modifica al aplicar cada regla.
Python3
# Loading Libraries from nltk.chunk.regexp import ChunkString, ChunkRule, ChinkRule from nltk.tree import Tree # ChunkString() starts with the flat tree tree = Tree('S', [('the', 'DT'), ('book', 'NN'), ('has', 'VBZ'), ('many', 'JJ'), ('chapters', 'NNS')]) # Initializing ChunkString() chunk_string = ChunkString(tree) print ("Chunk String : ", chunk_string) # Initializing ChunkRule chunk_rule = ChunkRule('<DT><NN.*><.*>*<NN.*>', 'chunk determiners and nouns') chunk_rule.apply(chunk_string) print ("\nApplied ChunkRule : ", chunk_string) # Another ChinkRule ir = ChinkRule('<VB.*>', 'chink verbs') ir.apply(chunk_string) print ("\nApplied ChinkRule : ", chunk_string, "\n") # Back to chunk sub-tree chunk_string.to_chunkstruct()
Producción:
Chunk String : <<DT> <NN> <VBZ> <JJ> <NNS> Applied ChunkRule : {<DT> <NN> <VBZ> <JJ> <NNS>} Applied ChinkRule : {<DT> <NN>} <VBZ> {<JJ> <NNS>} Tree('S', [Tree('CHUNK', [('the', 'DT'), ('book', 'NN')]), ('has', 'VBZ'), Tree('CHUNK', [('many', 'JJ'), ('chapters', 'NNS')])])
Nota: este código funciona exactamente de la misma manera que se explica en los pasos anteriores de ChunkRule.
Código #2: Cómo realizar esta tarea directamente con RegexpChunkParser.
Python3
# Loading Libraries from nltk.chunk.regexp import ChunkString, ChunkRule, ChinkRule from nltk.tree import Tree from nltk.chunk import RegexpChunkParser # ChunkString() starts with the flat tree tree = Tree('S', [('the', 'DT'), ('book', 'NN'), ('has', 'VBZ'), ('many', 'JJ'), ('chapters', 'NNS')]) # Initializing ChunkRule chunk_rule = ChunkRule('<DT><NN.*><.*>*<NN.*>', 'chunk determiners and nouns') # Another ChinkRule chink_rule = ChinkRule('<VB.*>', 'chink verbs') # Applying RegexpChunkParser chunker = RegexpChunkParser([chunk_rule, chink_rule]) chunker.parse(tree)
Producción:
Tree('S', [Tree('CHUNK', [('the', 'DT'), ('book', 'NN')]), ('has', 'VBZ'), Tree('CHUNK', [('many', 'JJ'), ('chapters', 'NNS')])])
Código n.º 3: análisis con diferentes tipos de fragmentos.
Python3
# Loading Libraries from nltk.chunk.regexp import ChunkString, ChunkRule, ChinkRule from nltk.tree import Tree from nltk.chunk import RegexpChunkParser # ChunkString() starts with the flat tree tree = Tree('S', [('the', 'DT'), ('book', 'NN'), ('has', 'VBZ'), ('many', 'JJ'), ('chapters', 'NNS')]) # Initializing ChunkRule chunk_rule = ChunkRule('<DT><NN.*><.*>*<NN.*>', 'chunk determiners and nouns') # Another ChinkRule chink_rule = ChinkRule('<VB.*>', 'chink verbs') # Applying RegexpChunkParser chunker = RegexpChunkParser([chunk_rule, chink_rule], chunk_label ='CP') chunker.parse(tree)
Producción:
Tree('S', [Tree('CP', [('the', 'DT'), ('book', 'NN')]), ('has', 'VBZ'), Tree('CP', [('many', 'JJ'), ('chapters', 'NNS')])])
Publicación traducida automáticamente
Artículo escrito por Mohit Gupta_OMG 🙂 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA