# -*- coding:utf-8 -*-
import nltk
def findtags(tag_prefix,tagged_text):a=tagged_text#這幾行代碼是為了輸出tagged_textprint a[0][0]print a[0][1]print [(tag,word) for (word,tag) in tagged_text if tag.startswith(tag_prefix)]#這個代碼是為了輸出列表推導式print '-'*100cfd=nltk.ConditionalFreqDist((tag,word) for (word,tag) in tagged_text if tag.startswith(tag_prefix))#這句話的意思是,對于文章(tagged_text)中詞性(tag)以NN(tag_prefix)開始的(word,tag),改變前后順序賦值給(tag,word),最后進行詞頻統計(ConditionalFreqDist)print"cfd=",cfdprint '-'*200print [(tag,cfd[tag].keys()[:5]) for tag in cfd.conditions()]#keys()按遞減順序遍歷。這句話的意思是找出頻率最高的六個詞語print '-'*200return dict((tag,cfd[tag].keys()[:5]) for tag in cfd.conditions())
if __name__=='__main__':tagdict=findtags('NN',nltk.corpus.brown.tagged_words(categories='news'))# print nltk.corpus.brown.tagged_words(categories='news')# print '*'*100# for tag in sorted(tagdict):# print (tag,tagdict[tag])# 用中括號括起來才叫列表推導式
# 用小括號括起來的叫生成器
#上面的列表推導式的另外一種等效的寫法是:
# t = []
# for word,tag in tagged_text:
# if xxxx:
# t.append((tag,word))
# ConditionalFreqDist,這這個接受的參數的要求是tag,word