PNL | Extracción de entidades con nombre

El reconocimiento de una entidad nombrada es un tipo específico de extracción de fragmentos que utiliza etiquetas de entidades junto con etiquetas de fragmentos.
Las etiquetas de entidad comunes incluyen PERSONA, UBICACIÓN y ORGANIZACIÓN. Las oraciones etiquetadas con POS se analizan en árboles de fragmentos con fragmentación normal, pero las etiquetas de los árboles pueden ser etiquetas de entidades en lugar de etiquetas de frases de fragmentos. NLTK ya tiene un fragmentador de entidades con nombre preentrenado que se puede usar usando ne_chunk()el método en el módulo nltk.chunk. Este método fragmenta una sola oración en un árbol.

Código n. ° 1: uso de ne-chunk() en la oración etiquetada del corpus treebank_chunk

from nltk.corpus import treebank_chunk
from nltk.chunk import ne_chunk
  
ne_chunk(treebank_chunk.tagged_sents()[0])

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'), ('.', '.')])

se encuentran dos etiquetas de entidad: PERSONA y ORGANIZACIÓN. Cada uno de estos subárboles contiene una lista de las palabras que se reconocen como PERSONA u ORGANIZACIÓN.
 
Código #2: Método para extraer entidades nombradas usando hojas de todos los subárboles

def sub_leaves(tree, label):
    return [t.leaves() 
            for t in tree.subtrees(
                    lambda s: label() == label)]

 
Código # 3: usar el método para obtener todas las hojas de PERSONA u ORGANIZACIÓN de un árbol

tree = ne_chunk(treebank_chunk.tagged_sents()[0])
  
from chunkers import sub_leaves
print ("Named entities of PERSON : ", 
       sub_leaves(tree, 'PERSON'))
  
print ("\nNamed entites of ORGANIZATION : ", 
       sub_leaves(tree, 'ORGANIZATION'))

Producción :

Named entities of PERSON : [[('Pierre', 'NNP')]]

Named entites of ORGANIZATION : [[('Vinken', 'NNP')]]

Para procesar varias oraciones a la vez, chunk_ne_sents()se utiliza. En el siguiente código, las primeras 10 oraciones de treebank_chunk.tagged_sents()se procesan para obtener ORGANIZACIÓN sub_leaves().
 
Código #4: Entendamoschunk_ne_sents()

from nltk.chunk import chunk_ne_sents
from nltk.corpus import treebank_chunk
  
trees = chunk_ne_sents(treebank_chunk.tagged_sents()[:10])
[sub_leaves(t, 'ORGANIZATION') for t in trees]

Producción :

[[[('Vinken', 'NNP')]], [[('Elsevier', 'NNP')]], [[('Consolidated', 'NNP'), 
('Gold', 'NNP'), ('Fields', 'NNP')]], [], [], [[('Inc.', 'NNP')], 
[('Micronite', 'NN')]], [[('New', 'NNP'), ('England', 'NNP'),
('Journal', 'NNP')]], [[('Lorillard', 'NNP')]], [], []]

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

Deja una respuesta

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