Identificación de los nombres en una cadena de texto

Supongamos que necesitamos identificar todos los nombres (comunes y propios, en singular y en plural) que existen en una cadena de texto -y supongamos que estamos trabajando con un texto en inglés-.

s = "This isn't a very long sentence but it's full of interesting words"

Podemos extraer fácilmente estos tokens utilizando la librería nltk y la función pos_tag ofrecida por ésta. Para ello vamos a identificar el 'POS' (categoría gramatical) de cada palabra:

import nltk

tags = nltk.pos_tag(nltk.word_tokenize(s))
tags

[('This', 'DT'),
 ('is', 'VBZ'),
 ("n't", 'RB'),
 ('a', 'DT'),
 ('very', 'RB'),
 ('long', 'JJ'),
 ('sentence', 'NN'),
 ('but', 'CC'),
 ('it', 'PRP'),
 ("'s", 'VBZ'),
 ('full', 'JJ'),
 ('of', 'IN'),
 ('interesting', 'JJ'),
 ('words', 'NNS')]

Ahora extraeremos aquellas cuyo POS pertenezca al conjunto ['NN','NNS', 'NNP', 'NNPS'] (puede obtenerse el listado de tags que se aplican por defecto, el Penn Treebank tagset, en esta web):

nouns = [(word, tag) for word, tag in tags if tag in ['NN','NNS', 'NNP', 'NNPS']]
nouns

[('sentence', 'NN'), ('words', 'NNS')]
Submitted by admin on Mon, 12/03/2018 - 21:30