nltk 自然語言處理庫源自賓夕法尼亞大學計算機與信息科學系的計算機語言學課程扎附,在數(shù)十名優(yōu)秀的貢獻者的幫助下不斷壯大抠忘,成為最常用的自然語言處理庫之一撩炊。
下面列出了nltk庫中的一些重要的模塊
——nltk.corpus
————獲取語料庫。
——————語料庫和詞典的標準化接口
——nltk.tokenize,nltk.stem
————字符串處理
——————分詞崎脉,句子分解拧咳,提取主干
——nltk.collocations
————搭配探究
——————t檢驗,卡方檢驗囚灼,點互信息
——nltk.tag
————詞性標識符
——————n-gram骆膝,backoff,Brill灶体,HMM阅签,TnT
——nltk.classify,nltk.cluster
————分類
——————決策樹,最大熵蝎抽,樸素貝葉斯政钟,EM,k-means
——nltk.chunk
————分塊
——————正則表達式织中,n-gram锥涕,命名實體
——nltk.parse
————解析
——————圖表,基于特征狭吼,一致性层坠,概率性,依賴項
——nltk.sem,nltk.inference
————語義解釋
——————λ演算刁笙,一階邏輯破花,模型檢驗
——nltk.metrics
————指標評測
——————精度,召回率疲吸,協(xié)議系數(shù)
——nltk.probability
————概率與估計
——————頻率分布座每,平滑概率分布
——nltk.app,nltk.chat
————應用
——————圖形化的關鍵詞排序,分析器摘悴,WordNet查看器峭梳,聊天機器人
——nltk.toolbox
————語言學領域的工作
——————處理SIL工具箱格式的數(shù)據(jù)
- 下載數(shù)據(jù)集
在本文中將使用nltk自帶的twitter sample進行練習,在linux終端或者windows控制臺中輸入:
$ python -m nltk.downloader twitter_samples
即可下載數(shù)據(jù)集
- 下載詞性標注器
$ python -m nltk.downloader averaged_perceptron_tagger
- 開始使用
下面在linux終端分步演示:
$ python
- 導入數(shù)據(jù)集蹂喻,數(shù)據(jù)集中包含了兩萬條從推特API中獲取到的JSON格式的文本
>>> from nltk.corpus import twitter_samples
- 查看數(shù)據(jù)集葱椭,其總包含了如下三個文件
>>> twitter_samples.fileids()
['negative_tweets.json', 'positive_tweets.json', 'tweets.20150430-223406.json']
- 查看其中一個文件
twitter_samples.strings('tweets.20150430-223406.json')
然后你就會被大段文字刷屏了,看到這些文字說明twitter數(shù)據(jù)集已經(jīng)下載成功了口四。
- 詞性標注
接下來我們要使用nltk統(tǒng)計這段文本中出現(xiàn)了多少個形容詞孵运,多少個名詞。
- 用Ctrl+D退出python環(huán)境蔓彩,使用vim新建一個名為nlp.py的文件
$ vim 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')
#標注詞性
tweets_tagged = pos_tag_sents(tweets_tokens)
#打印前兩句
print(tweets_tagged[:2])
退出vim后運行代碼治笨,結果如下:
$ python nlp.py
[[('#FollowFriday', 'JJ'), ('@France_Inte', 'NNP'), ('@PKuchly57', 'NNP'), ('@Milipol_Paris', 'NNP'), ('for', 'IN'), ('being', 'VBG'), ('top', 'JJ'), ('engaged', 'VBN'), ('members', 'NNS'), ('in', 'IN'), ('my', 'PRP$'), ('community', 'NN'), ('this', 'DT'), ('week', 'NN'), (':)', 'NN')], [('@Lamb2ja', 'NN'), ('Hey', 'NNP'), ('James', 'NNP'), ('!', '.'), ('How', 'NNP'), ('odd', 'JJ'), (':/', 'NNP'), ('Please', 'NNP'), ('call', 'VB'), ('our', 'PRP$'), ('Contact', 'NNP'), ('Centre', 'NNP'), ('on', 'IN'), ('02392441234', 'CD'), ('and', 'CC'), ('we', 'PRP'), ('will', 'MD'), ('be', 'VB'), ('able', 'JJ'), ('to', 'TO'), ('assist', 'VB'), ('you', 'PRP'), (':)', 'VBP'), ('Many', 'JJ'), ('thanks', 'NNS'), ('!', '.')]]
每個tuple的第二個元素就是詞性驳概,在nltk中,JJ是形容詞(-_-|||)旷赖,NN是單數(shù)名詞顺又,NNS是復數(shù)名詞。
- 統(tǒng)計詞頻
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')
#標注詞性
tweets_tagged = pos_tag_sents(tweets_tokens)
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('總計形容詞:%d 個' % JJ_count)
print('總計單數(shù)名詞:%d個' % NN_count)
- 最終結果
$ python nlp.py
總計形容詞:6094 個
總計單數(shù)名詞:13180個
總結:
最近在學習自然語言處理杠愧,看了很多中文和英文教程待榔,發(fā)現(xiàn)中文博主和英文博主最大的區(qū)別就是,很多中文博主即便所寫入門教程也喜歡把自己覺得簡單的步驟跳過去流济,讓初學者看得有點懵锐锣。
我以后的文章會盡量把所有可能出錯的步驟描述清晰,方便大家交流绳瘟。
參考:《python自然語言處理》
博客文章 :https://www.digitalocean.com/community/tutorials/how-to-work-with-language-data-in-python-3-using-the-natural-language-toolkit-nltk