日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務,提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

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

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

讓我們開始吧!

先決條件

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

pip install nltk==3.4

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

import nltk
print(nltk.__version__)

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

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

python -m nltk.downloader all

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

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

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

nltk.download('punkt')

接下來,您需要導入word_tokenizefromnltk.tokenize才能使用它:

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

代碼的輸出如下:

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

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

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

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

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

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

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

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

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

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

print(stemmer.stem("constitutes"))

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

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

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

nltk.download('wordnet')

下載后,您需要導入WordNetLemmatizer該類并對其進行初始化:

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

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

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

您會注意到該.lemmatize()方法正確地將單詞“constitutes”轉(zhuǎn)換為其基本形式“constitute”。您還會注意到詞形還原比詞干提取花費的時間更長,因為算法更復雜。

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

nltk.download('averaged_perceptron_tagger')

接下來,導入pos_tag()函數(shù)并在一個句子上運行它:

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

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

[('Hi', 'NNP'),
(',', ','),
('this', 'DT'),
('is', 'VBZ'),
('a', 'DT'),
('nice', 'JJ'),
('hotel', 'NN'),
('.', '.')]

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

def lemmatize_tokens(stentence):
  lemmatizer = WordNetLemmatizer()
  lemmatized_tokens = []
  for word, tag in pos_tag(stentence):
    if tag.startswith('NN'):
      pos = 'n'
    elif tag.startswith('VB'):
      pos = 'v'
    else:
      pos = 'a'
    lemmatized_tokens.Append(lemmatizer.lemmatize(word, pos))
  return lemmatized_tokens

sample = "Legal authority constitutes all magistrates."
print(lemmatize_tokens(word_tokenize(sample)))

上面代碼的輸出如下:

['Legal', 'authority', 'constitute', 'all', 'magistrate', '.']

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

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

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

刪除標點符號是一項相當容易的任務。該庫的punctuation對象string包含所有英文標點符號:

import string
print(string.punctuation)

此代碼片段的輸出如下:

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

為了從標記中刪除標點符號,您可以簡單地運行:

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

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

nltk.download('stopwords')

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

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

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

def clean_data(tokens, stop_words = ()):

  cleaned_tokens = []

  for token, tag in pos_tag(tokens):
    if tag.startswith("NN"):
      pos = 'n'
    elif tag.startswith('VB'):
      pos = 'v'
    else:
      pos = 'a'

    lemmatizer = WordNetLemmatizer()
    token = lemmatizer.lemmatize(token, pos)

    if token not in string.punctuation and token.lower() not in stop_words:
      cleaned_tokens.append(token)
  return cleaned_tokens

sample = "The quick brown fox jumps over the lazy dog."
stop_words = stopwords.words('english')

clean_data(word_tokenize(sample), stop_words)

該示例的輸出如下:

['quick', 'brown', 'fox', 'jump', 'lazy', 'dog']

如您所見,標點符號和停用詞已被刪除。

詞頻分布

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

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

tokens = word_tokenize(text)
cleaned_tokens = clean_data(tokens, stop_words = stop_words)

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

from nltk import FreqDist

freq_dist = FreqDist(cleaned_tokens)
freq_dist.most_common(10)

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

[('bird', 15),
('sausage', 11),
('mouse', 8),
('wood', 7),
('time', 6),
('long', 5),
('make', 5),
('fly', 4),
('fetch', 4),
('water', 4)]

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

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

結(jié)論

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

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

分享到:
標簽:Python
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數(shù)有氧達人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定