小白入門必讀|只需5步用python讓你掌握NLP基本概念(趕快收藏)
NLP簡介
自然語言處理屬于人工智能領(lǐng)域。所有計算機都擅長對數(shù)值數(shù)據(jù)進(jìn)行處理,NLP這一部分計算機技術(shù)是處理文本數(shù)據(jù),用來分析世界上不同的語言的。
現(xiàn)在NLP的應(yīng)用大多都在機器翻譯、輿情監(jiān)測、自動摘要、觀點提取、文本分類、問題回答、文本語義對比、語音識別、中文OCR等方面。
今天我們要get到的技能就是使用 Python中Spacy和NLTK 等庫對語言處理進(jìn)行基本概念的學(xué)習(xí)。
眾所周知我們分析原始文本數(shù)據(jù),數(shù)據(jù)量,代碼量小的情況下,可以人眼分析一些。
但是如果我們試圖在編程中建立一種機制,使用Python從文本數(shù)據(jù)中分析和提取最大的信息的話,我們還是使用 jupyter notebook 協(xié)助python編程代碼進(jìn)行所有處理和分析語言處理比較好。(Jupyter采用anaconda 發(fā)行版。)
畢竟用jupyter notebook的話就不用在回顧項目的時候再一次次的重新跑一遍代碼了!
介紹了本篇教程的目的和要使用工具,學(xué)姐要開始上硬菜了!

五步走主題如下:
第 1 步:Spacy和NLTK安裝指南
第 2 步:關(guān)于文本的基本概念和正則表達(dá)式
第 3 步:標(biāo)記化和詞干
第 4 步:詞形還原和停用詞
第 5步:詞性 (POS) 和命名實體識別 (NER)
別跑,接下來我們就一步一步的說,保管你能看懂學(xué)會。
第 1 步:安裝指南
安裝 anaconda
首先安裝 anaconda 發(fā)行版,安裝后,anaconda會在環(huán)境中安裝Spacy和NLTK庫。
安裝Spacy和NLTK
NLTK配置(安裝NLTK庫,命令行輸入以下命令):
有些時候的nltk代碼需要語料庫才能運行,運行下面的python代碼下載語料庫。
Spacy配置(安裝spacy庫,命令行輸入以下命令):
接著下載spacy的英語語言庫
注意spacy使用時候需要聲明使用的模型
也可以下載spacy的中文語言庫
spacy庫各語種下載傳送門:https://spacy.io/usage/models#quickstart

第 2 步:文本的基本概念
安裝下載好之后,接下來開始用 python讀取這些文件,進(jìn)行語言處理。先用一些文本數(shù)據(jù)來初步嘗試一下,先從基本字符串開始:
舉個例子:
字符串的名稱是 GURUGRAM,這是一個城市的名字。如果需要選擇特定范圍的字母表時,要使用切片法和索引法。
當(dāng)我們從左到右時,索引從0開始,當(dāng)我們想要從右到左的字母表時,它從負(fù) (-1) 開始,而不是從零開始。

然后用python進(jìn)行以下操作:
現(xiàn)在通過切片獲取字符
是不是感覺有點意思了?那就開始挑戰(zhàn)對句子的處理吧!
接下來是strip()函數(shù)表演時間,此函數(shù)可以刪除開頭和結(jié)尾的字符,但不能刪除中間的字符,如果我們不指定刪除字符,則默認(rèn)情況下它將刪除空格。
上面的例子是從句子中去掉了星號。因此可以看出,這個函數(shù)可以去除字符,大家可以嘗試以下不指定刪除字符是什么樣的結(jié)果。
和strip函數(shù)完全相反的操作是join操作,例子:
正則表達(dá)式
正則表達(dá)式有時稱為關(guān)系表達(dá)式或 RegEx,用于字符或字符串匹配,在許多情況下用于查找和替換字符或字符串。
那如何在正則表達(dá)式中處理字符串和模式?首先學(xué)習(xí)在實際操作中導(dǎo)入正則表達(dá)式:
如何對簡單字符串使用“re”?例子:
首先得有一個句子,然后在其中找到字符串,再對字符串進(jìn)行一些操作??
在句子中搜索字符串:
我們也可以對這個字符串做一些操作。比如要檢查所有操作,可以寫入 str_match。然后按選項卡,就會顯示所有操作。

上面是展示字符串“very”的跨度,20表示從句子中的第20個索引開始到第24個索引結(jié)束。
如果我們想找到一個出現(xiàn)多次的單詞可以使用 findall 操作:
上面的操作只是查找在一個字符串中出現(xiàn)多次出現(xiàn)的字符串。
如果我們想知道一個句子中單詞的跨度以便我們可以了解單詞的位置,就用迭代方法 finditer 操作。
一些正則表達(dá)式是(a-z),(A-Z),(0–9),(\- \)。), (@, #, $, %).這些表達(dá)式用于查找文本中的模式,如有必要,還可用于清除干凈的數(shù)據(jù)。有了模式,我們就可以使用量詞來知道我們期望多少個表達(dá)式。
第 3 步:標(biāo)記化(Tokenization)
當(dāng)一個句子分解成小的單個單詞時,這些單詞被稱為標(biāo)記,這個過程被稱為標(biāo)記化。
前綴、中綴、后綴和例外中的句子分解,我們將使用 spacy 庫學(xué)習(xí)標(biāo)記化:
我們可以從索引和切片中獲取標(biāo)記:
詞干
詞干提取是將單詞還原為詞根的過程。
詞干分析器的類型:
1. Porter Stemmer
2. Snowball Stemmer
Spacy不包含詞干分析器,因此我們將使用 NLTK庫進(jìn)行詞干提取。
Porter詞干分析器于1980年開發(fā),它的功能就是將單詞縮減為其詞干或詞根:
上面這些詞被簡化為僅有詞干,但是porter詞干分析器的結(jié)果并不是很讓人滿意。
因此,就用Snowball詞干分析器進(jìn)行改進(jìn):
第4步:詞形還原
詞形還原比詞干提取要好,而且信息豐富,除了詞干之外,還可以確定詞周圍的詞性。因為spacy有詞形還原,沒有辦法提取詞干,所以就使用spacy進(jìn)行詞形還原:

在上面的詞形還原代碼中,單詞的描述給出了所有信息。每個單詞的詞性和輸出中的數(shù)字是英語語言庫中的特定引理。觀察結(jié)果中的happiest to happy、happier to happy的結(jié)果,得出詞形還原比詞干分析器更好的結(jié)論。
停止詞
停止詞用于過濾一些經(jīng)常重復(fù)且但不提供有關(guān)文本信息的詞。在Spacy中,有一些停用詞的內(nèi)置列表:

第5步:詞性 (POS)
詞性是獲取文本和單詞信息的過程,或者說是獲取單詞的語法信息,深層信息對于自然語言處理非常重要。
有兩種類型的標(biāo)簽:對于名詞,動詞使用粗標(biāo)簽;對于復(fù)數(shù)名詞,過去時類型,使用細(xì)粒度標(biāo)簽 (fine-grained tags):
檢查有索引位置的標(biāo)記:
調(diào)用這個token的操作:
粗標(biāo)記是 NOUN,細(xì)粒度 標(biāo)記是NN,可以看出這個名詞是單數(shù)。
借助spacy了解什么是 POS 計數(shù):
這些數(shù)字是什么?咱們接著看!
先來看看90這個數(shù)字是什么意思:
DET表示數(shù)字90屬于限定詞,數(shù)值1屬于它,DET在一個句子中重復(fù)了一次。
命名實體識別 (NER)
命名實體識別對于識別文本并將其賦予標(biāo)簽實體非常有用,無論它是原始形式還是非結(jié)構(gòu)化形式。
當(dāng)你不知道文本的實體類型時,NER幫助你標(biāo)記它們并賦予文本含義。
使用spacy做NER示例:
上面的代碼中用NER分析文本,發(fā)現(xiàn)印度是一個國家名稱或州名,所以我們可以知道標(biāo)記是用實體標(biāo)注完成的。
學(xué)會了嗎?沒有的話再看一遍!一定要動手敲,看代碼是不能成為合格的碼農(nóng)的!有什么學(xué)習(xí)上的問題就來問學(xué)姐吧!

參考文檔:
https://pub.towardsai.net/nlp-zero-to-hero-with-python-2df6fcebff6e