2009-02-08 36 views

Respuesta

26

Aquí es mi propio ejemplo práctico en beneficio de una persona que quiere esta pregunta hacia arriba (excusa el texto de la muestra, que fue el primero que me encontré en Wikipedia):

import nltk 
import pprint 

tokenizer = None 
tagger = None 

def init_nltk(): 
    global tokenizer 
    global tagger 
    tokenizer = nltk.tokenize.RegexpTokenizer(r'\w+|[^\w\s]+') 
    tagger = nltk.UnigramTagger(nltk.corpus.brown.tagged_sents()) 

def tag(text): 
    global tokenizer 
    global tagger 
    if not tokenizer: 
     init_nltk() 
    tokenized = tokenizer.tokenize(text) 
    tagged = tagger.tag(tokenized) 
    tagged.sort(lambda x,y:cmp(x[1],y[1])) 
    return tagged 

def main(): 
    text = """Mr Blobby is a fictional character who featured on Noel 
    Edmonds' Saturday night entertainment show Noel's House Party, 
    which was often a ratings winner in the 1990s. Mr Blobby also 
    appeared on the Jamie Rose show of 1997. He was designed as an 
    outrageously over the top parody of a one-dimensional, mute novelty 
    character, which ironically made him distinctive, absurd and popular. 
    He was a large pink humanoid, covered with yellow spots, sporting a 
    permanent toothy grin and jiggling eyes. He communicated by saying 
    the word "blobby" in an electronically-altered voice, expressing 
    his moods through tone of voice and repetition. 

    There was a Mrs. Blobby, seen briefly in the video, and sold as a 
    doll. 

    However Mr Blobby actually started out as part of the 'Gotcha' 
    feature during the show's second series (originally called 'Gotcha 
    Oscars' until the threat of legal action from the Academy of Motion 
    Picture Arts and Sciences[citation needed]), in which celebrities 
    were caught out in a Candid Camera style prank. Celebrities such as 
    dancer Wayne Sleep and rugby union player Will Carling would be 
    enticed to take part in a fictitious children's programme based around 
    their profession. Mr Blobby would clumsily take part in the activity, 
    knocking over the set, causing mayhem and saying "blobby blobby 
    blobby", until finally when the prank was revealed, the Blobby 
    costume would be opened - revealing Noel inside. This was all the more 
    surprising for the "victim" as during rehearsals Blobby would be 
    played by an actor wearing only the arms and legs of the costume and 
    speaking in a normal manner.[citation needed]""" 
    tagged = tag(text)  
    l = list(set(tagged)) 
    l.sort(lambda x,y:cmp(x[1],y[1])) 
    pprint.pprint(l) 

if __name__ == '__main__': 
    main() 

Salida:

[('rugby', None), 
('Oscars', None), 
('1990s', None), 
('",', None), 
('Candid', None), 
('"', None), 
('blobby', None), 
('Edmonds', None), 
('Mr', None), 
('outrageously', None), 
('.[', None), 
('toothy', None), 
('Celebrities', None), 
('Gotcha', None), 
(']),', None), 
('Jamie', None), 
('humanoid', None), 
('Blobby', None), 
('Carling', None), 
('enticed', None), 
('programme', None), 
('1997', None), 
('s', None), 
("'", "'"), 
('[', '('), 
('(', '('), 
(']', ')'), 
(',', ','), 
('.', '.'), 
('all', 'ABN'), 
('the', 'AT'), 
('an', 'AT'), 
('a', 'AT'), 
('be', 'BE'), 
('were', 'BED'), 
('was', 'BEDZ'), 
('is', 'BEZ'), 
('and', 'CC'), 
('one', 'CD'), 
('until', 'CS'), 
('as', 'CS'), 
('This', 'DT'), 
('There', 'EX'), 
('of', 'IN'), 
('inside', 'IN'), 
('from', 'IN'), 
('around', 'IN'), 
('with', 'IN'), 
('through', 'IN'), 
('-', 'IN'), 
('on', 'IN'), 
('in', 'IN'), 
('by', 'IN'), 
('during', 'IN'), 
('over', 'IN'), 
('for', 'IN'), 
('distinctive', 'JJ'), 
('permanent', 'JJ'), 
('mute', 'JJ'), 
('popular', 'JJ'), 
('such', 'JJ'), 
('fictional', 'JJ'), 
('yellow', 'JJ'), 
('pink', 'JJ'), 
('fictitious', 'JJ'), 
('normal', 'JJ'), 
('dimensional', 'JJ'), 
('legal', 'JJ'), 
('large', 'JJ'), 
('surprising', 'JJ'), 
('absurd', 'JJ'), 
('Will', 'MD'), 
('would', 'MD'), 
('style', 'NN'), 
('threat', 'NN'), 
('novelty', 'NN'), 
('union', 'NN'), 
('prank', 'NN'), 
('winner', 'NN'), 
('parody', 'NN'), 
('player', 'NN'), 
('actor', 'NN'), 
('character', 'NN'), 
('victim', 'NN'), 
('costume', 'NN'), 
('action', 'NN'), 
('activity', 'NN'), 
('dancer', 'NN'), 
('grin', 'NN'), 
('doll', 'NN'), 
('top', 'NN'), 
('mayhem', 'NN'), 
('citation', 'NN'), 
('part', 'NN'), 
('repetition', 'NN'), 
('manner', 'NN'), 
('tone', 'NN'), 
('Picture', 'NN'), 
('entertainment', 'NN'), 
('night', 'NN'), 
('series', 'NN'), 
('voice', 'NN'), 
('Mrs', 'NN'), 
('video', 'NN'), 
('Motion', 'NN'), 
('profession', 'NN'), 
('feature', 'NN'), 
('word', 'NN'), 
('Academy', 'NN-TL'), 
('Camera', 'NN-TL'), 
('Party', 'NN-TL'), 
('House', 'NN-TL'), 
('eyes', 'NNS'), 
('spots', 'NNS'), 
('rehearsals', 'NNS'), 
('ratings', 'NNS'), 
('arms', 'NNS'), 
('celebrities', 'NNS'), 
('children', 'NNS'), 
('moods', 'NNS'), 
('legs', 'NNS'), 
('Sciences', 'NNS-TL'), 
('Arts', 'NNS-TL'), 
('Wayne', 'NP'), 
('Rose', 'NP'), 
('Noel', 'NP'), 
('Saturday', 'NR'), 
('second', 'OD'), 
('his', 'PP$'), 
('their', 'PP$'), 
('him', 'PPO'), 
('He', 'PPS'), 
('more', 'QL'), 
('However', 'RB'), 
('actually', 'RB'), 
('also', 'RB'), 
('clumsily', 'RB'), 
('originally', 'RB'), 
('only', 'RB'), 
('often', 'RB'), 
('ironically', 'RB'), 
('briefly', 'RB'), 
('finally', 'RB'), 
('electronically', 'RB-HL'), 
('out', 'RP'), 
('to', 'TO'), 
('show', 'VB'), 
('Sleep', 'VB'), 
('take', 'VB'), 
('opened', 'VBD'), 
('played', 'VBD'), 
('caught', 'VBD'), 
('appeared', 'VBD'), 
('revealed', 'VBD'), 
('started', 'VBD'), 
('saying', 'VBG'), 
('causing', 'VBG'), 
('expressing', 'VBG'), 
('knocking', 'VBG'), 
('wearing', 'VBG'), 
('speaking', 'VBG'), 
('sporting', 'VBG'), 
('revealing', 'VBG'), 
('jiggling', 'VBG'), 
('sold', 'VBN'), 
('called', 'VBN'), 
('made', 'VBN'), 
('altered', 'VBN'), 
('based', 'VBN'), 
('designed', 'VBN'), 
('covered', 'VBN'), 
('communicated', 'VBN'), 
('needed', 'VBN'), 
('seen', 'VBN'), 
('set', 'VBN'), 
('featured', 'VBN'), 
('which', 'WDT'), 
('who', 'WPS'), 
('when', 'WRB')] 
+5

¿Qué significa esto? ¿Puedes agregar alguna descripción? y también por qué usar global, podría haberlos utilizado directamente. – avi

+1

@avi Está produciendo etiquetas de Parte del discurso para las palabras (desplácese hacia abajo para ver la lista completa). Ej: '('llamado', 'VBN')' está diciendo que 'llamado' es un' verbo de participio pasado'. Parece que se usó Global para poder cambiar las variables dentro del alcance de la función (para que no tengan que pasarse cada vez que se llame a la función). – emh

+0

upvote 1 para Mr. Blobby – Aphire

13

Soy el autor de streamhacker.com (y gracias por la mención, obtengo una buena cantidad de tráfico de clics de esta pregunta en particular). ¿Qué estás tratando de hacer específicamente? NLTK tiene muchas herramientas para hacer varias cosas, pero de alguna manera le falta información clara sobre para qué usar las herramientas y la mejor manera de usarlas. También está orientado a problemas académicos, por lo que puede ser complicado traducir los ejemplos de pedagogical a soluciones prácticas.

16

NLP en general es muy útil, por lo que es posible que desee ampliar su búsqueda a la aplicación general de análisis de texto. Utilicé NLTK para ayudar a MOSS 2010 generando taxonomía de archivos mediante la extracción de mapas conceptuales. Funcionó realmente bien. No pasa mucho tiempo antes de que los archivos comiencen a agruparse de maneras útiles.

A menudo, para comprender el análisis de texto, debe pensar en las tangentes de la manera en que está acostumbrado a pensar. Por ejemplo, el análisis de texto es extremadamente útil para el descubrimiento. La mayoría de las personas, sin embargo, ni siquiera saben cuál es la diferencia entre la búsqueda y el descubrimiento. Si lees sobre esos temas, probablemente "descubras" la forma en que podrías querer poner a NLTK a trabajar.

Además, tenga en cuenta su visión del mundo de los archivos de texto sin NLTK. Tienes un montón de cadenas de longitud aleatorias separadas por espacios en blanco y puntuación. Algunos de los signos de puntuación cambian la forma en que se usa, como el punto (que también es un punto decimal y un marcador de postfijo para una abreviación). Con NLTK se obtienen palabras y más hasta el punto de obtener partes del discurso. Ahora tiene un control sobre el contenido. Use NLTK para descubrir los conceptos y acciones en el documento. Use NLTK para obtener el "significado" del documento. El significado en este caso se refiere a las relaciones esenciales en el documento.

Es bueno tener curiosidad acerca de NLTK. Text Analytics está listo para una gran expansión en los próximos años. Aquellos que lo entienden estarán mejor preparados para aprovechar mejor las nuevas oportunidades.

+0

¿Puedes publicar un enlace a la referencia de MOSS 2010? – alvas

+0

El mejor vínculo que tengo es para un artículo que escribí hace unos años. Voy a reconstruir mi página web este año para centrarme en mis radiotelescopios de minería de datos de trabajo, pero por un tiempo este documento debería estar todavía en pie: http://www.nectarineimp.com/automated-folksonomy-whitepaper/ –

Cuestiones relacionadas