python - tutorial - Ejemplos prácticos de uso de NLTK
nltk tokenize (3)
Aquí está mi propio ejemplo práctico para el beneficio de cualquier otra persona que busque esta pregunta (disculpe el texto de muestra, fue lo primero que 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'')]
Estoy jugando con el Natural Language Toolkit (NLTK).
Su documentación ( Book y HOWTO ) es bastante voluminosa y los ejemplos a veces son un poco avanzados.
¿Hay ejemplos buenos pero básicos de usos / aplicaciones de NLTK? Estoy pensando en cosas como los artículos de NTLK en el blog de Stream Hacker .
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, debes pensar en términos de tangentes a las formas en que estás 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, considere 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.
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 pesado traducir los ejemplos pedagogical a soluciones prácticas.