1. 程式人生 > >python自然語言處理(二)

python自然語言處理(二)

1詞性標註

簡單的理解就是對詞性(POS)進行標註,但在不同的領域,詞性可能是不同的,Penn Treebank pos標記庫:https://blog.csdn.net/u010099495/article/details/46776617
其中程式需要安裝兩個依賴包

nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')

如下執行結果,我們知道WP:Wh-代詞,VBP:Present 動詞,PRP:人稱代詞,VBG:動詞的動名詞用法。

import nltk
from nltk import word_tokenize
s = 'what are you fucking doing ?'
nltk.pos_tag(word_tokenize(s)) #Out[11]: [('what', 'WP'), ('are', 'VBP'), ('you', 'PRP'), ('fucking', 'VBG'), ('doing', 'VBG'), ('?', '.')]

實際應用中可能會用到找出句子中所有的同詞性詞,比如在s中找出所有的動名詞用法。

tagged = nltk.pos_tag(word_tokenize(s))
allnoun = [word for word,pos in tagged if pos in  ['VBG']]
allnoun
#Out[16]: ['fucking', 'doing']

基於brown語料庫defaulttagger函式評估預測的準確率

from nltk.corpus import brown
brown_tagged_sents = brown.tagged_sents(categories='news')
default_tagger = nltk.DefaultTagger('NN')
default_tagger.evaluate(brown_tagged_sents)
#Out[23]: 0.13089484257215028

2命名實體識別(NER)

除了POS之外,找出文字中的實體項也是標籤化問題之一,NER一般由實體名,地址,位置組織構成,一般利用上下文語境和其他相關特性來標籤化這些命名實體,NLTK庫中的NER標註主要有兩種方式,一種是預先訓練好的NER模型,我們只要讀取測試資料的得分即可,另一種方式是建立一個機器學習基本模型。NLTK提供了ne_chunk()方法和封裝了stanfordNER標註器的命名實體識別系統。
NLTK庫提供的命名實體提取方法是ne_chunk(),這種方法需要先進行文字的預處理:首先進行標識化處理,再進行語句塊分解和詞性標註的處理順序,之後才能進行命名實體的標註。

from nltk import ne_chunk
sent = 'Leo is studing at Stanford University in california'
ne_chunk(nltk.pos_tag(word_tokenize(sent)),binary=False)
#Out[20]: Tree('S', [Tree('GPE', [('Leo', 'NNP')]), ('is', 'VBZ'), ('studing', 'VBG'), ('at', 'IN'), Tree('ORGANIZATION', [('Stanford', 'NNP'), ('University', 'NNP')]), ('in', 'IN'), ('california', 'NN')])

如上,ne_chunking方法主要用於識別相關姓名,地點和組織。
NLTK庫也封裝了StanfordNER標註器,其具有更高的準確性。
需要下載stanford預料庫https://nlp.stanford.edu/software/tagger.shtml#History