【Python+中文自然語言處理】(一) NLTK庫

一、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:可以用於判斷關鍵詞密度。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章