2009-02-08 7 views

Répondre

26

Voici mon propre exemple pratique au profit de tous ceux qui cherchent autre cette question vers le haut (excusez le texte de l'échantillon, ce fut la première chose que j'ai trouvé sur 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() 

Sortie:

[('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'est-ce que cela fait? Pouvez-vous ajouter une description? et aussi pourquoi utiliser global, vous auriez pu les utiliser directement – avi

+1

@avi Il produit une partie des étiquettes de mots pour les mots (faites défiler vers le bas pour voir la liste complète). Ex: '('called', 'VBN')' indique que 'called' est un verbe 'participe participe'. On dirait que Global a été utilisé pour que les variables puissent être modifiées dans le cadre de la fonction (de sorte qu'elles n'aient pas à être transmises à chaque fois que la fonction a été appelée). – emh

+0

upvote 1 pour M. Blobby – Aphire

13

Je suis l'auteur de streamhacker.com (et merci pour la mention, je reçois une bonne quantité de trafic de clics de cette question particulière). Qu'est-ce que vous essayez précisément de faire? NLTK a beaucoup d'outils pour faire diverses choses, mais il manque quelque peu d'informations claires sur l'utilisation de ces outils et la meilleure façon de les utiliser. Il est également orienté vers les problèmes académiques, et il peut donc être difficile de traduire les exemples pedagogical en solutions pratiques.

16

PNL en général est très utile, donc vous voudrez peut-être élargir votre recherche à l'application générale de l'analyse de texte. J'ai utilisé NLTK pour aider MOSS 2010 en générant une taxonomie de fichier en extrayant des cartes conceptuelles. Cela a très bien fonctionné. Il ne faut pas longtemps avant que les fichiers commencent à se regrouper de manière utile.

Souvent, pour comprendre l'analyse de texte, vous devez penser de façon tangente aux façons dont vous avez l'habitude de penser. Par exemple, l'analyse de texte est extrêmement utile pour la découverte. Cependant, la plupart des gens ne savent même pas quelle est la différence entre la recherche et la découverte. Si vous lisez sur ces sujets, vous allez probablement "découvrir" les façons dont vous pourriez vouloir mettre NLTK au travail.

En outre, considérez votre vision du monde des fichiers texte sans NLTK. Vous avez un tas de chaînes de longueur aléatoire séparées par des espaces et des signes de ponctuation. Une partie de la ponctuation change la façon dont elle est utilisée, comme la période (qui est également un point décimal et un marqueur de suffixe pour une abréviation). Avec NLTK, vous obtenez des mots et plus au point où vous obtenez des parties de discours. Maintenant, vous avez un contrôle sur le contenu. Utilisez NLTK pour découvrir les concepts et les actions dans le document. Utilisez NLTK pour obtenir le "sens" du document. Le sens dans ce cas se réfère aux relations essentielles dans le document.

C'est une bonne chose d'être curieux à propos de NLTK. Text Analytics devrait connaître une forte croissance au cours des prochaines années. Ceux qui le comprennent seront mieux à même de profiter des nouvelles opportunités.

+0

Pouvez-vous publier un lien vers la référence MOSS 2010? – alvas

+0

Le meilleur lien que j'ai est un article que j'ai écrit il y a quelques années. Je vais reconstruire ma page Web cette année pour me concentrer sur mon travail sur les radiotélescopes de minage de données, mais pour un moment ce document devrait être encore en place: http://www.nectarineimp.com/automated-folksonomy-whitepaper/ –