既然標榜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之後,結果為:

pos

(S (NP The/DT yellow/JJ dog/NN) barked/VBD at/IN (NP the/DT cat/NN))

螢幕快照 2015-11-26 下午9.12.10.png 


處理文章大致上可以分為以上幾個步驟啦,接著我們回頭看看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'

posStep2 斷詞:

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第一步囉~~~


arrow
arrow
    創作者介紹
    創作者 curtisflynvv 的頭像
    curtisflynvv

    curtisflynvv的部落格