2012-01-25 2 views
1

предположим, что у меня есть тегированный корпус (например, коричневый корпус), и я хочу извлечь слова, отмеченные только '/ nn'. Например:вычитание фрагментов в python с использованием nltk

  Daniel/np termed/vbd ``/`` extremely/rb conservative/jj ''/'' his/pp$ estimate/nn..... 

это часть отмеченного корпуса коричневого цвета. то, что я хочу сделать, - это извлечь слова, например - оценить (пометить с помощью/nn) и добавить их в список. Но в большинстве случаев я обычно обнаружил, что вы помечаете корпус. Я действительно запутался, увидев этот пример. Может ли кто-нибудь помочь мне, предоставив пример или учебник об извлечении слов из помеченного корпуса.

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

ответ

3

См: http://nltk.googlecode.com/svn/trunk/doc/book/ch05.html

>>> 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'), ... ('.', '.')] 

Если вы просто хотите, чтобы эти помечены NN, вы могли бы сделать:

>>> [nltk.tag.str2tuple(t) for t in sent.split() if t.split('/')[1] == 'NN'] 
[('jury', 'NN'), ('number', 'NN'), ('interest', 'NN')] 

Edit:

Вот sent в виде строки минус эллипсы.

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 ''/'' ./.""" 
+0

спасибо, но если я попробовать с [nltk.tag.str2tuple (т) для т в sent.split(), если t.split ('/') [1] == 'NN'] это дает error [nltk.tag.str2tuple (t) для t в send.split(), если t.split ('/') [1] == 'NN'] IndexError: индекс списка за пределами допустимого диапазона – user1052462

+0

Это странно, я получаю: '[('jury', 'NN'), ('number', 'NN'), ('interest', 'NN')]'. Когда вы скопировали отправленную строку в мой пост, вы опустили эллипсы, то есть «...». Я получаю описанную вами ошибку, если вы не вытащите ее. – sgallen

Смежные вопросы