自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Python中的自然語言處理入門

開發(fā) 后端 自然語言處理
今天生成的數(shù)據(jù)中有很大一部分是非結(jié)構(gòu)化的。非結(jié)構(gòu)化數(shù)據(jù)包括社交媒體評論、瀏覽歷史記錄和客戶反饋。您是否發(fā)現(xiàn)自己處于需要分析大量文本數(shù)據(jù)的情況,卻不知道如何繼續(xù)?Python 中的自然語言處理可以提供幫助。

 本教程的目標(biāo)是讓您能夠通過自然語言處理 (NLP) 的概念在 Python 中分析文本數(shù)據(jù)。您將首先學(xué)習(xí)如何將文本標(biāo)記為更小的塊,將單詞規(guī)范化為其根形式,然后去除文檔中的任何噪音,為進(jìn)一步分析做好準(zhǔn)備。

[[434759]]

讓我們開始吧!

先決條件

在本教程中,我們將使用 Python 的nltk庫對文本執(zhí)行所有 NLP 操作。在撰寫本教程時(shí),我們使用的是 3.4 版的nltk. 要安裝庫,您可以pip在終端上使用命令:

 

  1. pip install nltk==3.4 

要檢查系統(tǒng)中的版本nltk,您可以將庫導(dǎo)入 Python 解釋器并檢查版本:

 

  1. import nltk  
  2. print(nltk.__version__) 

 

要執(zhí)行nltk本教程中的某些操作,您可能需要下載特定資源。我們將在需要時(shí)描述每個(gè)資源。

但是,如果您想避免在本教程后面下載單個(gè)資源并立即獲取它們,請運(yùn)行以下命令:

  1. python -m nltk.downloader all 

第 1 步:轉(zhuǎn)換為代幣

計(jì)算機(jī)系統(tǒng)本身無法在自然語言中找到意義。處理自然語言的第一步是將原始文本轉(zhuǎn)換為標(biāo)記。甲令牌是連續(xù)字符的組合,具有一定的意義。由您決定如何將句子分解為標(biāo)記。例如,一個(gè)簡單的方法是用空格分割一個(gè)句子,將其分解為單個(gè)單詞。

在 NLTK 庫中,您可以使用該word_tokenize()函數(shù)將字符串轉(zhuǎn)換為標(biāo)記。但是,您首先需要下載punkt資源。在終端中運(yùn)行以下命令:

 

  1. nltk.download('punkt'

接下來,您需要導(dǎo)入word_tokenizefromnltk.tokenize才能使用它:

 

  1. from nltk.tokenize import word_tokenize 
  2. print(word_tokenize("Hi, this is a nice hotel.")) 

 

代碼的輸出如下:

 

  1. ['Hi'',''this''is''a''nice''hotel''.'

您會注意到,word_tokenize它不僅僅基于空格拆分字符串,還將標(biāo)點(diǎn)符號拆分為標(biāo)記。如果您想在分析中保留標(biāo)點(diǎn)符號,這取決于您。

第 2 步:將單詞轉(zhuǎn)換為其基本形式

在處理自然語言時(shí),您經(jīng)常會注意到同一個(gè)詞有多種語法形式。例如,“go”、“going”和“gone”是同一個(gè)動詞“go”的形式。

雖然您的項(xiàng)目的必要性可能要求您保留各種語法形式的單詞,但讓我們討論一種將同一單詞的各種語法形式轉(zhuǎn)換為其基本形式的方法。有兩種技術(shù)可用于將單詞轉(zhuǎn)換為其基詞。

第一種技術(shù)是詞干。Stemming是一種簡單的算法,可以從單詞中刪除詞綴。有多種詞干提取算法可用于 NLTK。我們將在本教程中使用 Porter 算法。

我們首先PorterStemmer從nltk.stem.porter. 接下來,我們將詞干分析器初始化為stemmer變量,然后使用該.stem()方法查找單詞的基本形式:

 

  1. from nltk.stem.porter import PorterStemmer  
  2. stemmer = PorterStemmer() 
  3. print(stemmer.stem("going")) 

 

上面代碼的輸出是go. 如果您針對上述其他形式的“go”運(yùn)行詞干分析器,您會注意到詞干分析器返回相同的基本形式“go”。然而,由于詞干提取只是一種基于去除詞綴的簡單算法,當(dāng)詞在語言中不太常用時(shí),它會失敗。

例如,當(dāng)您在單詞“constitutes”上嘗試詞干分析時(shí),它給出了一個(gè)不直觀的結(jié)果:

 

  1. print(stemmer.stem("constitutes")) 

你會注意到輸出是“constitut”。

這個(gè)問題可以通過使用更復(fù)雜的方法來解決,以在給定的上下文中找到單詞的基本形式。該過程稱為詞形還原。詞形還原根據(jù)文本的上下文和詞匯對單詞進(jìn)行規(guī)范化。在 NLTK 中,您可以使用WordNetLemmatizer類對句子進(jìn)行詞形還原。

首先,您需要wordnet從 Python 終端中的 NLTK 下載器下載資源:

 

  1. nltk.download('wordnet'

下載后,您需要導(dǎo)入WordNetLemmatizer該類并對其進(jìn)行初始化:

 

  1. from nltk.stem.wordnet import WordNetLemmatizer  
  2. lem = WordNetLemmatizer() 

 

要使用 lemmatizer,請使用.lemmatize()方法。它需要兩個(gè)參數(shù):單詞和上下文。在我們的示例中,我們將使用“v”作為上下文。在查看該.lemmatize()方法的輸出后,讓我們進(jìn)一步探索上下文:

 

  1. print(lem.lemmatize('constitutes''v')) 

您會注意到該.lemmatize()方法正確地將單詞“constitutes”轉(zhuǎn)換為其基本形式“constitute”。您還會注意到詞形還原比詞干提取花費(fèi)的時(shí)間更長,因?yàn)樗惴ǜ鼜?fù)雜。

讓我們檢查如何以.lemmatize()編程方式確定方法的第二個(gè)參數(shù)。NLTK 具有pos_tag()幫助確定句子中單詞上下文的功能。但是,您首先需要

averaged_perceptron_tagger通過 NLTK 下載器下載資源:

 

  1. nltk.download('averaged_perceptron_tagger'

接下來,導(dǎo)入pos_tag()函數(shù)并在一個(gè)句子上運(yùn)行它:

 

  1. from nltk.tag import pos_tag 
  2. sample = "Hi, this is a nice hotel." 
  3. print(pos_tag(word_tokenize(sample))) 

 

您會注意到輸出是一個(gè)對列表。每對由一個(gè)標(biāo)記及其標(biāo)記組成,它表示整個(gè)文本中標(biāo)記的上下文。請注意,標(biāo)點(diǎn)符號的標(biāo)簽本身就是:

 

  1. [('Hi''NNP'), 
  2. (','','), 
  3. ('this''DT'), 
  4. ('is''VBZ'), 
  5. ('a''DT'), 
  6. ('nice''JJ'), 
  7. ('hotel''NN'), 
  8. ('.''.')] 

 

你如何解碼每個(gè)令牌的上下文?這是Web 上所有標(biāo)簽及其相應(yīng)含義的完整列表。請注意,所有名詞的標(biāo)簽都以“N”開頭,所有動詞的標(biāo)簽都以“V”開頭。我們可以在方法的第二個(gè)參數(shù)中使用此信息.lemmatize():

 

  1. def lemmatize_tokens(stentence): 
  2.   lemmatizer = WordNetLemmatizer() 
  3.   lemmatized_tokens = [] 
  4.   for word, tag in pos_tag(stentence): 
  5.     if tag.startswith('NN'): 
  6.       pos = 'n' 
  7.     elif tag.startswith('VB'): 
  8.       pos = 'v' 
  9.     else
  10.       pos = 'a' 
  11.     lemmatized_tokens.append(lemmatizer.lemmatize(word, pos)) 
  12.   return lemmatized_tokens 
  13.  
  14. sample = "Legal authority constitutes all magistrates." 
  15. print(lemmatize_tokens(word_tokenize(sample))) 

 

上面代碼的輸出如下:

 

  1. ['Legal''authority''constitute''all''magistrate''.'

此輸出是預(yù)期的,其中“constitutes”和“magistrates”已分別轉(zhuǎn)換為“constitute”和“magistrate”。

第 3 步:數(shù)據(jù)清理

準(zhǔn)備數(shù)據(jù)的下一步是清理數(shù)據(jù)并刪除任何對您的分析沒有意義的內(nèi)容。從廣義上講,我們將考慮從您的分析中刪除標(biāo)點(diǎn)符號和停用詞。

刪除標(biāo)點(diǎn)符號是一項(xiàng)相當(dāng)容易的任務(wù)。該庫的punctuation對象string包含所有英文標(biāo)點(diǎn)符號:

 

  1. import string 
  2. print(string.punctuation) 

 

此代碼片段的輸出如下:

 

  1. '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' 

為了從標(biāo)記中刪除標(biāo)點(diǎn)符號,您可以簡單地運(yùn)行:

 

  1. for token in tokens: 
  2.   if token in string.punctuation: 
  3.     # Do something 

 

接下來,我們將專注于刪除停用詞。停用詞是語言中常用的詞,如“I”、“a”和“the”,在分析文本時(shí)對文本幾乎沒有意義。因此,我們將從分析中刪除停用詞。首先,stopwords從 NLTK 下載器下載資源:

 

  1. nltk.download('stopwords'

一旦下載完成后,進(jìn)口stopwords從nltk.corpus和使用.words()方法與“英語”作為參數(shù)。這是一個(gè)包含 179 個(gè)英語停用詞的列表:

 

  1. from nltk.corpus import stopwords 
  2. stop_words = stopwords.words('english'

 

我們可以將詞形還原示例與本節(jié)中討論的概念結(jié)合起來創(chuàng)建以下函數(shù),clean_data()。此外,在比較一個(gè)詞是否是停用詞列表的一部分之前,我們將其轉(zhuǎn)換為小寫。這樣,如果停止詞出現(xiàn)在句子的開頭并且大寫,我們?nèi)匀粫东@它:

 

  1. def clean_data(tokens, stop_words = ()): 
  2.  
  3.   cleaned_tokens = [] 
  4.  
  5.   for token, tag in pos_tag(tokens): 
  6.     if tag.startswith("NN"): 
  7.       pos = 'n' 
  8.     elif tag.startswith('VB'): 
  9.       pos = 'v' 
  10.     else
  11.       pos = 'a' 
  12.  
  13.     lemmatizer = WordNetLemmatizer() 
  14.     token = lemmatizer.lemmatize(token, pos) 
  15.  
  16.     if token not in string.punctuation and token.lower() not in stop_words: 
  17.       cleaned_tokens.append(token) 
  18.   return cleaned_tokens 
  19.  
  20. sample = "The quick brown fox jumps over the lazy dog." 
  21. stop_words = stopwords.words('english'
  22.  
  23. clean_data(word_tokenize(sample), stop_words) 

 

該示例的輸出如下:

 

  1. ['quick''brown''fox''jump''lazy''dog'

如您所見,標(biāo)點(diǎn)符號和停用詞已被刪除。

詞頻分布

現(xiàn)在您已經(jīng)熟悉了 NLP 中的基本清理技術(shù),讓我們嘗試找出文本中單詞的頻率。在本練習(xí)中,我們將使用古騰堡免費(fèi)提供的童話故事《老鼠、鳥和香腸》的文本。我們將這個(gè)童話的文本存儲在一個(gè)字符串中,text。

首先,我們text對它進(jìn)行標(biāo)記,然后使用clean_data我們上面定義的函數(shù)對其進(jìn)行清理:

 

  1. tokens = word_tokenize(text) 
  2. cleaned_tokens = clean_data(tokens, stop_words = stop_words) 

 

要查找文本中單詞的頻率分布,您可以使用FreqDistNLTK 類。使用令牌作為參數(shù)初始化類。然后使用該.most_common()方法查找常見的術(shù)語。在這種情況下,讓我們嘗試找出前十項(xiàng):

 

  1. from nltk import FreqDist 
  2.  
  3. freq_dist = FreqDist(cleaned_tokens) 
  4. freq_dist.most_common(10) 

 

以下是這個(gè)童話故事中最常見的十個(gè)術(shù)語:

 

  1. [('bird', 15), 
  2. ('sausage', 11), 
  3. ('mouse', 8), 
  4. ('wood', 7), 
  5. ('time', 6), 
  6. ('long', 5), 
  7. ('make', 5), 
  8. ('fly', 4), 
  9. ('fetch', 4), 
  10. ('water', 4)] 

 

不出所料,三個(gè)最常見的詞是童話故事中的三個(gè)主要人物。

在分析文本時(shí),單詞的頻率可能不是很重要。通常,NLP 的下一步是生成一個(gè)統(tǒng)計(jì)數(shù)據(jù)——TF-IDF(詞頻——逆文檔頻率)——它表示一個(gè)單詞在文檔列表中的重要性。

結(jié)論

在本教程中,我們首先了解了 Python 中的自然語言處理。我們將文本轉(zhuǎn)換為標(biāo)記,將單詞轉(zhuǎn)換為它們的基本形式,最后,清理文本以刪除任何對分析沒有意義的部分。

盡管我們在本教程中研究了簡單的 NLP 任務(wù),但還有更多技術(shù)需要探索。例如,我們可能想要對文本數(shù)據(jù)執(zhí)行主題建模,其目標(biāo)是找到文本可能正在談?wù)摰墓餐黝}。NLP 中更復(fù)雜的任務(wù)是實(shí)現(xiàn)情感分析模型,以確定任何文本背后的感覺。

 

責(zé)任編輯:華軒 來源: 今日頭條
相關(guān)推薦

2021-05-18 07:15:37

Python

2020-04-24 10:53:08

自然語言處理NLP是人工智能

2017-04-17 15:03:16

Python自然語言處理

2021-05-13 07:17:13

Snownlp自然語言處理庫

2017-04-10 16:15:55

人工智能深度學(xué)習(xí)應(yīng)用

2017-10-19 17:05:58

深度學(xué)習(xí)自然語言

2024-04-24 11:38:46

語言模型NLP人工智能

2024-02-05 14:18:07

自然語言處理

2021-05-17 09:00:00

自然語言人工智能技術(shù)

2017-05-05 15:34:49

自然語言處理

2020-02-25 12:00:53

自然語言開源工具

2020-02-25 23:28:50

工具代碼開發(fā)

2020-11-12 18:57:14

摘要PythonNLP

2017-06-29 13:02:54

大數(shù)據(jù)自然語言NLP

2021-07-07 17:46:32

人工智能自然語言處理AI

2024-11-07 15:49:34

2020-09-23 10:45:45

人工智能自然語言NLP

2021-03-03 09:00:00

自然語言數(shù)據(jù)科學(xué)人工智能

2018-02-27 09:32:13

神經(jīng)網(wǎng)絡(luò)自然語言初探

2021-09-03 12:01:07

模型自然語言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號