Python自然語言處理 提取詞幹

2021-08-31 18:08:20 字數 2750 閱讀 8889

在英文中同乙個詞的形式是有多種的,名詞的單數複數、動詞的現在和過去式等等,所以在處理英文時要考慮詞幹的抽取問題。這裡直接呼叫nltk自帶的兩個詞幹抽取器

import re

import nltk

raw = """dennis: listen, strange women lying in ponds distributing swords

is no basis for a system of government. supreme executive power derives from

a mandate from the masses, not from some farcical aquatic ceremony."""

tokens = nltk.word_tokenize(raw) # 分詞 如果該方法呼叫錯誤請執行 nltk.download('punkt')

porter = nltk.porterstemmer()

print([porter.stem(t) for t in tokens])

lancaster = nltk.lancasterstemmer()

print([lancaster.stem(t) for t in tokens])

結果如下

porter:['denni', ':', 'listen', ',', 'strang', 'women', 'lie', 'in', 'pond', 'distribut', 'sword', 'is', 'no', 'basi', 'for', 'a', 'system', 'of', 'govern', '.', 'suprem', 'execut', 'power', 'deriv', 'from', 'a', 'mandat', 'from', 'the', 'mass', ',', 'not', 'from', 'some', 'farcic', 'aquat', 'ceremoni', '.']

lancaster:['den', ':', 'list', ',', 'strange', 'wom', 'lying', 'in', 'pond', 'distribut', 'sword', 'is', 'no', 'bas', 'for', 'a', 'system', 'of', 'govern', '.', 'suprem', 'execut', 'pow', 'der', 'from', 'a', 'mand', 'from', 'the', 'mass', ',', 'not', 'from', 'som', 'farc', 'aqu', 'ceremony', '.']

中文沒有詞幹抽取的煩惱,中文應該關注於分詞的結果(分詞後面介紹,jieba,hanlp等等各種各樣的分詞方法呼叫)

當然你也可以直接用單詞索引文章,但是用完詞幹提取器後索引的效果就更好了。

class indexedtext(object):  # 首先定義了乙個類

#初始化引數 stemmer是提取詞幹的方法,text待處理文字,self的作用大家可以直接忽視但是必不可少

def __init__(self, stemmer, text):

self._text = text # 將文字賦予變數self._text

self._stemmer = stemmer # 將提取詞幹的防範賦予self._stemmer

self._index = nltk.index((self._stem(word), i) # 迴圈讀取文字中的詞,最後生成的樣式

for (i, word) in enumerate(text))

# 找出帶處理詞所處的index,然後提取index上下40個長度內的詞

def concordance(self, word, width=40):

key = self._stem(word) # 提取待處理詞的詞幹

wc = width//4 # 獲取大概需要提取詞的個數

for i in self._index[key]: # 迴圈開始獲取上下文

lcontext = ' '.join(self._text[i-wc:i])

rcontext = ' '.join(self._text[i:i+wc])

ldisplay = '%*s' % (width, lcontext[-width:]) # %*s右對齊,讓列印出的長度是width

rdisplay = '%-*s' % (width, rcontext[:width]) # %-*s左對齊,讓列印出的長度是width

print (ldisplay, rdisplay, '/n')

def _stem(self, word): # 詞幹提取並全部改為小寫

return self._stemmer.stem(word).lower()

porter = nltk.porterstemmer() # 定義詞幹提取的方法

grail = nltk.corpus.webtext.words('grail.txt') # 獲取待處理的文字

text = indexedtext(porter, grail) # 例項化剛剛定義的類,同時將兩個引數傳入

text.concordance('lying') # 呼叫類中的找上下文的方法

結果如下,我的ide是spyder,為了讓列印的結果更清晰,我在print()中加入了『/n』讓每一次列印後都換行。

自然語言處理 特徵提取

在語言中,語義的基本單元是單詞。在英語句子中已天然就已經分割成單詞 空白符和標點符號隔開 而在漢語中字和字緊緊的連在一起。所以我們需要進行分詞。分詞有很多種演算法 基於字串匹配演算法 基於理解的演算法 基於統計的演算法 如hmm和n gram 等。下面重點介紹第一種字串匹配演算法。分詞的正向最大匹配...

《Python自然語言處理》

python自然語言處理 基本資訊 出版社 人民郵電出版社 isbn 9787115333681 出版日期 2014 年6月 開本 16開 頁碼 508 版次 1 1 所屬分類 計算機 軟體與程式設計 python 更多關於 python自然語言處理 內容簡介 書籍計算機書籍 自然語言處理 natu...

自然語言處理

自然語言處理主要步驟包括 2.詞法分析 對於英文,有詞頭 詞根 詞尾的拆分,名詞 動詞 形容詞 副詞 介詞的定性,多種詞意的選擇。比如diamond,有菱形 棒球場 鑽石3個含義,要根據應用選擇正確的意思。3.語法分析 通過語法樹或其他演算法,分析主語 謂語 賓語 定語 狀語 補語等句子元素。4.語...