2012-02-05 2 views
1

с сайта http://nltk.googlecode.com/svn/trunk/doc/book/ch05.html Я узнал о разделении помеченных слов из помеченного корпуса.Извлечение слов с использованием nltk

Код на сайте:

>>> sent = ''' 
... The/AT grand/JJ jury/NN commented/VBD on/IN a/AT number/NN of/IN 
... other/AP topics/NNS ,/, AMONG/IN them/PPO the/AT Atlanta/NP and/CC 
... Fulton/NP-tl County/NN-tl purchasing/VBG departments/NNS which/WDT it/PPS 
... said/VBD ``/`` ARE/BER well/QL operated/VBN and/CC follow/VB generally/RB 
... accepted/VBN practices/NNS which/WDT inure/VB to/IN the/AT best/JJT 
... interest/NN of/IN both/ABX governments/NNS ''/'' ./. 
... ''' 
>>> [nltk.tag.str2tuple(t) for t in sent.split()] 
    [('The', 'AT'), ('grand', 'JJ'), ('jury', 'NN'), ('commented', 'VBD'), 
    ('on', 'IN'), ('a', 'AT'), ('number', 'NN'), ... ('.', '.')] 

здесь я получить список отмеченных слов. Я хочу список, содержащий только слова. Например:

[('The'), ('grand'), ('jury')... 

вместо

('The', 'AT'), ('grand', 'JJ'), ('jury', 'NN')... 

Любое предложение, как я могу получить это?

Заранее спасибо.

ответ

1

Я не nltk эксперт, но вы можете сразу выбрать первый кортеж элемент с:

[nltk.tag.str2tuple(t)[0] for t in sent.split()] 

Это даст вам список всех слов:

['The', 'grand', 'jury'... 

Что вы» re ask немного запутывает, потому что в вашем примере вывода каждый элемент обернут внутри 1-кортежа, я на самом деле не вижу смысла в этом.

Edit: Несмотря на то, как larsman отметил: ('The',) будет 1-кортеж, в то время как ('The') == 'The'.

+2

На самом деле, нет ни одного кортежа в примере OP; '('The') == 'The''. –

+0

@larsmans: Вы правы, спасибо! –