一、nltk庫
nltk是一個python工具包, 用來處理與自然語言相關的東西. 包括分詞(tokenize), 詞性標註(POS), 文本分類等,是較爲好用的現成工具。但是目前該工具包的分詞模塊,只支持英文分詞,而不支持中文分詞。
1.安裝nltk庫
在命令行輸入:
conda install nltk #anaconda環境
pip install nltk #純python環境
進入對應的環境中,輸入如下:
import nltk
nltk.download()
運行後,彈出NLTK Downloader窗口,自定義安裝內容 (博主選擇all ,即全部安裝,大概3.2G左右) ,安裝成功如下圖所示:
2.nltk庫的使用方法
(1)學習資料
【參考文章】
【nltk功能模塊】如下圖
(2)nltk載入本地中文語料庫的兩種方法+TF_IDF計算
【nltk載入語料庫】
【注】txt文件爲使用如jieba等中文分詞包分詞後
comment4.txt內容如下:
從 下單 到手 只用 了 3 個 多 小時 , 真快 啊 , 贊 一下 京東 的 配送 速度 , 機子 收到 是 原封 的 , 深圳 產 , 沒有 陰陽 屏 和 跑馬燈 , 還 不錯 , 三星 的 U , 但 不 糾結 , 也 沒有 感覺 有 多 費電 , 激活 後 買 了 ac + , 可以 隨意 裸機 體驗 了 , 整體 來說 很 滿意
comment5.txt內容如下:
使用 了 一週 多才 來 評價 優化 過後 開機 10 秒左右 運行 不卡頓 屏幕 清晰 無 漏光 巧克力 鍵盤 觸感 非常 不錯 音質 也 很 好 外觀 漂亮 質量 輕巧 尤其 值得稱讚 的 是 其 散熱 系統 我 玩 LOL 三四個 小時 完全 沒有 發燙 暫時 沒有 發現 什麼 缺點 如果 有 光驅 就 更好 了 值得 入手 值得 入手 值得 入手 ~ 不 枉費 我 浪費 了 12 期 免息 券加 首單 減免 * 的 優惠 最後 換 了 這臺 適合 辦公 的 之前 是 買 的 惠普 的 暗夜精靈 玩遊戲 超棒 的
①【推薦】法一:PlaintextCorpusReader【適合文本文件】
from nltk.corpus import PlaintextCorpusReader
#corpus_root = 'D://Data//nltk_data//CorpusData' #//不會產生轉義 【語料庫路徑】
corpus_root = r"D:\Data\nltk_data\CorpusData" #r""防止轉義 【語料庫路徑】
file_pattern=['comment4.txt','comment5.txt'] #【txt文件名】
pcrText = PlaintextCorpusReader(corpus_root,file_pattern) #nltk的本地語料庫加載方法
pcrText.fileids() #輸出目錄下所有文件名
pcrText.words('comment4.txt')
結果如下:
②法二:BracketParseCorpusReader【適合已解析過的語料庫】
from nltk.corpus import BracketParseCorpusReader
#corpus_root = 'D://Data//nltk_data//CorpusData' #//不會產生轉義 【語料庫路徑】
corpus_root = r"D:\Data\nltk_data\CorpusData" #r""防止轉義 【語料庫路徑】
file_pattern =r"comment.*txt" #匹配corpus_root目錄下的所有txt文件
bcrText = BracketParseCorpusReader(corpus_root, file_pattern) #初始化讀取器:語料庫目錄和要加載文件的格式,默認utf8格式的編碼
bcrText.fileids() #輸出目錄下所有文件名
bcrText.raw('comment4.txt')
結果如下:
【注】建議編碼:txt預存爲utf8編碼(輸入) ——> unicode(處理) ——> utf8(輸出)
Python3.x默認爲unicode編碼,Python2.x則需decode解碼爲unicode
【TF_IDF計算】
對於上述txt文本存放的用戶評論,文本中某個詞對文本的重要性越高,它的TF-IDF值就越大。同理,評論的某個詞TF_IDF值越高,則該詞對於這條評論的重要性越大。
from nltk.text import TextCollection
#sinica_text = nltk.Text(pcrText.words()) #pcrText.words()返回所加載文檔的所有詞彙
sinica_text = nltk.Text(pcrText.words('comment4.txt')) #pcrText.words()返回comment4.txt的所有詞彙
mytexts = TextCollection(pcrText) #TextCollection()用於返回一個文檔集合
len(mytexts._texts) #表示文檔集合裏面包含的文檔個數
len(mytexts) #表示文檔集合裏面包含的詞彙個數
the_set = set(sinica_text) #去除文檔中重複的詞彙,從而形成詞彙表。
len(the_set)
for tmp in the_set:
print(tmp, "【tf】", mytexts.tf(tmp, pcrText.raw(['comment4.txt'])), "【idf】", mytexts.idf(tmp),"【tf_idf】", mytexts.tf_idf(tmp, pcrText.raw(['comment4.txt'])))
#pcrText.raw(['comment4.txt'])用於返回對應文章的所有內容,以便計算tf和tf_idf值。
#通過tf,idf,tf_idf這三個函數來計算每個詞彙在語料庫以及對應文章中的值
comment4.txt文本
comment4.txt 部分TF_IDF計算結果如下:
(3)常用方法介紹
常用方法包括:
①similar:用來識別文章中和搜索詞相似的詞語,可以用在搜索引擎中的相關度識別功能中。
②common_contexts:用來識別2個關鍵詞相似的詞語。
③generate:用來自動生成文章
④len:可以用於判斷重複詞密度
⑤count:可以用於判斷關鍵詞密度。