NLTK的使用


安裝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()

 執行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM