Фильтрация определенной части речи NLTK

это должно быть просто, но я как-то упускаю это. У меня есть код:

import nltk

f=open('...\\t.txt','rU')
raw=f.read()
tokens = nltk.word_tokenize(raw)
print nltk.pos_tag(tokens)

который возвращает, например:

"[('процессы', 'NNS'), ('a', 'DT'), ('последовательность', 'NN'), ('из', 'IN'), ('слова', 'NNS' )]

Мне было интересно, как я мог просто собрать, например, только все «NN» или все «DT» И «IN» вместо каждого члена строки.

заранее спасибо


person saph_top    schedule 19.02.2014    source источник


Ответы (1)


Вы можете извлечь только нужные теги с пониманием списка, например:

>>> tags = nltk.pos_tag(tokens)
>>> dt_tags = [t for t in tags if t[1] == "DT"]
>>> dt_tags
[('a', 'DT')]
person jonrsharpe    schedule 19.02.2014
comment
отлично, и просто продублируйте, если я хочу найти DT и NNS tags2 = [t for t в nltk.pos_tag(токены) if t[1] == NNS] tags2 - person saph_top; 19.02.2014
comment
Да, можно даже сделать словарь с тэгами для каждого типа: all_tags = {tag: [t for t in tags if t[1] == tag] for tag in ["DT", "NNS", ...]} - person jonrsharpe; 19.02.2014