Python 中文NLP (一) NLTK庫

2021-08-28 18:59:32 字數 3631 閱讀 2308

nltk是乙個python工具包, 用來處理與自然語言相關的東西. 包括分詞(tokenize), 詞性標註(pos), 文字分類等,是較為好用的現成工具。但是目前該工具包的分詞模組,只支援英文分詞,而不支援中文分詞。

在命令列輸入:

conda install nltk  #anaconda環境

pip install nltk #純python環境

進入對應的環境中,輸入如下:

import nltk

nltk.download()

執行後,彈出nltk **********視窗,自定義安裝內容 (博主選擇all ,即全部安裝,大概3.2g左右) ,安裝成功如下圖所示:

自然語言工具包入門

【注】txt檔案為使用如jieba等中文分詞包分詞後

comment4.txt內容如下:

從 下單 到手 只用 了 3 個 多 小時 , 真快 啊 , 贊 一下 京東 的 配送 速度 , 機子 收到 是 原封 的 , 深圳 產 , 沒有 陰陽 屏 和 跑馬燈 , 還 不錯 , 三星 的 u , 但 不 糾結 , 也 沒有 感覺 有 多 費電 , 啟用 後 買 了 ac + , 可以 隨意 裸機 體驗 了 , 整體 來說 很 滿意

comment5.txt內容如下:

使用 了 一周 多才 來 評價 優化 過後 開機 10 秒左右 執行 不卡頓 螢幕 清晰 無 漏光 巧克力 鍵盤 觸感 非常 不錯 音質 也 很 好 外觀 漂亮 質量 輕巧 尤其 值得稱讚 的 是 其 散熱 系統 我 玩 lol 三四個 小時 完全 沒有 發燙 暫時 沒有 發現 什麼 缺點 如果 有 光碟機 就 更好 了 值得 入手 值得 入手 值得 入手 ~ 不 枉費 我 浪費 了 12 期 免息 券加 首單 減免 * 的 優惠 最後 換 了 這台 適合 辦公 的 之前 是 買 的 惠普 的 暗夜精靈 玩遊戲 超棒 的

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

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計算結果如下:

常用方法包括:

④len:可以用於判斷重複詞密度

中文NLP知識總結

一 詞袋模型 分詞 去停用詞 消除數字 英文,得到若干詞語的集合。二 詞典 詞語和其索引id的一一對應關係。假設共有n個詞語。三 one hot編碼 在詞典基礎上,分詞之後的文章的詞頻向量。可以看成是m n的單詞 文件矩陣a。a i,j 第i篇文章中詞典索引為j的詞語出現的次數,即詞頻tf。refe...

nlp 中文資料預處理

資料載入 預設csv格式 import pandas as pd datas pd.read csv test.csv header 0,index col 0 dataframe n datas data.to numpy ndarray 轉成numpy更好處理 個人喜好 去除空行def dele...

中文NLP技術學習 1 搭建NLP開發環境

中文nlp技術學習系列文章,將以nltk系統為主體框架,通過整合相關的開源系統來學習nlp中涉及的所有模組。下面是我的pc環境 1.nltk平台搭建 nltk,nature language tool kit,即自然語言工具包,是乙個免費 開源且使用python程式構建的自然語言資料工作平台。ntl...