【Python】日本語Wikipediaのダンプデータから本文を抽出する
日本語Wikipediaのダンプデータ中の本文を利用したい。
ただ、単純にパースするだけではWiki記法の記号等が邪魔である。
というわけでWikipedia Extractorを利用して本文だけテキストとして抽出します。
Wikipedia Extractorの他にもパースするためのライブラリはいくつかあるようなので、用途によっては別のライブラリを使用したほうが良さそう。
Alternative parsers - MediaWiki
環境
Mac OSX Yosemite
Python v2.7.11
Wikipedia Extractor v2.4
20GB程度のディスク空き容量
出力結果例
抽出処理後に生成されるXMLファイルは下記のようなdoc
要素の集まりになります。
<doc>...</doc> <doc>...</doc> ... <doc>...</doc>
具体的な例としては下記のようになります。
<doc id="20612" url="https://ja.wikipedia.org/wiki?curid=20612" title="カブ"> カブ カブ(蕪)はアブラナ科アブラナ属の越年草。代表的な野菜(根菜類)の一つで、別名はカブラ、カブナ、カブラナ、スズナ(鈴菜、菘)など数多い。 「カブ」の語源は諸説あり、頭を意味する「かぶり」、根を意味する「株」、またはカブラの女房詞である「オカブ」からとされている。 江戸時代は漢語で蕪菁(ブセイ、wuqing)、蔓菁(マンセイ、manqing)、扁蘿蔔(ヘンラフク、bianluobo)などと呼ばれていた。 かった。 (中略) ロシアでは『おおきなかぶ』のように民話の題材になるほど馴染みのある野菜である。 一方、カブがあまり好まれないフランスでは、大根役者に相当する「カブ役者」という言い回しがある。 </doc>
ここで、doc
要素の属性idおよびurlは、
- id:ユニークシリアルナンバー
- url:オリジナルのWikipediaページURL
となります。
準備
日本語Wikipediaダンプデータ
まずは日本語Wikipediaのダンプデータを下記から入手します。
jawiki-latest-pages-articles.xml.bz2が記事本文を含むダンプデータですね。
当然ですがファイルサイズが大きいので注意。
Wikipedia Extractor
下記サイト内のDownloadsからWikipedia ExtractorのPythonスクリプトを直接ダウンロードします。
Wikipedia Extractor - Medialab
抽出作業
WikiExtractor.py
とjawiki-latest-pages-articles.xml.bz2
を同一ディレクトリに置き、下記のコマンドを実行するのみで基本的には終了です。
WikiExtractor.py -b 500K -o extracted jawiki-latest-pages-articles.xml.bz2
これで、extractedディレクトリ下に、500KB毎に区切られた抽出後ファイルが生成されていきます。
公式では-c
オプションを設定して圧縮していました。
私はとりあえずそのままで構わないので、このオプションは外しました。
次に、このままではファイルが分割状態で使用が面倒なため、一つのファイルにまとめます。
find extracted -name 'wiki*' -exec cat {} \; > text.xml
これで全ての本文データがtext.xml
ファイル内に格納されました。
私の試行時では、およそ2.5GBくらいのファイルになりました。
まとめ
というわけで、無事日本語Wikipediaのダンプデータから本文のパースおよび抽出が完了しました。
偉大なライブラリ製作者に感謝。
参考
GitHub - attardi/wikiextractor: A tool for extracting plain text from Wikipedia dumps
実行時のオプション等はこちらから。