2009-02-08 49 views

Trả lời

26

Dưới đây là ví dụ thực tế của riêng tôi vì lợi ích của bất cứ ai khác tìm câu hỏi này lên (xin lỗi các văn bản mẫu, nó là điều đầu tiên tôi tìm thấy trên 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() 

Output:

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

Điều này làm gì? Bạn có thể thêm một số mô tả? và cũng là lý do tại sao sử dụng toàn cầu, bạn có thể trực tiếp sử dụng chúng ngay – avi

+1

@avi Nó đang sản xuất một phần của thẻ thoại cho các từ (cuộn xuống để xem danh sách đầy đủ). Ví dụ: '('được gọi là', 'VBN')' đang nói rằng 'được gọi' là một 'phân từ quá khứ'. Có vẻ như Global đã được sử dụng để các biến có thể được thay đổi trong phạm vi chức năng (để chúng không phải được chuyển qua mỗi lần hàm được gọi). – emh

+0

upvote 1 cho Mr. Blobby – Aphire

13

Tôi là tác giả của streamhacker.com (và cảm ơn vì đã đề cập đến, tôi nhận được lưu lượng truy cập nhấp chuột hợp lý từ câu hỏi cụ thể này). Cụ thể bạn đang cố gắng làm gì? NLTK có rất nhiều công cụ để thực hiện nhiều việc khác nhau, nhưng có phần thiếu thông tin rõ ràng về những gì để sử dụng các công cụ và cách tốt nhất để sử dụng chúng. Nó cũng hướng tới các vấn đề học thuật, và do đó nó có thể nặng nề để dịch các ví dụ pedagogical sang các giải pháp thực tế.

16

NLP nói chung rất hữu ích để bạn có thể muốn mở rộng tìm kiếm của mình sang ứng dụng phân tích văn bản chung. Tôi đã sử dụng NLTK để hỗ trợ MOSS 2010 bằng cách tạo phân loại tệp bằng cách trích xuất các bản đồ khái niệm. Nó hoạt động rất tốt. Không mất nhiều thời gian trước khi các tệp bắt đầu cụm theo các cách hữu ích.

Thông thường, thời gian để hiểu phân tích văn bản bạn phải suy nghĩ trong tangents theo cách bạn đang sử dụng để suy nghĩ. Ví dụ: phân tích văn bản cực kỳ hữu ích để khám phá. Hầu hết mọi người, mặc dù, thậm chí không biết sự khác biệt giữa tìm kiếm và khám phá là gì. Nếu bạn đọc những chủ đề đó, bạn sẽ có khả năng "khám phá" những cách mà bạn có thể muốn đặt NLTK hoạt động.

Ngoài ra, hãy xem xét thế giới của bạn về các tệp văn bản không có NLTK. Bạn có một chuỗi các chuỗi độ dài ngẫu nhiên được phân cách bằng dấu cách và dấu chấm câu. Một số dấu chấm câu thay đổi cách nó được sử dụng như dấu chấm (cũng là dấu chấm thập phân và dấu bưu điện cho chữ viết tắt.) Với NLTK bạn nhận được từ và nhiều hơn nữa đến mức bạn nhận được các phần của lời nói. Bây giờ bạn có một xử lý về nội dung. Sử dụng NLTK để khám phá các khái niệm và hành động trong tài liệu. Sử dụng NLTK để lấy "ý nghĩa" của tài liệu. Có nghĩa là trong trường hợp này đề cập đến các mối quan hệ essencial trong tài liệu.

Thật là một điều hay khi tò mò về NLTK. Phân tích văn bản được đặt thành đột phá theo một cách lớn trong vài năm tới. Những người hiểu nó sẽ phù hợp hơn để tận dụng các cơ hội mới tốt hơn.

+0

Bạn có thể đăng liên kết tới tài liệu tham khảo MOSS 2010 không? – alvas

+0

Các liên kết tốt nhất tôi có là một bài báo tôi đã viết một vài năm trước đây. Tôi sẽ xây dựng lại trang web của tôi trong năm nay để tập trung vào các kính viễn vọng vô tuyến khai thác dữ liệu công việc của tôi, nhưng trong một thời gian, bài báo này vẫn được duy trì: http://www.nectarineimp.com/automated-folksonomy-whitepaper/ –

Các vấn đề liên quan