Python 3 中文文檔編碼問題

在做中文文本情感分類預處理時,編碼問題着實浪費我不少時間,總結如下:

1.  文件是中文,內容是酒店評論,首先是打開文件和寫入新文件。

因爲pickle存儲默認爲是二進制形式,在Python中爲bytes類型,打開和寫入方式需用二進制方式:

# 讀取文件內容
def getContent(filename):
    with open(filename, 'rb') as f:    # 打開該中文文件的方式需二進制方式打開:rb
        contents = f.readline()
        f.close()
        return contents
result_file = open(result_path, 'wb+')   # 同樣新建的儲存中文的文件也要是二進制方式:wb+
result_file.write(content)

2. 對整合好的文件進行分詞再存儲時,同樣要保證編碼格式

def prepareData(sourcefile, targerfile):
    source = codecs.open(sourcefile, 'rb')
    target = codecs.open(targerfile, 'w', encoding='utf-8')
    for line in source:
        line = line.decode('gbk', 'ignore')
        line = clearTxt(line)
        seg_line = sent2word(line)
        target.writelines(seg_line + '\n')
讀入時需將二進制格式decode爲str類型,且因爲decode的函數原型是decode([encoding], [errors='strict']),可以用第二個參數控制錯誤處理的策略,默認的參數就是strict,代表遇到非法字符時拋出異常; 
如果設置爲ignore,則會忽略非法字符; 
如果設置爲replace,則會用?取代非法字符; 

如果設置爲xmlcharrefreplace,則使用XML的字符引用。

新建文件並寫入時,可在新建時進行編碼格式標記,這樣writelines()時就可以直接寫入了。


發佈了32 篇原創文章 · 獲贊 25 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章