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 -supongamos que estamos trabajando con un texto en inglés-. 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 y 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):

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

tags = nltk.pos_tag(word_tokenize(s))

nouns = [word for word, tag in tagged if tag in ['NN','NNS', 'NNP', 'NNPS'] ]