前文已經提及,漢語的文法和句型不同于英語,在進行分析之前需要進行分詞。首先我們需要的是一個中文語料庫,本文使用的是維基百科的中文語料庫,大小約為1.57GB,下載下傳之後從中提取中文語料庫。再使用opencc将語料庫繁簡體轉化之後,使用jieba分詞将語料庫中的段落、句子進行分詞得到最終用于模型訓練的中文語料庫。
中文語料庫
本文使用的中文語料庫為維基百科的中文語料庫。通過以下連結進行下載下傳:
http://download.wikipedia.com/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 下載下傳之後得到的是一個壓縮包:
下載下傳WikiExtractor.py檔案,該腳本檔案是意大利程式員使用Python研發的維基百科抽取器,簡潔并且功能強大,可以抽取出維基百科中文語料庫的内容并輸出到文本檔案。我們在macOS的終端運作以下指令行,使用Wikipedia Extractor抽取正文文本:
bzcat zhwiki-latest-pages-articles.xml.bz2 | python WikiExtractor.py -b 1000M -o extracted >output.txt
其中-b 1000M是将文本以1000M大小為機關進行分割;output.txt存儲的是輸出過程中日志資訊而非所抽取的正文文本。
上圖是抽取出的語料庫,我們發現是繁體中文庫。
我們這裡使用opencc對語料庫進行簡化。同樣,在macOS終端輸入以下指令行:
opencc -i wiki_00 -o zh_wiki_00 -c zht2zhs.ini
opencc -i wiki_01 -o zh_wiki_01 -c zht2zhs.ini
得到簡體中文的語料包zh_wiki_00和zh_wiki_01。簡化後如下:
jieba分詞
jieba分詞是支援Python語言的中文分詞元件。jieba分詞在深度學習,自然語言進行中有着廣泛使用,用法簡單。
# encoding=utf-8
import jieba
import jieba.posseg as pseg
seg_list = jieba.cut("我來到南京郵電大學", cut_all=True)
print("Full Mode: " + "/ ".join(seg_list)) # 全模式
seg_list = jieba.cut("我來到南京郵電大學", cut_all=False)
print("Default Mode: " + "/ ".join(seg_list)) # 精确模式
seg_list = jieba.cut("他就職于華為南京研究所") # 預設是精确模式
print("/".join(seg_list))
seg_list = jieba.cut("小明大學畢業于南京郵電大學,後在北京郵電大學深造")
print("/".join(seg_list))
seg_list = jieba.cut_for_search("小明大學畢業于南京郵電大學,後在北京郵電大學深造") # 搜尋引擎模式
print("/".join(seg_list))
words = pseg.cut("我愛南京的新街口")#檢視詞性
for word, flag in words:
print('%s %s' %(word, flag))
輸出結果如下:
運作以下代碼,完成語料庫的分詞:
# encoding = utf-8
import jieba
import codecs
import re
f = codecs.open('cut_zh_wiki_00.txt', "a+", 'utf-8')
for line in open("zh_wiki_00"):
for i in re.sub('[a-zA-Z0-9]', '', line).split(' '):
if i != '':
data = list(jieba.cut(i, cut_all = False))
readline = ' '.join(data) + '\n'
f.write(readline)
f.close()