在這裏記錄一下看《機器學習算法原理與編程實踐》這本書的一些東東。
第一章 數學基礎
第二章 中文文本分類
由於書上用的是Python2,而我安裝的Anaconda是Python3,所以在代碼方面有一些差異,有的甚至不能運行。
對文件中的內容用jieba進行分詞
- 如果按照原書上的代碼運行,會報錯
TypeError: a bytes-like object is required, not 'str'
就是byte和str的問題,這裏我推薦一篇博客,看完就基本可以知道byte<–>str是怎麼回事了(byte–>str:decode;str–>byte:encode)。下面是運行成功的代碼:
import jieba
import os
# 保存文件
def savefile(savepath, content):
fp = open(savepath, "wb")
fp.write(content.encode(encoding="utf-8"))
fp.close()
# 讀取文件
def readfile(path):
fp = open(path, "rb")
content = fp.read()
fp.close()
return content
corpus_path = "train_corpus_small/" # 未分詞分類語料庫路徑
seg_path = "train_corpus_seg/" # 分詞後分類語料庫路徑
catelist = os.listdir(corpus_path) # 獲取catelist下所有子目錄
# 獲取每個目錄下的所有文件
for mydir in catelist:
class_path = corpus_path + mydir + "/" # 拼出分類子目錄的路徑
seg_dir = seg_path + mydir + "/" # 拼出分詞後的語料分類目錄
if not os.path.exists(seg_dir): # 是否存在目錄,如果不存在就創建
os.makedirs(seg_dir)
file_list = os.listdir(class_path) # 獲取類別目錄下的所有文件
for file_path in file_list: #遍歷類別目錄下的文件
fullname = class_path + file_path # 拼出文件名全路徑
content = readfile(fullname).strip() # 讀取文件內容
content = content.replace("\r\n".encode(encoding="utf-8"),"".encode(encoding="utf-8")).strip() # 刪除換行和多餘的空格
content_seg = jieba.cut(content) # 爲文件內容分詞
#將處理後的文件保存到分詞後語料目錄
savefile(seg_dir+file_path," ".join(content_seg))
print("-------END---------")