Manual:MWDumper/ja

MWDumperはMediaWikiダンプファイルからページのセットを素早く抽出する小さなツールです.

http://download.wikimedia.org/tools/ からダウンロードすることが出来ます.

MediaWikiのエクスポートダンプ(バージョン 0.3、以下のアップロード)を読み込み、オプションのフィルタリング、1.4もしくは1.5スキーマでデータベースに直接ものを追加するために、XMLもしくはSQL文に戻す出力をすることが出来ます.

まだ多くが構築中です.

MITスタイルのライセンスは他のJava/C#ツールを好みます; 追加される決まり文句です.

クロスプラットフォームのbzip2の入力/出力サポートのためのApache Commons Compressプロジェクトからコードが由来します(Apacheライセンス 2.0).

Java 1.4で奇妙なXMLエラーに遭遇したら、Java 1.5で試して下さい:
 * http://java.sun.com/j2se/1.5.0/download.jsp
 * http://www.apple.com/downloads/macosx/apple/java2se50release1.html

使い方
直接データベースのインポートをするためのサンプルのコマンドラインです:

java -jar mwdumper.jar --format=sql:1.5 pages_full.xml.bz2 | mysql -u -p ヒント:インポートが成功するために テーブル'page'、'revision'と'text'は空でなければなりません.

文字エンコーディング上の注意 データベースがutf8でエンコードされたテキストを要求することを確認して下さい. データベースがlatin1(MySQLのデフォルト)を要求する場合、mwdumperの出力を直接使用する場合テーブルで不正な文字を取得します. これをする一つの方法は上記のサンプルで--default-character-set=utf8をMySQLに渡すことです.

複数の出力ファイルを生み出すために複雑なフィルタリングをすることも出来ます: java -jar mwdumper.jar \ --output=bzip2:pages_public.xml.bz2 \ --format=xml \ --filter=notalk \ --filter=namespace:\!NS_USER \ --filter=latest \ --output=bzip2:pages_current.xml.bz2 \ --format=xml \ --filter=latest \ --output=gzip:pages_full_1.5.sql.gz \ --format=sql:1.5 \ --output=gzip:pages_full_1.4.sql.gz \ --format=sql:1.4 \ pages_full.xml.gz

裸のパラメータはXML入力を読み込むためにファイルとして解釈されます: "-"もしくは空の値が与えられた場合、入力はstdinから読み込まれます. ".gz"もしくは".bz2"拡張子を持つ入力ファイルはそれぞれgzipもしくはbzip2ストリームとして解凍されます.

7-zip、.7zファイルの内部解凍はまだサポートされていません; p7zipの7zaを通してファイルをそれらのファイルをパイプすることが出来ます:

7za e -so pages_full.xml.7z | java -jar mwdumper.jar --format=sql:1.5 | mysql -u -p

パラメータが与えられない場合のデフォルトです:
 * stdinから未解凍のXMLを読み込む
 * stoutから未解凍のXMLを書き込む
 * フィルタリング無し

出力シンク
--output=stdout パイプのために圧縮されていないXMLもしくはSQL出力をstdoutに送る. (キャラクタセットの問題を持っているかもしれません. ) 出力が指定されていない場合これはデフォルトです. --output=file: 圧縮されていない出力をファイルに書き込む. --output=gzip: 圧縮されていない出力をファイルに書き込む. --output=bzip2: 圧縮されていない出力をファイルに書き込む. --output=mysql: SQLフォーマットの出力のみ有効になります; MySQLサーバへの接続を開き、コマンドを直接送ります. これは次のようになります: mysql://localhost/databasename?user= &password=

出力フォーマット
--format=xml MediaWikiのXMLエクスポートファイルフォーマットに戻して出力します; 制限されたインポートのためのフィルタリングダンプに対して使用します. 出力は冪等(idempotent)です. --format=sql:1.4 MediaWiki 1.4のスキーマへのバルクインポートのためのフォーマットされたSQL文. --format=sql:1.5 MediaWiki1.5のスキーマへのバルクインポートのためにフォーマットされたSQL文. 両方のSQLスキーマバージョンは現在テーブル構造が既に空のデータベースにセットアップされていることが必要です; MediaWikiディストリビューションからmaintenance/tables.sqlを使用します.

フィルタアクション
--filter=latest それぞれのページのために並べられた最後のリビジョン以外すべてをスキップします. FIXME:現在タイムスタンプもしくはリビジョン数には注意を払いませんが、 シンプルなダンプでの項目の順番です. これは厳密には正しいもしく正しくないかもしれません. --filter=list: 与えられたファイルに現れないタイトルを持つすべてのページを排除します: 一行ごとに一つのタイトルを使用します; 空白と#で始まる行は無視されます. 与えられたタイトルの会話と題目の両方がマッチします. --filter=exactlist: 上記に関してですが、関連した会話/題目ページにマッチしないように試みます. --filter=namespace:[!] 与えられた名前空間にある(もしくは"!"で名前空間にない)ページのみ含みます. NS_*定数名もしくは生の数字キーを使用することが出来ます. --filter=notalk 出力からすべての会話ページを排除します(カスタムの名前空間を含みます) --filter=titlematch: タイトルが正規表現とマッチしないすべてのページを排除します.

その他のオプション
--progress= デフォルトの1000リビジョンからインターバルをレポートする変更の進展. --quiet stderrへの進行出力を送らない.

MySQLへの直接的な接続をしてmwdumperを使用する例
java -server -classpath mysql-connector-java-3.1.11/mysql-connector-java-3.1.11-bin.jar:mwdumper.jar \ org.mediawiki.dumper.Dumper --output=mysql://127.0.0.1/testwiki?user=wiki\&password=wiki \ --format=sql:1.4 20051020_pages_articles.xml.bz2

ノート:
 * mysql-connector JDBCドライバが必要です.
 * JREは-jarと-classpath引数を混合することを認めません(異なるコマンド構造だからです).
 * --output引数は--format引数の前でなければなりません.
 * MySQL URIでアンパサンド(&)はUnixシステム上ではエスケープしなければなりません.

Windows XP上でMySQLに直接接続してmwdumperを使用する例
上記の例で問題を抱えました...次の例はXPでベターに動作します....

1.次のようなバッチファイルを作成する.

set class=mwdumper.jar;mysql-connector-java-3.1.12/mysql-connector-java-3.1.12-bin.jar set data="C:\Documents and Settings\All Users.WINDOWS\Documents\en.wiki\enwiki-20060207-pages-articles.xml.bz2" java -client -classpath %class% org.mediawiki.dumper.Dumper "--output=mysql://127.0.0.1/wikidb?user= &password= " "--format=sql:1.5" %data%

pause

2.mysql-connector-java-3.1.12-bin.jarとmwdumper.jarをダウンロードします

3.バッチを動作させます.

注意


 * 1) "duplicate key"...というインポートファイルに関する問題がまだ報告されます
 * 2) クラスパスセパレータは例では ; (セミコロン)です; 上記の例とは異なります.

-- ページからの重複キーの結果、空ではないデータベースにあるリビジョンとテキストテーブル、ここで記述されたようなこれらを空にするためにphpMyadminを使用して下さい

パフォーマンスティップス
データベースへのインポートを速くするためには、次のことを試して下さい:


 * Javaの -serverオプションはSunのJVMのいくつかのバージョン上で大きなファイルのために飛躍的にパフォーマンスを増加させるかもしれません(すべてのインストーレションで利用可能ではありません)
 * MySQLのinnodb_log_file_sizeを増やします. デフォルトは5MBですが、ディスク書き込みの回数を減らすためにこれを増加させることで劇的にパフォーマンスを改善することが出来ます. (my-huge.cnfのサンプルコンフィグをご覧下さい. )
 * 必要ではない場合、インポート作業の間にバイナリログ(log-binオプション)を無効します. スタンドアロンのマシン上で、これは無駄遣いで、けして使わないすべてのクエリの2番目のコピーを書き込みします.
 * 様々な他の奇抜なティップスはMySQLのリファレンスマニュアルで読むことが出来ます.

バグの報告
mwdumper製品に関するバグはMediaWiki Bugzillaで報告することが出来ます.

Todo

 * Add some more junit tests
 * Include table initialization in SQL output
 * Allow use of table prefixes in SQL output
 * Ensure that titles and other bits are validated correctly.
 * Test XML input for robustness
 * Provide filter to strip ID numbers
 * &lt;siteinfo&gt; is technically optional; live without it and use default namespaces
 * GUI frontend(s)
 * Port to Python? ;)

変更の履歴 (要約)

 * 2005-10-25: Switched SqlWriter.sqlEscape back to less memory-hungry StringBuffer
 * 2005-10-24: Fixed SQL output in non-UTF-8 locales
 * 2005-10-21: Applied more speedup patches from Folke
 * 2005-10-11: SQL direct connection, GUI work begins
 * 2005-10-10: Applied speedup patches from Folke Behrens
 * 2005-10-05: Use bulk inserts in SQL mode
 * 2005-09-29: Converted from C# to Java
 * 2005-08-27: Initial extraction code