PNL | Extracción de nombres propios

La fragmentación de todos los nombres propios (etiquetados con NNP) es una forma muy sencilla de realizar la extracción de entidades nombradas. Se puede crear una gramática simple que combine todos los nombres propios en un fragmento de NOMBRE usando la clase RegexpParser.

Luego, podemos probar esto en la primera oración etiquetada de treebank_chunk para comparar los resultados con la receta anterior:

Código n.º 1: probarlo en la primera oración etiquetada de treebank_chunk

from nltk.corpus import treebank_chunk
from nltk.chunk import RegexpParser
from chunkers import sub_leaves
  
chunker = RegexpParser(r'''  
                       NAME:
                       {<NNP>+}
                       ''')
      
print ("Named Entities : \n", 
       sub_leaves(chunker.parse(
               treebank_chunk.tagged_sents()[0]), 'NAME'))

Producción :

Named Entities : 
[[('Pierre', 'NNP'), ('Vinken', 'NNP')], [('Nov.', 'NNP')]]

Nota: el código anterior devuelve todos los nombres propios: ‘Pierre’, ‘Vinken’, ‘Nov.’
NAME chunker es un uso simple de la clase RegexpParser. Todas las secuencias de palabras etiquetadas con NNP se combinan en fragmentos de NOMBRE.
PersonChunker classse puede usar si uno solo quiere fragmentar los nombres de las personas.
 
Código #2: clase PersonChunker

from nltk.chunk import ChunkParserI
from nltk.chunk.util import conlltags2tree
from nltk.corpus import names
  
class PersonChunker(ChunkParserI):
    def __init__(self):
        self.name_set = set(names.words())
          
    def parse(self, tagged_sent):
          
        iobs = []
        in_person = False
        for word, tag in tagged_sent:
            if word in self.name_set and in_person:
                iobs.append((word, tag, 'I-PERSON'))
            elif word in self.name_set:
                iobs.append((word, tag, 'B-PERSON'))
                in_person = True
            else:
                iobs.append((word, tag, 'O'))
                in_person = False
                  
        return conlltags2tree(iobs)

PersonChunker classcomprueba si cada palabra está en su conjunto de nombres (construido a partir del corpus de nombres) iterando sobre la oración etiquetada. Utiliza etiquetas IOB B-PERSON o I-PERSON si la palabra actual está en el conjunto de nombres, dependiendo de si la palabra anterior también estaba en el conjunto de nombres. O La etiqueta IOB se asigna a la palabra que no está en el argumento del conjunto de nombres. La lista de etiquetas IOB se convierte en un árbol conlltags2tree()después de completarse.
 
Código n. ° 3: uso de la clase PersonChunker en la misma oración etiquetada

from nltk.corpus import treebank_chunk
from nltk.chunk import RegexpParser
from chunkers import sub_leaves
  
from chunkers import PersonChunker
chunker = PersonChunker()
print ("Person name  : ", 
       sub_leaves(chunker.parse(
               treebank_chunk.tagged_sents()[0]), 'PERSON'))

Producción :

Person name  : [[('Pierre', '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 *