nltk是python很強大的第三方庫,可以很方便的完成很多自然語言處理(nlp)的任務,包括分詞、詞性標註、命名實體識別(ner)及句法分析。
一 nltk安裝教程
成功安裝後,測試。輸入下邊的語句就可以:
>>>二nltk進行分詞使用的函式:nltk.sent_tokenize(text) #對文字按照句子進行分割nltk.word_tokenize(sent) #對句子進行分詞from
nltk.corpus
import
brown
>>>
brown
.words
()['the', 'fulton', 'county', 'grand', 'jury', 'said', ...]
三 nltk進行詞性標註
用到的函式:
nltk.pos_tag(tokens)#tokens是句子分詞後的結果,同樣是句子級的標註
四 nltk進行命名實體識別(ner)
用到的函式:
nltk.ne_chunk(tags)#tags是句子詞性標註後的結果,同樣是句子級
上例中,有兩個命名實體,乙個是xi,這個應該是per,被錯誤識別為gpe了; 另乙個事china,被正確識別為gpe。
五 句法分析
nltk沒有好的parser,推薦使用stanfordparser
但是nltk有很好的樹類,該類用list實現
可以利用stanfordparser的輸出構建一棵python的句法樹
解釋一下,stemming 是抽取詞的詞幹或詞根形式(不一定能夠表達完整語義)。nltk中提供了三種最常用的詞幹提取器介面,即 porter stemmer, lancaster stemmer 和 snowball stemmer。
porter stemmer
基於porter詞幹提取演算法,來看例子:
>>> from nltk.stem.porter import porterstemmer
>>> porter_stemmer = porterstemmer()
>>> porter_stemmer.stem(『maximum』)
u』maximum』
>>> porter_stemmer.stem(『presumably』)
u』presum』
>>> porter_stemmer.stem(『multiply』)
u』multipli』
>>> porter_stemmer.stem(『provision』)
u』provis』
>>> porter_stemmer.stem(『owed』)
u』owe』
lancaster stemmer
基於lancaster 詞幹提取演算法,來看例子
>>> from nltk.stem.lancaster import lancasterstemmer
>>> lancaster_stemmer = lancasterstemmer()
>>> lancaster_stemmer.stem(『maximum』)
『maxim』
>>> lancaster_stemmer.stem(『presumably』)
『presum』
>>> lancaster_stemmer.stem(『presumably』)
『presum』
>>> lancaster_stemmer.stem(『multiply』)
『multiply』
>>> lancaster_stemmer.stem(『provision』)
u』provid』
>>> lancaster_stemmer.stem(『owed』)
『ow』
snowball stemmer基於snowball 詞幹提取演算法,來看例子
>>> from nltk.stem import snowballstemmer
>>> snowball_stemmer = snowballstemmer(「english」)
>>> snowball_stemmer.stem(『maximum』)
u』maximum』
>>> snowball_stemmer.stem(『presumably』)
u』presum』
>>> snowball_stemmer.stem(『multiply』)
u』multipli』
>>> snowball_stemmer.stem(『provision』)
u』provis』
>>> snowball_stemmer.stem(『owed』)
u』owe』
七 詞形還原(lemmatization)
lemmatisation是把乙個任何形式的語言詞彙還原為一般形式(能表達完整語義)。相對而言,詞幹提取是簡單的輕量級的詞形歸併方式,最後獲得的結果為詞幹,並不一定具有實際意義。詞形還原處理相對複雜,獲得結果為詞的原形,能夠承載一定意義,與詞幹提取相比,更具有研究和應用價值。
我們會在後面給出乙個同maxmatch演算法相結合的更為複雜的例子。
八 最大匹配演算法(maxmatch)
maxmatc
h演算法在中文自然語言處理中常常用來進行分詞(或許從名字上你已經能想到它是基於貪婪策略設計的一種演算法)。通常,英語中一句話裡的各個詞彙之間通過空格來分割,這是非常straightforward的,但是中文卻沒有這個遍歷。例如「我愛中華人民共和國」,這句話被分詞的結果可能是這樣的,又或者是,顯然我們更傾向於後者的分詞結果。因為『中華人民共和國』顯然是乙個專有名詞(把這樣乙個詞分割來看顯然並不明智)。我們選擇後者的策略就是所謂的maxmatch,即最大匹配。因為『中華人民共和國』這個詞顯然要比『中華』,『人民』,『共和國』這些詞都長。
我們可以通過乙個英文的例子來演示maxmatc
h演算法(其實中文處理的道理也是一樣的)。演算法從右側開始逐漸減少字串長度,以此求得可能匹配的最大長度的字串。考慮到我們所獲得的詞彙可能包含有某種詞型的變化,所以其中使用了lemmatisation,然後在詞庫里進行匹配查詢。
from nltk.stem import wordnetlemmatizer
from nltk.corpus import words
wordlist = set(words.words())
wordnet_lemmatizer = wordnetlemmatizer()
def max_match(text):
pos2 = len(text)
result = ''
while len(text) > 0:
word = wordnet_lemmatizer.lemmatize(text[0:pos2])
if word in wordlist:
result = result + text[0:pos2] + ' '
text = text[pos2:]
pos2 = len(text)
else:
pos2 = pos2-1
return result[0:-1]
來看看演算法的實現效果
>>> string = 'theyarebirds'
>>> print(max_match(string))
they are birds
python自然語言處理(一)
1.從nltk的book模組載入所有東西 fromnltk.book import 2.詞語索引檢視。顯示乙個指定單詞的每一次出現,連同上下文一起顯示。text1.concordance monstrous 3.通過索引看到monstrous上下文中有the pictures和the size,查詢...
《Python自然語言處理》
python自然語言處理 基本資訊 出版社 人民郵電出版社 isbn 9787115333681 出版日期 2014 年6月 開本 16開 頁碼 508 版次 1 1 所屬分類 計算機 軟體與程式設計 python 更多關於 python自然語言處理 內容簡介 書籍計算機書籍 自然語言處理 natu...
自然語言處理
自然語言處理主要步驟包括 2.詞法分析 對於英文,有詞頭 詞根 詞尾的拆分,名詞 動詞 形容詞 副詞 介詞的定性,多種詞意的選擇。比如diamond,有菱形 棒球場 鑽石3個含義,要根據應用選擇正確的意思。3.語法分析 通過語法樹或其他演算法,分析主語 謂語 賓語 定語 狀語 補語等句子元素。4.語...