安裝nltk.參考:http://www.cnblogs.com/kylinsblog/p/7755843.html
NLTK是Python很強大的第三方庫,可以很方便的完成很多自然語言處理(NLP)的任務,包括分詞、詞性標注、命名實體識別(NER)及句法分析。
下面介紹如何利用NLTK快速完成NLP基本任務
一、NLTK進行分詞
用到的函數:
nltk.sent_tokenize(text) #對文本按照句子進行分割
nltk.word_tokenize(sent) #對句子進行分詞
#!/usr/bin/python # -*- coding: UTF-8 -*- print('nlp2 test') import nltk text = 'PathonTip.com is a very good website. We can learn a lot from it.' #將文本拆分成句子列表 sens = nltk.sent_tokenize(text) print(sens) #將句子進行分詞,nltk的分詞是句子級的,因此要先分句,再逐句分詞,否則效果會很差. words = [] for sent in sens: words.append(nltk.word_tokenize(sent)) print(words)
執行結果:
二、NLTK進行詞性標注
用到的函數:
nltk.pos_tag(tokens)#tokens是句子分詞后的結果,同樣是句子級的標注
tags = [] #詞性標注要利用上一步分詞的結果 for tokens in words: tags.append(nltk.pos_tag(tokens)) print(tags)
執行結果:
三、NLTK進行命名實體識別(NER)
用到的函數:
nltk.ne_chunk(tags)#tags是句子詞性標注后的結果,同樣是句子級
#!/usr/bin/python # -*- coding: UTF-8 -*- print('nlp3 test') import nltk text = 'Xi is the chairman of China in the year 2013.' #分詞 tokens = nltk.word_tokenize(text) #詞性標注 tags = nltk.pos_tag(tokens) print(tags) #NER需要利用詞性標注的結果 ners = nltk.ne_chunk(tags) #print('%s---%s' % (str(ners),str(ners.node))) #報錯,無解 #還是直接打印tree吧 print(ners)
執行結果:
上例中,有兩個命名實體,一個是Xi,這個應該是PER,被錯誤識別為GPE了; 另一個事China,被正確識別為GPE。
四、句法分析
nltk沒有好的parser,推薦使用stanfordparser
但是nltk有很好的樹類,該類用list實現
可以利用stanfordparser的輸出構建一棵python的句法樹
#報錯,無解 #tparse = nltk.tree.Tree.parse #修改 #tree = tparse('(NP (DT the) (JJ fat) (NN man))') #tree = nltk.Tree('NP','DT') #for subtree in tree: # print(subtree,'---',subtree.node) tree1 = nltk.Tree('NP',['Alick']) print(tree1) tree2 = nltk.Tree('N',['Alick','Rabbit']) print(tree2) tree3 = nltk.Tree('S',[tree1,tree2]) print(tree3.label()) #查看樹的結點 tree3.draw()
執行結果: