自然言語処理で学習用のサンプルが必要になった等の理由で Wikipedia の生文が必要になる場面があるかもしれません.
Wikipediaが提供しているダンプデータから記事本文を抽出する wikiextractor というOSSがあるので使い方をメモします.
How to Use
まず https://github.com/attardi/wikiextractor をクローンして WikiExtractor.py
を作業するディレクトリにコピーなりする.
基本
python WikiExtractor.py <path_to_the_wikipedia_dump_file>
ダンプファイルは解凍せずに直接jawiki-latest-pages-articles.xml.bz2
などを指定して良い模様.
Wikipedia の xml ダンプファイルは
curl https://dumps.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2 -o jawiki-latest-pages-articles.xml.bz2
などで取ってくる. 年次を詳しく指定したりしたい場合はここから取ってくる : https://ja.wikipedia.org/wiki/Wikipedia:%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89
約400万タイトルの処理状況が標準log に吐き出されます. 処理には数十分〜数時間かかります.
出力形式
text
というディレクトリが作成され, 次のような構造でファイルが作成される.
/text
├─/AA
│ ├─wiki_00
│ ├─wiki_01
│ :
│ └─wiki_99
├─/AB
│ ├─wiki_00
| :
│ └─wiki_99
:
├─/AZ
| ├─wiki_00
| :
├─/BA
| ├─wiki_00
: :
AA
から順にWkipediaの記事がABC順(日本語Wikiなら五十音順) で入っている.
各 wiki_XX
はプレーンテキストで書式は以下のようになっている.Json 形式でも出力可能(後述).
<doc id="" revid="" url="" title="">
... (記事本文)
</doc>
おすすめオプション
python WikiExtractor.py <input_path> --processes <process_num> -o <output_path> --json -b <n[KMG]>
-
--processes:
--processes 8
のように指定し, CPUのコア数を指定してマルチプロセスで処理. -
--json: 出力を 毎行 json で出してくれる.
{"id": "", "revid": "", "url":"", "title": "", "text": "..."}
- -b: デフォルトでは各
wiki_XX
ファイルは1MBごとに区切られるようになっています.-b 1G
のように指定して制限を緩和できます. 出力を1ファイルにしたい場合は-b 5G
のようにすると1ファイルに出力される.
出力を1ファイルにしたい
自然言語処理で用いたりする場合は1ファイルのテキストファイルがあった方が都合が良いかもしれない.
cat text/*/* > jawiki.txt