本文參考自 WikiExtractor 專案 ,來將中文的Wiki下載下來,以做為語料訓練。由於其產生的資料格式與下一篇要提的 GPT2 Chinese 不同,所以再進行一些修改,以符合所需。
下載專案
首先將該專案 clone 下來
1 |
git clone https://github.com/NCHU-NLP-Lab/Wiki_Extractor.git |
Wiki 的中文文章的壓縮檔要另外自行下載,有部份歷史資料可下載,下載位置在
1 |
https://dumps.wikimedia.org/zhwiki/ |
其中最新的一律放在
1 |
https://dumps.wikimedia.org/zhwiki/latest/ |
我們僅需下載最新的文章部份
1 |
https://dumps.wikimedia.org/zhwiki/latest/zhwiki-latest-pages-articles.xml.bz2 |
檔案轉換
將檔案下載儲存到 WiKi_Extractor 同目錄下,然後執行下面命令,將文章取出。
1 |
python3 Wiki_Extractor.py -b 1024M -o extracted zhwiki-latest-pages-articles.xml.bz2 |
萃取完的資料會放到 ./extracted/AA/ 執行下列指令,將格式轉換,轉成繁體中文輸出成下列格式,檔案會儲存成 wiki.json。由於此步驟需要很久的時間,若不想看原專案的結果,可以先套用「轉換為GPT2 Chinese格式」修改,再執行。
1 |
python3 Wiki_Cleaning.py --file_path ./extracted/AA/ |
原本的專案在轉換後,會以下列json格式呈現。
1 2 3 4 5 6 7 8 |
[ { "id" : (int) 編號 , "title" : (str) 文章標題 , "articles" : (str) 文章內容 }, ... ] |
此後,原專案隨後會對json做分詞,但這邊我們不需做此部份。
轉換為GPT2 Chinese格式
1 2 3 4 5 6 7 |
[ "ARTICLE1", "ARTICLE2", "ARTICLE3", . . "ARTICLEx" ] |
要產成 GPT2 Chinese 相同的格式,我們需要套用下面修改,來變更輸出的格式。。 套用下列變更到 Wiki_Cleaning.py,再依前例執行一次該指令便可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
--- Wiki_Extractor_Old/Wiki_Cleaning.py 2023-02-14 10:05:41.866926753 +0800 +++ /home/ubuntu/myprj/Wiki_Extractor/Wiki_Cleaning.py 2023-01-31 23:07:04.935029831 +0800 @@ -1,7 +1,9 @@ +# coding=UTF-8 import json from opencc import OpenCC import os import argparse +import sys def main(): @@ -27,6 +29,8 @@ with open ('extracted/wiki_zh','w') as file: file.write(raw_data) + #with open('extracted/wiki_zh', "r") as file: + # raw_data = file.read() res = [] error_num = 0 for i, doc in enumerate(raw_data.split('<doc ')): @@ -39,7 +43,8 @@ continue else: articles += t - res.append({'id' : i, 'title' : title,'articles' : articles}) + #res.append({'id' : i, 'title' : title,'articles' : articles}) + res.append(title+","+articles) except Exception as e: error_num+=1 @@ -51,7 +56,8 @@ print("總篇數:", len(res)) - json.dump(res,open(args.output_path + 'wiki.json','w')) + with open(args.output_path + 'wiki.json','w', encoding='utf-8') as jsonfile: + json.dump(res, jsonfile, ensure_ascii=False, indent=2) if __name__ == '__main__': |
結語
本文最主要的目的還是展示怎麼下載 Wiki 資料,以供後續的 GPT2 Chinese 使用,所以應用請見下一篇。