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 class
se 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 class
comprueba 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