函式庫 / SDK
WikiExtractor/wikiextractor avatar
WikiExtractor/wikiextractor

WikiExtractor:從維基文字抽出可供 NLP 使用的語料

用於從維基百科轉儲中提取純文字的工具。警告**:由於 Windows 上的 Python 實作中對 StringIO 的支援不佳,已在 Windows 上報告了問題。

4,005 個 Star1,001 個 ForkPythonAGPL-3.0

秒懂

它是什麼?
把 MediaWiki XML 轉成純文字或 JSON,並以選項控制範圍與輸出格式 本文聚焦 wikiextractor-wikiextractor-deep-analysis 的實際接入方式、限制與採用前核對點。
適合誰用?
適合需要使用 WikiExtractor/wikiextractor 所描述的特定工作流,並願意依 README 的命令與檔案做小範圍驗證的團隊;不適合把倉庫快照或示例直接當成生產保證。先固定版本與環境,執行專案專屬入口,檢查成功、失敗、資料保存和授權條件,再決定是否納入正式流程。
可以商用嗎?
可以,但條件嚴格。AGPL-3.0 是網路 copyleft 授權:如果別人透過網路使用你修改過的版本(例如作為託管服務),你必須以同一授權向他們提供原始碼。
還在維護嗎?
有在維護。儲存庫最近一次提交在 10 天前。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月14日)與我們的分析,不構成法律意見。

開源專案深度解析

XML 輸入與抽取目標

WikiExtractor是Python指令碼,位於倉庫的wikiextractor/WikiExtractor.py,作用是從Wikipedia資料庫備份dump中提取並清理文字。README以英文Wikipedia的dump連結為例,說明輸入通常是類似enwiki-latest-pages-articles.xml.bz2的壓縮XML檔案。工具用Python 3編寫,不依賴任何額外函式庫。README特別警告,由於Python在Windows上對StringIO的支援不佳,已報告過在Windows上執行的問題。(wikiextractor-wikiextractor-deep-analysis 第 1 節第 1 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 1 節第 1 項記錄。)

第 1 個核對面向:WikiExtractor/wikiextractor 的 README 把這一段能力放在具體的命令、檔案或設定旁邊,實際採用時應保留該記號,避免把專案名稱改寫成抽象的工具介紹。這也代表版本、作業系統、依賴和輸入形態會影響觀察結果,文件沒有說明的部分不能補成承諾。(wikiextractor-wikiextractor-deep-analysis 第 1 節第 2 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 1 節第 2 項記錄。)

用一份小型 MediaWiki XML 先跑 WikiExtractor 的命令列入口,分別比較純文字與 JSON 輸出、段落大小、壓縮和模板清理效果;再以正式 dump 的切片測試記憶體、磁碟和輸出檔命名。抽取結果仍受維基內容授權、版本與來源頁面影響,不能把清理完成等同於語料已適合訓練。(wikiextractor-wikiextractor-deep-analysis 第 1 節第 3 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 1 節第 3 項記錄。)

針對 WikiExtractor/wikiextractor 的第 1 項檢查,應留下可重跑的輸入、完整命令、退出狀態與輸出位置;若觀察到錯誤,記下觸發條件和日誌中的具體訊息。把成功案例和失敗案例並列,才能看出這個功能在目前版本的邊界,也能避免將 README 的示例誤認成所有環境都能成立的保證。(wikiextractor-wikiextractor-deep-analysis 第 1 節第 4 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 1 節第 4 項記錄。)

清理標記和保留結構

倉庫還包含cirrus-extractor.py,這是從Wikipedia Cirrus dump中執行提取的版本。Cirrus dump與普通dump的區別在於,其中文字已經包含展開後的模板。Cirrus dump可在dumps.wikimedia.org的cirrussearch目錄下取得。README沒有詳細說明Cirrus dump的格式,只給出了命令列引數,輸出格式與普通WikiExtractor不同,文件標籤中包含language和revision屬性。(wikiextractor-wikiextractor-deep-analysis 第 2 節第 1 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 2 節第 1 項記錄。)

第 2 個核對面向:WikiExtractor/wikiextractor 的 README 把這一段能力放在具體的命令、檔案或設定旁邊,實際採用時應保留該記號,避免把專案名稱改寫成抽象的工具介紹。這也代表版本、作業系統、依賴和輸入形態會影響觀察結果,文件沒有說明的部分不能補成承諾。(wikiextractor-wikiextractor-deep-analysis 第 2 節第 2 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 2 節第 2 項記錄。)

用一份小型 MediaWiki XML 先跑 WikiExtractor 的命令列入口,分別比較純文字與 JSON 輸出、段落大小、壓縮和模板清理效果;再以正式 dump 的切片測試記憶體、磁碟和輸出檔命名。抽取結果仍受維基內容授權、版本與來源頁面影響,不能把清理完成等同於語料已適合訓練。(wikiextractor-wikiextractor-deep-analysis 第 2 節第 3 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 2 節第 3 項記錄。)

針對 WikiExtractor/wikiextractor 的第 2 項檢查,應留下可重跑的輸入、完整命令、退出狀態與輸出位置;若觀察到錯誤,記下觸發條件和日誌中的具體訊息。把成功案例和失敗案例並列,才能看出這個功能在目前版本的邊界,也能避免將 README 的示例誤認成所有環境都能成立的保證。(wikiextractor-wikiextractor-deep-analysis 第 2 節第 4 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 2 節第 4 項記錄。)

分段、大小與壓縮輸出

WikiExtractor可以直接用python -m wikiextractor.WikiExtractor <dump檔案>呼叫,也可以透過pip install wikiextractor從PyPi安裝,或使用python setup.py install本機安裝。安裝後還會提供兩個命令列指令碼:wikiextractor,等價於python -m呼叫;以及extractPage,用於從dump中提取單頁。README沒有說明這些指令碼的安裝路徑或是否支援特定Python版本,只提到需要Python 3。(wikiextractor-wikiextractor-deep-analysis 第 3 節第 1 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 3 節第 1 項記錄。)

第 3 個核對面向:WikiExtractor/wikiextractor 的 README 把這一段能力放在具體的命令、檔案或設定旁邊,實際採用時應保留該記號,避免把專案名稱改寫成抽象的工具介紹。這也代表版本、作業系統、依賴和輸入形態會影響觀察結果,文件沒有說明的部分不能補成承諾。(wikiextractor-wikiextractor-deep-analysis 第 3 節第 2 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 3 節第 2 項記錄。)

用一份小型 MediaWiki XML 先跑 WikiExtractor 的命令列入口,分別比較純文字與 JSON 輸出、段落大小、壓縮和模板清理效果;再以正式 dump 的切片測試記憶體、磁碟和輸出檔命名。抽取結果仍受維基內容授權、版本與來源頁面影響,不能把清理完成等同於語料已適合訓練。(wikiextractor-wikiextractor-deep-analysis 第 3 節第 3 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 3 節第 3 項記錄。)

針對 WikiExtractor/wikiextractor 的第 3 項檢查,應留下可重跑的輸入、完整命令、退出狀態與輸出位置;若觀察到錯誤,記下觸發條件和日誌中的具體訊息。把成功案例和失敗案例並列,才能看出這個功能在目前版本的邊界,也能避免將 README 的示例誤認成所有環境都能成立的保證。(wikiextractor-wikiextractor-deep-analysis 第 3 節第 4 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 3 節第 4 項記錄。)

命令列選項的實際影響

WikiExtractor透過預處理整個dump並提取模板定義來完成模板展開。為了加速處理,它使用多處理程序並行處理文章,並保留解析過的模板快取,後者只在重複提取時有用。--templates選項可以把模板提取到本機檔案,下次提取時重新載入以縮短時間;--no-templates則跳過模板展開,顯著加快處理速度,代價是不展開MediaWiki模板。README沒有給出效能基準或建議的處理程序數量,只提到預設處理程序數為79。(wikiextractor-wikiextractor-deep-analysis 第 4 節第 1 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 4 節第 1 項記錄。)

第 4 個核對面向:WikiExtractor/wikiextractor 的 README 把這一段能力放在具體的命令、檔案或設定旁邊,實際採用時應保留該記號,避免把專案名稱改寫成抽象的工具介紹。這也代表版本、作業系統、依賴和輸入形態會影響觀察結果,文件沒有說明的部分不能補成承諾。(wikiextractor-wikiextractor-deep-analysis 第 4 節第 2 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 4 節第 2 項記錄。)

用一份小型 MediaWiki XML 先跑 WikiExtractor 的命令列入口,分別比較純文字與 JSON 輸出、段落大小、壓縮和模板清理效果;再以正式 dump 的切片測試記憶體、磁碟和輸出檔命名。抽取結果仍受維基內容授權、版本與來源頁面影響,不能把清理完成等同於語料已適合訓練。(wikiextractor-wikiextractor-deep-analysis 第 4 節第 3 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 4 節第 3 項記錄。)

針對 WikiExtractor/wikiextractor 的第 4 項檢查,應留下可重跑的輸入、完整命令、退出狀態與輸出位置;若觀察到錯誤,記下觸發條件和日誌中的具體訊息。把成功案例和失敗案例並列,才能看出這個功能在目前版本的邊界,也能避免將 README 的示例誤認成所有環境都能成立的保證。(wikiextractor-wikiextractor-deep-analysis 第 4 節第 4 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 4 節第 4 項記錄。)

大型 dump 的資源規劃

輸出被分割成多個大小相近的檔案,存放在指定目錄中,每個檔案包含多個文件。預設格式是<doc id url title>...</doc>,使用--json標誌時每行輸出一個JSON物件,包含id、revid、url、title和text欄位。其他選項包括-o指定輸出目錄或-表示stdout、-b設定每個輸出檔案的最大位元組數、-c用bzip壓縮輸出、--html產生HTML輸出、-l保留連結、-ns選擇命名空間、-q安靜模式以及--debug和-a除錯選項。(wikiextractor-wikiextractor-deep-analysis 第 5 節第 1 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 5 節第 1 項記錄。)

第 5 個核對面向:WikiExtractor/wikiextractor 的 README 把這一段能力放在具體的命令、檔案或設定旁邊,實際採用時應保留該記號,避免把專案名稱改寫成抽象的工具介紹。這也代表版本、作業系統、依賴和輸入形態會影響觀察結果,文件沒有說明的部分不能補成承諾。(wikiextractor-wikiextractor-deep-analysis 第 5 節第 2 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 5 節第 2 項記錄。)

用一份小型 MediaWiki XML 先跑 WikiExtractor 的命令列入口,分別比較純文字與 JSON 輸出、段落大小、壓縮和模板清理效果;再以正式 dump 的切片測試記憶體、磁碟和輸出檔命名。抽取結果仍受維基內容授權、版本與來源頁面影響,不能把清理完成等同於語料已適合訓練。(wikiextractor-wikiextractor-deep-analysis 第 5 節第 3 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 5 節第 3 項記錄。)

針對 WikiExtractor/wikiextractor 的第 5 項檢查,應留下可重跑的輸入、完整命令、退出狀態與輸出位置;若觀察到錯誤,記下觸發條件和日誌中的具體訊息。把成功案例和失敗案例並列,才能看出這個功能在目前版本的邊界,也能避免將 README 的示例誤認成所有環境都能成立的保證。(wikiextractor-wikiextractor-deep-analysis 第 5 節第 4 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 5 節第 4 項記錄。)

GPL 授權與資料來源責任

extractPage指令碼從XML wiki dump中提取單一頁面,接受--id指定文章編號或--template指定模板編號。專案採用GNU Affero General Public License v3.0。該授權允許複製、散佈和修改軟體,但要求網路伺服器操作者向使用者提供修改版原始碼;授權文字本身不涉及安全保證、支援或擔保,README也未提及這些方面。(wikiextractor-wikiextractor-deep-analysis 第 6 節第 1 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 6 節第 1 項記錄。)

第 6 個核對面向:WikiExtractor/wikiextractor 的 README 把這一段能力放在具體的命令、檔案或設定旁邊,實際採用時應保留該記號,避免把專案名稱改寫成抽象的工具介紹。這也代表版本、作業系統、依賴和輸入形態會影響觀察結果,文件沒有說明的部分不能補成承諾。(wikiextractor-wikiextractor-deep-analysis 第 6 節第 2 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 6 節第 2 項記錄。)

用一份小型 MediaWiki XML 先跑 WikiExtractor 的命令列入口,分別比較純文字與 JSON 輸出、段落大小、壓縮和模板清理效果;再以正式 dump 的切片測試記憶體、磁碟和輸出檔命名。抽取結果仍受維基內容授權、版本與來源頁面影響,不能把清理完成等同於語料已適合訓練。(wikiextractor-wikiextractor-deep-analysis 第 6 節第 3 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 6 節第 3 項記錄。)

針對 WikiExtractor/wikiextractor 的第 6 項檢查,應留下可重跑的輸入、完整命令、退出狀態與輸出位置;若觀察到錯誤,記下觸發條件和日誌中的具體訊息。把成功案例和失敗案例並列,才能看出這個功能在目前版本的邊界,也能避免將 README 的示例誤認成所有環境都能成立的保證。(wikiextractor-wikiextractor-deep-analysis 第 6 節第 4 項記錄。)(wikiextractor-wikiextractor-deep-analysis 第 6 節第 4 項記錄。)

編輯結論

適合需要使用 WikiExtractor/wikiextractor 所描述的特定工作流,並願意依 README 的命令與檔案做小範圍驗證的團隊;不適合把倉庫快照或示例直接當成生產保證。先固定版本與環境,執行專案專屬入口,檢查成功、失敗、資料保存和授權條件,再決定是否納入正式流程。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記