歡迎你們前往騰訊雲+社區,獲取更多騰訊海量技術實踐乾貨哦~python
文本已成爲最多見的表達形式之一。咱們天天都要發送電子郵件、短信、推文、更新狀態。所以,非結構化文本數據變得很是廣泛,分析大量文本數據如今是瞭解人們的想法的關鍵方法。數據庫
微博上的推文幫助咱們找到熱門新聞主題。淘寶的評論幫助用戶購買評價最高的產品。這些例子都是天然語言處理(NLP)任務的體現。編程
NLP屬於計算機科學領域,主要作人機互動。NLP技術用於分析文本,爲計算機提供了一種理解人類語言的方法。NLP應用程序的一些例子包括自動文本摘要、主題分隔和情感分析。json
本教程將介紹如何使用Natural Language Toolkit(NLTK):一個Python的NLP工具。bash
首先,您應該安裝Python 3,並在計算機上設置一個本地編程環境。要充分利用本教程,您應該先熟悉Python編程語言,能夠參考騰訊雲開發手冊Python中文開發文檔和使用騰訊雲Python開發環境直接上機實驗。微信
開始使用Python以前,先確保安裝了NLTK模塊。在命令行上,經過運行如下命令檢查NLTK:編程語言
$ python -c "import nltk"
複製代碼
若是已安裝NLTK,那麼這個命令將完成且沒有錯誤。如今,讓咱們確保您安裝了最新版本:編輯器
$ python -c "import nltk; print(nltk.__version__)"
複製代碼
您應該安裝版本3.2.1,由於咱們將使用須要此版本的NLTK Twitter軟件包。工具
若是未安裝NLTK,您將收到一條錯誤消息:
Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'nltk'
複製代碼
錯誤消息代表未安裝NLTK,因此請使用pip下載資料庫:
$ pip install nltk
複製代碼
接下來,咱們將下載咱們將在本教程中使用的數據和NLTK工具。
在本教程中,咱們將使用一個Twitter語料庫,該語料庫可經過NLTK下載。具體來講,咱們將使用NLTK的twitter_samples語料庫。讓咱們經過如下命令行來下載語料庫:
$ python -m nltk.downloader twitter_samples
複製代碼
若是命令成功運行,您應該看到如下輸出:
[nltk_data] Downloading package twitter_samples to
[nltk_data] /Users/sammy/nltk_data...
[nltk_data] Unzipping corpora/twitter_samples.zip.
複製代碼
接下來,下載POS標記器。POS標記是對文本中的單詞進行標記的過程,使其與特定POS標記對應:名詞,動詞,形容詞,副詞等。在本教程中,咱們將使用NLTK的平均感知器標記器。平均感知器標記器使用感知器算法來預測最可能給出該單詞的POS標籤。讓咱們下載該標記器,以下所示:
$ python -m nltk.downloader averaged_perceptron_tagger
複製代碼
若是命令成功運行,您應該看到如下輸出:
[nltk_data] Downloading package averaged_perceptron_tagger to
[nltk_data] /Users/sammy/nltk_data...
[nltk_data] Unzipping taggers/averaged_perceptron_tagger.zip.
複製代碼
讓咱們仔細檢查語料庫是否正確下載。在您的終端中,打開Python交互式環境:
$ python
複製代碼
在Python的交互式環境中,導入twitter_samples語料庫:
>>> from nltk.corpus import twitter_samples
複製代碼
NLTK的twitter語料庫目前包含從Twitter Streaming API檢索的20,000條推文樣本。完整推文以行分隔的JSON形式存儲。咱們能夠用twitter_samples.fileids()來查看語料庫中存在多少個JSON文件:
>>> twitter_samples.fileids()
複製代碼
輸出將以下所示:
[u'negative_tweets.json', u'positive_tweets.json',u'tweets.20150430-223406.json']
複製代碼
使用這些文件ID,咱們能夠返回推文字符串:
>>> twitter_samples.strings('tweets.20150430-223406.json')
複製代碼
運行它將返回大量輸出。它一般看起來像這樣:
[u'RT @KirkKus: Indirect cost of the UK being in the EU is estimated to be costing Britain \xa3170 billion per year! #BetterOffOut #UKIP'...]
複製代碼
如今咱們知道咱們的語料庫下載成功了。所以,讓咱們使用快捷鍵ctrl+D 退出Python交互式環境。
如今咱們能夠訪問twitter_samples語料庫,咱們能夠開始編寫腳原本處理推文了。
咱們腳本的目標是計算在twitter_samples語料庫的子集中出現形容詞和名詞的數量:
您能夠稍後擴展此腳本以計算正面形容詞(偉大的,使人敬畏的,快樂的等)與負面形容詞(無聊,蹩腳,悲傷等),可用於分析推文的情緒或關於產品或電影的評論。此腳本提供的數據能夠反過來用於與該產品或電影相關的決策。
咱們將在下一步開始咱們的腳本。
首先,在您選擇的文本編輯器中,建立咱們將要使用的腳本並調用它nlp.py。
在咱們的文件中,首先導入語料庫。而後建立一個tweets變量並從positive_tweets.json文件把它分配到推文字符串列表。
nlp.py
from nltk.corpus import twitter_samples
tweets = twitter_samples.strings('positive_tweets.json')
複製代碼
當咱們第一次加載推文列表時,每條推文都用一個字符串來表示。在咱們肯定推文中哪些詞是形容詞或名詞以前,咱們首先須要對咱們的推文進行分詞。
Tokenization是將一系列字符串分解爲單詞、關鍵字、短語、符號和其餘元素,咱們稱之爲分詞。讓咱們建立一個名爲tweets_tokens的新變量,爲其分配分詞的推文列表:
nlp.py
from nltk.corpus import twitter_samples
tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
複製代碼
這個新變量tweets_tokens是一個列表,其中每一個元素都是一個分詞列表。如今咱們有了每條推文的分詞,咱們能夠用適當的POS標籤標記這些分詞。
爲了訪問NLTK的POS標記器,咱們須要導入它。全部import語句都必須在腳本的開頭。讓咱們把這個新的導入放在另外一個導入聲明中。
nlp.py
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
複製代碼
如今,咱們能夠標記每一個token 。NLTK容許咱們使用如下方式一次完成全部操做:pos_tag_sents()。咱們將建立一個新變量tweets_tagged,來存儲標記列表。這個新行能夠直接放在咱們當前腳本的末尾:
tweets_tagged = pos_tag_sents(tweets_tokens)
複製代碼
要想知道標記的token長什麼樣,這是咱們tweets_tagged列表中的第一個元素:
[(u'#FollowFriday', 'JJ'), (u'@France_Inte', 'NNP'), (u'@PKuchly57','NNP'),(u'@Milipol_Paris', 'NNP'), (u'for', 'IN'), (u'being', 'VBG'), (u'top', 'JJ'),(u'engaged', 'VBN'), (u'members', 'NNS'), (u'in', 'IN'), (u'my', 'PRP$'),(u'community', 'NN'), (u'this', 'DT'), (u'week', 'NN'), (u':)', 'NN')]
複製代碼
咱們能夠看到咱們的推文被表示爲一個列表,對於每一個token,咱們都有關於其POS標籤的信息。每一個token/標記對都保存爲元組。
在NLTK中,形容詞的縮寫是JJ。
所述標記器NLTK標記單數名詞(NN),複數名詞(NNS)。爲簡化起見,咱們只會經過跟蹤NN標記來計算單數名詞。
在下一步中,咱們將計算在咱們的語料庫中出現多少次JJ和NN。
咱們將使用累加器(計數)變量跟蹤JJ並NN出現的次數,並在每次找到標記時不斷添加該變量。首先讓咱們在腳本的底部建立計數,咱們將首先設置爲零。
nlp.py
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
JJ_count = 0
NN_count = 0
複製代碼
在咱們建立變量以後,咱們將建立兩個for循環。第一個循環將迭代列表中的每一個推文。第二個循環將經過每一個推文中的每一個token /標籤對進行迭代。對於每對,咱們將使用適當的元組索引查找標記。
而後,使用條件語句檢查標籤是否匹配字符串'JJ'或'NN'。若是標記匹配,咱們將add(+=1)添加到適當的累加器。
nlp.py
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
tweets = twitter_samples.strings('positive_tweets.json')
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
JJ_count = 0
NN_count = 0
for tweet in tweets_tagged:
for pair in tweet:
tag = pair[1]
if tag == 'JJ':
JJ_count += 1
elif tag == 'NN':
NN_count += 1
複製代碼
在兩個循環完成後,語料庫中會看到形容詞和名詞的總數。想要查看咱們的腳本找到多少個形容詞和名詞的話,在腳本末尾添加print語句。
nlp.py
...
for tweet in tweets_tagged:
for pair in tweet:
tag = pair[1]
if tag == 'JJ':
JJ_count += 1
elif tag == 'NN':
NN_count += 1
print('Total number of adjectives = ', JJ_count)
print('Total number of nouns =', NN_count)
複製代碼
如今,咱們的程序可以輸出在語料庫中找到的形容詞和名詞的數量了。
保存nlp.py文件並運行它來查看咱們找到多少個形容詞和名詞:
$ python nlp.py
複製代碼
請耐心等待,腳本運行可能須要幾秒鐘。若是一切順利,當咱們運行腳本時,咱們應該獲得如下輸出:
Total number of adjectives = 6094
Total number of nouns = 13180
複製代碼
若是您的輸出也是這樣,則表示您已成功完成本教程啦!
對於咱們完整的代碼,咱們添加一些註釋。咱們的腳本以下所示:
nlp.py
# Import data and tagger
from nltk.corpus import twitter_samples
from nltk.tag import pos_tag_sents
# Load tokenized tweets
tweets_tokens = twitter_samples.tokenized('positive_tweets.json')
# Tag tagged tweets
tweets_tagged = pos_tag_sents(tweets_tokens)
# Set accumulators
JJ_count = 0
NN_count = 0
# Loop through list of tweets
for tweet in tweets_tagged:
for pair in tweet:
tag = pair[1]
if tag == 'JJ':
JJ_count += 1
elif tag == 'NN':
NN_count += 1
# Print total numbers for each adjectives and nouns
print('Total number of adjectives = ', JJ_count)
print('Total number of nouns = ', NN_count)
複製代碼
咱們在本教程中使用了經過NLTK下載的Twitter語料庫,但您能夠讀取本身的數據。如今,您能夠擴展代碼以計算複數和單數名詞,對形容詞進行情感分析,或使用matplotlib可視化您的數據。
在本教程中,您學習了一些天然語言處理技術,以使用Python中的NLTK庫分析文本。如今,您能夠在Python中下載語料庫、token 、標記和計數POS標記。您能夠利用本教程來簡化在Python中處理本身的文本數據的過程。若是您對NLP感興趣, 能夠訪問騰訊雲學院天然語言處理相關課程。
參考文獻:《How To Work with Language Data in Python 3 using the Natural Language Toolkit (NLTK)》
問答
相關閱讀
此文已由做者受權騰訊雲+社區發佈,原文連接:https://cloud.tencent.com/developer/article/1161355?fromSource=waitui
歡迎你們前往騰訊雲+社區或關注雲加社區微信公衆號(QcloudCommunity),第一時間獲取更多海量技術實踐乾貨哦~
海量技術實踐經驗,盡在雲加社區!