2009-02-08 2 views
69

Я играю с Natural Language Toolkit (NLTK).Практические примеры использования NLTK

Его документация (Book и HOWTO) довольно громоздка, и примеры иногда немного продвинуты.

Есть ли какие-либо хорошие, но базовые примеры использования/применения NLTK? Я думаю о таких вещах, как NTLK articles на блоге Stream Hacker.

ответ

26

Вот мой собственный практический пример в пользу кого-либо еще, глядя на этот вопрос до (простите за образец текста, это была первая вещь, которую я нашел на 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() 

Выход:

[('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

Что это значит? Можете ли вы добавить описание? а также зачем использовать глобальные, вы могли бы прямо использовать их правильно – avi

+1

@avi Он производит часть тегов речи для слов (прокрутите вниз, чтобы увидеть полный список). Пример: '('called', 'VBN')' говорит, что 'called' является« причастным глаголом прошлого ». Похоже, что Global был использован так, чтобы переменные могли быть изменены в рамках функции (чтобы их не нужно было передавать каждый раз, когда вызывалась функция). – emh

+0

upvote 1 для Mr. Blobby – Aphire

13

Я автор streamhacker.com (и спасибо за упоминание, я получаю достаточное количество трафика кликов от этого конкретного вопроса). Что конкретно вы пытаетесь сделать? В NLTK есть много инструментов для выполнения различных задач, но в некоторых случаях отсутствует четкая информация о том, как использовать эти инструменты и как их лучше всего использовать. Это также ориентировано на академические проблемы, и поэтому может быть тяжело перевести примеры pedagogical на практические решения.

16

НЛП в целом очень полезна, поэтому вы можете расширить свой поиск до общего применения текстовой аналитики. Я использовал NLTK для помощи MOSS 2010 путем создания таксономии файлов путем извлечения концептуальных карт. Он работал очень хорошо. Это не займет много времени, прежде чем файлы начнут кластеры полезными способами.

Часто для понимания текстовой аналитики вы должны думать в касательных к тем, как вы привыкли думать. Например, текстовая аналитика чрезвычайно полезна для обнаружения. Большинство людей, однако, даже не знают, какая разница между поиском и открытием. Если вы прочитаете эти темы, вы, скорее всего, «найдете» способы, которыми вы, возможно, захотите, чтобы NLTK работал.

Кроме того, рассмотрите ваш взгляд на мир текстовых файлов без NLTK. У вас есть группа случайных строк длины, разделенных пробелами и пунктуацией. Некоторые из знаков препинания изменяют, как они используются, например, период (который также является десятичной точкой и маркером постфикса для сокращения). С помощью NLTK вы получаете слова и многое другое до того, как получаете части речи. Теперь у вас есть дескриптор содержимого. Используйте NLTK для обнаружения понятий и действий в документе. Используйте NLTK для получения «значения» документа. Значение в этом случае относится к сущностным отношениям в документе.

Хорошо, что вас интересует NLTK. В течение нескольких следующих лет текстовая аналитика будет широко распространена. Те, кто это понимает, лучше подходят для лучшего использования новых возможностей.

+0

Можете ли вы разместить ссылку на ссылку MOSS 2010? – alvas

+0

Лучшая ссылка у меня есть на бумаге, которую я написал несколько лет назад. Я собираюсь перестроить свою веб-страницу в этом году, чтобы сосредоточиться на своих радиолокаторах для работы с данными, но какое-то время этот документ должен быть еще: http://www.nectarineimp.com/automated-folksonomy-whitepaper/ –