python自然語言處理(一)NLTK初步使用

2021-07-25 20:36:05 字數 4361 閱讀 6320

nltk是python很強大的第三方庫,可以很方便的完成很多自然語言處理(nlp)的任務,包括分詞、詞性標註、命名實體識別(ner)及句法分析。

一 nltk安裝教程

成功安裝後,測試。輸入下邊的語句就可以:

>>> 

from

nltk.corpus

import

brown

>>>

brown

.words

()['the', 'fulton', 'county', 'grand', 'jury', 'said', ...]

nltk進行分詞使用的函式:nltk.sent_tokenize(text) #對文字按照句子進行分割nltk.word_tokenize(sent) #對句子進行分詞

三 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.語...