NLTK基礎教程學習筆記(四)

2021-09-21 19:37:51 字數 2735 閱讀 2314

標識化處理:

機器所要理解的最小處理單位是單詞(分詞)。標識化處理,是將原生字元創分割成一系列有意義的分詞。標識化就是將原生字串分割成一系列有意義的分詞。標識化處理的複雜性因具體nlp應用而異,目標語言本身的複雜性本身也會帶來相關的變化。在英語中,可以通過正規表示式簡單的單詞來選取純單詞和數字,但在中文中會成為乙個複雜的任務

from nltk.tokenize import word_tokenize

from nltk.tokenize import regexp_tokenize,wordpunct_tokenize,blankline_tokenize

s="hi everyone! hola gr8"

print(s.split())

print(word_tokenize(s))

print(regexp_tokenize(s,pattern='\w+'))

print(regexp_tokenize(s,pattern='\d+'))

print(wordpunct_tokenize(s))

print(blankline_tokenize(s))

結果:

['hi', 'everyone!', 'hola', 'gr8']

['hi', 'everyone', '!', 'hola', 'gr8']

['hi', 'everyone', 'hola', 'gr8']

['8']

['hi', 'everyone', '!', 'hola', 'gr8']

['hi everyone! hola gr8']

上面用到了各種標識器(tokenizer)

python字串型別方法split():是乙個最基本的標識器,使用空白符來執行單詞的分割,split()本身也可以被配置成為一些較為複雜的標識化處理。

word_tokensize()方法是乙個通用的,強大的,物件導向的可物件導向所有型別預料庫的標識化處理方法。

regex_tokensize()是乙個位使用者需求設計的,自定義程度更高的表示器,如用可以基於正規表示式的標識器分割出相同的字串,用/w分割出單詞和數字用/d對數字進行提取

詞幹提取:

詞幹提取(stemming)是乙個修枝剪葉的過程,通過一些基本的規則,可以得到所有的分詞。詞幹提取是一種較為粗糙的過程,希望用它來取得相關的分詞的各種變化,如eat這個詞會有像eating,eaten,eats等變化。在某些情況下不需要區別這些,通常會用詞幹提取的方法將這些變化歸結為相同的詞根。對於簡單的方法我們可以用詞幹提取,對於較為複雜的nlp問題,我們必須改用詞形還原(lemmatization):

下面是乙個詞幹提取的例子:

from nltk.stem import porterstemmer

from nltk.stem.lancaster import lancasterstemmer

from nltk.stem.snowball import snowballstemmer

pst=porterstemmer()

lst=lancasterstemmer()

print(lst.stem("eating"))

print(pst.stem("shopping"))

結果:

eat

shop

乙個擁有基本規則的詞幹提取器,在像移除-s/es、-ing或-ed這裡事情上都可以達到70%的精確度。poster1和lancastemmer有更多的規則,精確度會更加高。

當多種詞幹提取演算法介入時,精確度和效能上會有差異。

snowball能處理荷蘭語,英語,法語,德語,義大利語,葡萄牙語,羅馬尼亞語和俄語等語言。

詞形還原:

詞形還原(lemmatization)涵蓋了詞根所有的文法和變化形式,還會利用上下文語境和詞性來確定相關單詞的變化,並運用不同的標準化規則,根據詞性來獲取相關的詞根。

from nltk.stem import wordnetlemmatizer

wlem=wordnetlemmatizer()

print(wlem.lemmatize("ate"))

結果

ate
wordnetlemmatizer使用了wordnet,會針對某個單詞去搜尋wordnet這個語義字典,還用到了變形分析,以便直切詞根並搜尋到特殊詞形。

停用詞移除:

停用詞移除(stop word removal)簡單的移除預料庫中在所有文件中可能出現的單詞,通常是冠詞和代詞。

from nltk.corpus import stopwords

stoplist=stopwords.words('english')

#print(stoplist)

text="this is just a test"

out=cleanwordlist=[word for word in text.split() if word not in stoplist]

print(out)

結果:

NLTK基礎教程學習筆記(九)

不同的解析器型別 解析器通常需要對乙個用於表達一組語法規則的輸入字串繼續處理,然後構成乙個或者多個可用於構成某種語法概念的規則。語法是我們衡量乙個句子是否良好的乙份規範說明,而解析器則是乙個用於解讀語法的程式。該程式會通過搜尋各種不同的樹結構空間,找出給定句子的最佳樹結構,下面是一些解析器的運用細節...

NLTK基礎教程學習筆記(五)

import nltk from nltk import word tokenize s i was watching tv print nltk.pos tag word tokenize s 結果 i prp was vbd watching vbg tv nn 中先將文字進行表示化處理,再呼叫...

NLTK基礎教程學習筆記(十)

依賴性文字解析 依賴性文字解析 dependency parsing 簡稱dp 是一種現代化的文字解析機制。dp的主要概念是將各個語法單元 單詞 用丁香鏈路串聯起來。這種鏈路稱為依賴關係 dependencies 在目前的文字解析社群中,有大量工作在進行。儘管短語結構式文字解析 phrase str...