既然標榜15行code解決,就先把code貼上來不囉嗦!(還附上精美樹狀圖)
import nltk
from nltk.tokenize import word_tokenize
from nltk.chunk import ne_chunk
from nltk.tag import pos_tag
from nltk.tree import Tree
SampleTXT='The yellow dog barked at the cat'
sentence= pos_tag(word_tokenize(SampleTXT))
print sentence
grammar = "NP: {<DT>?<JJ>*<NN>}"
cp = nltk.RegexpParser(grammar)
result = cp.parse(sentence)
print result
result.draw()
接下來我們在來看一下這些code跟自然語言處理到底有什麼關係,我們又該怎麼操作?
自然語言處理的學派大致上可以分為:統計自然語言處理、基於規則的自然語言處理,而在今天的開張日中,我們聚焦在比較大的方向,來說明我們如何用自然語言處理,處理一篇文章~大致上文章處理可以分為四個步驟:
Step1:
文本斷句
Step2:
斷詞(Tokenize) : 就是我們所說的斷詞,在處理一篇文章以前,當然是要先把每個word斷好
Step3:
詞性標記(POS):標記一個句子中的詞性
Step4:
分塊(chunk),亦即標記句子中的關係
Step5:
解剖樹(Parser tree),由許多chunk所組成
舉個例子,如果我們想分析已經從
Step1斷好句(一般斷句是看逗號,或句號):
就從這句斷好的話開始吧:The yellow dog barked at the cat.
Step 2 :Tokenize
The yellow dog barked at the cat.
即變成>>> The 、yellow 、dog、 barked 、at、 the 、cat.
Step 3:POS
('The', 'DT'), ('yellow', 'JJ'), ('dog', 'NN'), ('barked', 'VBD'), ('at', 'IN'), ('the', 'DT'), ('cat', 'NN')
Step 4:chunk
在分塊時,我們需要定義分塊,因此定義分塊,若NP為Determiner+Adjective+Noun
以python為例,可以寫成NP: {<DT>?<JJ>*<NN>}
Step 5:Parser tree
我們將定義好的chunk build成一棵tree之後,結果為:
(S (NP The/DT yellow/JJ dog/NN) barked/VBD at/IN (NP the/DT cat/NN))
處理文章大致上可以分為以上幾個步驟啦,接著我們回頭看看code:
import nltk
from nltk.tokenize import word_tokenize
from nltk.chunk import ne_chunk
from nltk.tag import pos_tag
from nltk.tree import Tree
這些code 都是把套件import近來而已,而這些套件如何安裝,
可以從這篇文章中學到,
接著看到
Step1,這裡直接指定她為一個句子
SampleTXT='The yellow dog barked at the cat'
Step2 斷詞:
word_tokenize(SampleTXT)
Step3 就是開始標註詞性啦:
sentence= pos_tag(word_tokenize(SampleTXT))
Step4 定義分塊:
grammar = "NP: {<DT>?<JJ>*<NN>}"
Step5 建立剖析樹:
cp = nltk.RegexpParser(grammar)
result = cp.parse(sentence)
最後最後最後,把它畫成一棵樹的樣子,因為很酷(大誤)
result.draw()
就這樣短短幾行指令我們就開始我們的text mining第一步囉~~~
留言列表