Se pueden usar diferentes tipos de subclases ChunkParserI para identificar los fragmentos LOCATION. Ya que utiliza el corpus de diccionarios geográficos para identificar palabras de ubicación. El corpus del nomenclátor es un WordListCorpusReader class
que contiene las siguientes palabras de ubicación:
- Nombres de países
- Estados de EE. UU. y abreviaturas
- estados mexicanos
- Principales ciudades de EE. UU.
- provincias canadienses
LocationChunker class
buscando palabras que se encuentran en el corpus de diccionarios geográficos iterando sobre una oración etiquetada. Crea un fragmento de UBICACIÓN usando etiquetas IOB cuando encuentra una o más palabras de ubicación. Las etiquetas IOB LOCATION se producen en el iob_locations()
y el parse()
método convierte las etiquetas IOB en Tree.
Código #1: clase LocationChunker
from nltk.chunk import ChunkParserI from nltk.chunk.util import conlltags2tree from nltk.corpus import gazetteers class LocationChunker(ChunkParserI): def __init__(self): self.locations = set(gazetteers.words()) self.lookahead = 0 for loc in self.locations: nwords = loc.count(' ') if nwords > self.lookahead: self.lookahead = nwords
Código #2: método iob_locations()
def iob_locations(self, tagged_sent): i = 0 l = len(tagged_sent) inside = False while i < l: word, tag = tagged_sent[i] j = i + 1 k = j + self.lookahead nextwords, nexttags = [], [] loc = False while j < k: if ' '.join([word] + nextwords) in self.locations: if inside: yield word, tag, 'I-LOCATION' else: yield word, tag, 'B-LOCATION' for nword, ntag in zip(nextwords, nexttags): yield nword, ntag, 'I-LOCATION' loc, inside = True, True i = j break if j < l: nextword, nexttag = tagged_sent[j] nextwords.append(nextword) nexttags.append(nexttag) j += 1 else: break if not loc: inside = False i += 1 yield word, tag, 'O' def parse(self, tagged_sent): iobs = self.iob_locations(tagged_sent) return conlltags2tree(iobs)
Código #3: use la clase LocationChunker para analizar la oración
from nltk.chunk import ChunkParserI from chunkers import sub_leaves from chunkers import LocationChunker t = loc.parse([('San', 'NNP'), ('Francisco', 'NNP'), ('CA', 'NNP'), ('is', 'BE'), ('cold', 'JJ'), ('compared', 'VBD'), ('to', 'TO'), ('San', 'NNP'), ('Jose', 'NNP'), ('CA', 'NNP')]) print ("Location : \n", sub_leaves(t, 'LOCATION'))
Producción :
Location : [[('San', 'NNP'), ('Francisco', 'NNP'), ('CA', 'NNP')], [('San', 'NNP'), ('Jose', 'NNP'), ('CA', '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