Извлечение слов с помощью NLTK

С веб-сайта 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'), ... ('.', '.')]

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

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

вместо

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

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

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

1 ответ

Решение

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

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

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

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

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

Редактировать: Хотя Ларсман указал: ('The',) будет 1 кортеж, в то время как ('The') == 'The',

Другие вопросы по тегам