wikiデータベースをダウンロードして、
wikiと同じようにオフラインの環境で、
wikiを使いたいと思っています
http://d.hatena.ne.jp/dkfj/20070902/1188730207
のサイトを元に作業していました。
1.Wikipedia:データベースダウンロード
2.xml2sqlでmysqldump形式に変換
3.データのインポート
サイトの中程に、
$bunzip2 -c jawiki-latest-pages-meta-current.xml.bz2 | xml2sql
とのコマンドが書いてあります。
教えていただきたいのは、
まず、上記2の「2.xml2sqlでmysqldump形式に変換」
の部分です。
xml2sqlはインストールしないと使えないと思うのですが、
http://meta.wikimedia.org/wiki/Xml2sql
から、ダウンロードしてから、どうやって使えるのか、
(=インストールするのか)わかりません。
私の環境:Windows7,Mysql5.0 (Apache2.2,php5)
で、インストールの方法→使用方法
教えて頂けると、助かります。
なお、mediawikiのダウンロード、インストールはうまくいっています。
mediawikiインストール時に、
my_wikiというデータベースと49個のテーブルがインストールされています。
以上です。
よろしくお願いします。
Win環境でも無事にtext.txt、revision.txt、page.txtの生成が完了しましたので、その方法を回答いたします。
※なお、jawiki-latest-pages-articles.xml.bz2で試しましたが、失敗した原因は、ファイル分割に使用したソフトが原因でした。(ファイル分割時に一部欠落があった為、不完全なファイルになったようです。)
1.XMLファイルを分割します。
(検索・置換に使用するソフトの対応ファイルサイズが2GB未満の為です。)
(1)「coreutils-5.3.0-bin.zip」をダウンロードして任意の場所にします。
http://sourceforge.net/projects/gnuwin32/files/coreutils/5.3.0/
(2)先ほど解凍して出来たbinフォルダの中に、sedでも使用した以下のdllファイルをコピーし、sedやbzip2等と同じようにbinフォルダにパスを通しておきます。
・「libintl-0.14.4-bin.zip」(libintl3.dll)
http://sourceforge.net/projects/gnuwin32/files/libintl/0.14.4/
・「libiconv-1.9.2-1-bin.zip」(libiconv2.dll)
http://sourceforge.net/projects/gnuwin32/files/libiconv/1.9.2-1/
※同梱されている「libcharset1.dll」も一応コピーしておきます。
(3)コマンドプロンプトを起動して、「jawiki-20110921-pages-meta-current.xml.bz2」のあるフォルダに移動します。(※HDDの空き容量は最低限7GB16GB以上で、なるべく多い方がいいです。)
(4)次のコマンドを実行してしばらく待ちます。(※約10分程度でした。)
bunzip2 -c jawiki-20110921-pages-meta-current.xml.bz2 | split -l 2500000 - jawiki-20110921-pages-meta-current.xml_
※バイト単位で指定すると行の途中でも分割されます。そうすると、正常に置換処理が出来なくなる可能性があるので、行単位で指定します。
※メモリサイズに余裕があるようでしたら、もう少し大きくしても大丈夫だと思いますが、保存時には使用メモリがファイルサイズの約7倍になる事もありました。
※2500000行で1ファイル約150~180MB程度になります。(約1GB程度の空きメモリがありましたが、この設定でもメモリが原因のエラーで、検索・置換ソフトで置換できないファイルが2個発生したので、テキストエディタで個別に開いて置換ました。)
2.検索・置換ソフトで「<redirect />」を削除します。
(1)「Repl-Ace on .NET Ver.1.0.4」(repl_ace_20081119.zip)をダウンロードして適当な場所に解凍します。(※※ 要「Microsoft .NET Framework 2.0」および「Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)」)
http://www.sirmiles.com/repl_ace/
(2)Repl_Ace.exeを起動して、それぞれ次のように設定します。
・Step 1
「検索する場所」で、先ほど分割保存したフォルダを選択します。
「検索ファイル名」に「jawiki*.xml_*」を入力します。
「Step 2」の右横にある「他の機能」をクリックして、「デフォルトの文字セット」に「Unicode(UTF-8)」を、「デフォルトの改行文字」に「LF(\n)」を選択します。
「検索」ボタンを押します。
・Step 2
「** 個のファイルが見つかりました。」と表示されて、一覧画面に対象ファイルがリスト表示されます。(※チェックはそのままにします。)
・Step 3
「検索文字列」に「<redirect />」を入力して「追加」ボタンを押します。
(※置換文字列」は空欄のままで、すべて未チェックのままにします。)
(3)左下の「設定」ボタンを押し、それぞれ次のように設定します。
・「バックアップ」タブで、「バックアップを作成」のチェックを外します。
※HDD容量に余裕があれば、チェックを入れておいてもいいです。
・「処理結果」タブで、「元のファイルを上書きする」にチェックを入れます。
※HDD容量に余裕があれば、「指定した場所に同名のファイルを作成する」にチェックを入れて、置換後のファイルを保存する場所を選択します。
・他のタブの設定はそのままにして、「OK」で設定画面を閉じます。
(4)「実行」ボタンを押し、確認メッセージが「OK」を押して、処理が完了するまで待ちます。(※約10分程度でした。)
(5)処理結果が表示されたら、「置換箇所」の項目が「0」で、コメントにエラーが表示されているファイルがないか確認してください。(※数個だけの場合は、テキストエディタで開いて置換するといいです。180MB程度でしたら、サクラエディタ(フリーソフト)でも可能です。)
3.「ファイル破断+」を使用して、ファイルを結合します。
(1)次のページでダウンロードしたファイルを適当な場所に解凍します。
http://www.vector.co.jp/soft/win95/util/se283383.html
(2)fcutplus.exeを起動して「設定」タブを表示し、「分割/結合に使用するメモリ」の箇所を適切に設定します。(※私は256MBに設定しましたが、空きメモリに余裕があるのでしたら512MB程度でもいいと思います。)
(3)「+結合」タブを表示したら、エクスプローラーで結合するファイルを複数選択して、ドラッグ&ドロップします。(※一番最初のファイル「~.xml_aa」をクリックした状態のまま、「+結合」タブの一覧画面内にドラッグ&ドロップすると、順番通りに綺麗に並びます。)
(4)ファイルの順番が正しい事を確認したら、「処理実行」ボタンを押し、保存先とファイル名を指定して処理が完了するのを待ちます。(約8分程度でした。)
※上の方が最初に結合されるファイルになります。
※処理が完了すると、実行中の画面が消えますので、ソフトを終了してください。
4.xml2sqlでファイルを生成します。
(1)「xml2sql-0.5-win32.zip」を解凍したフォルダをエクスプローラで開きます。
(2)「xml2sql-fe.exe」を起動して、「XML File」の欄で先ほど結合したXMLファイルを選択します。
※「Output Format」は「mysqimport」にチェックを入れたままにします。
※生成するファイルの出力先を指定したい場合は、「Output Directory」で指定します。(デフォルトでは、XMLファイルと同じ場所に生成されます。)
(3)「START!!」ボタンを押し、そのまま待ちます。(※約15分程度でした。)
次の画像のように進行状況が表示されるので、コマンドで実行するよりもおすすめです。
※参考までに、生成された各ファイルのサイズですが、text.txt - 約4.96GB、page.txt - 約127MB、revision.txt - 約155MBでした。
※ファイルの分割または検索・置換などに、別のソフトがある場合は、そちらを利用しても大丈夫です。(ソフトの性能により無理な場合は、ご紹介したソフトを使ってみてください。)
インストールは不要です。下記の手順で解凍し、実行するだけです。
$bunzip2 -c jawiki-latest-pages-meta-current.xml.bz2 | xml2sql
http://gnuwin32.sourceforge.net/packages/bzip2.htm
※上記はWikipediaのBzip2のページ(External linksのbzip2 for Windows)で紹介されています。
http://en.wikipedia.org/wiki/Bzip2
※解凍して出来る「bin」フォルダにパスを通して使用してください。(「システムの詳細設定」を開いて、「環境変数」でPathに追加します。)
http://blog.cnu.jp/2009/11/06/windows-7-path/
※起動中のコマンドプロンプトで一時的に反映するには、以下を実行します。(他のプログラムでは反映されません。)
※以下は「D:\cli_tools\bzip2」に解凍した場合
set path=D:\cli_tools\bzip2\bin;%PATH%
>「bin」フォルダにパスを通して
はい、通しました。
C:\Program Files (x86)\bzip2\bin>bunzip2 -c jawiki-20110921-pages-meta-current.xml.bz2 | xml2sql
*jawiki-20110921-pages-meta-current.xml.bz2 をダウンロードし、
同じフォルダーに置きました。
と、DOSのコマンド入力したところ、
'xml2sql' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
とのメッセージが出てきます。
bunzip2のpathは通っているのですが、xml2sqlのpathが通っていない、
との事のような気がします。
xml2sqlは解凍フォルダを探してもみあたりません。
アドバイスいただけると助かります。
お手数おかけしてすいません。
よろしくお願いいたします。
じゅぴたーさんの回答にある手順1~4を行ったでしょうか?(※実行するコマンドは、下に書いていますが変更になります。)
xml2sqlはxml2sql-0.5-win32.zipに入っています。
xml2sql-0.5-win32.zipを解凍したフォルダにcdで移動して作業する場合は、xml2sqlにはパスを通さなくても大丈夫です。(もちろんbzip2と同じように、実行中のコマンドプロンプトで「set path=C:\~;%PATH%」を実行して一時的に追加するか、システム詳細設定の環境変数でPathに追加して置いてもいいです。)
※※※ ご注意 ※※※
「bunzip2 -c jawiki-latest-pages-meta-current.xml.bz2 | xml2sql」では、次のようなエラーが出るそうです。(※別の小さいデータをダウンロードして試しましたが、同じエラーが出て途中で止まりました。)
「unexpected element <redirect>
xml2sql: parsing aborted at line *** pos 16.」
http://d.hatena.ne.jp/yuka_y/20091124/1259491359
代わりに次のコマンドを実行してください。
bzcat jawiki-latest-pages-meta-current.xml.bz2 | sed -e "s/<redirect \/>//" | xml2sql
※参考記事では、「sed -e 's/<redirect \/>//'」とシングルクォーテンションで囲んでいますが、おそらく『指定されたファイルが見つかりません。』というエラーになります。「sed -e "s/<redirect \/>//"」のようにダブルクォーテンションで囲んで指定してください。
※sedを入れていない場合は、次からダウンロードして使用してください。
http://sourceforge.net/projects/gnuwin32/files/sed/4.2.1/
※「sed-4.2.1-bin.zip」を使う場合は、同じようにパスを通す必要があります。
(「sed-4.2.1-setup.exe」でインストールする場合は、たぶん自動でパスが通されるのではないかと・・・)
dllファイルが足りないとメッセージが表示された場合は、次のファイルをダウンロードして、各binディレクトリにある「*****.dll」を「bin/sed.exe」と同じフォルダにコピーします。
・「libintl-0.14.4-bin.zip」(libintl3.dll)
http://sourceforge.net/projects/gnuwin32/files/libintl/0.14.4/
・「libiconv-1.9.2-1-bin.zip」(libiconv2.dll)
http://sourceforge.net/projects/gnuwin32/files/libiconv/1.9.2-1/
・「regex-2.7-bin.zip」(regex2.dll)
http://sourceforge.net/projects/gnuwin32/files/regex/2.7/
「jawiki-latest-pages-meta-current.xml.bz2」は約1.6Gもあるのでかなり時間が掛かるはずです。
(xml2sqlを解凍したフォルダ内に「page.txt」「revision.txt」「text.txt」が生成(xml2sqlを解凍したフォルダ内に移動して作業している事が前提です。)されますので、ファイルサイズを確認しながら気長に待ってみてください。PCのスペックにもよると思いますが、何時間掛かるのかは不明です。)
次の記事は、「jawiki-latest-pages-articles.xml.bz2」で実行した人の事例ですが、『(ServersMan@VPSのサーバーで約15分)』掛かったそうです。(※現在はもう少しファイルサイズが大きくなっていると思います。)
http://chamu.org/blog/?p=412
どうしても時間が掛かりすぎて処理が止まっているように見える場合は、Linux環境で実行した方が良いと思います。
VPSまたは専用サーバを契約している場合は、そちらでxml2sql等をインストールして実行するか、Win 7に仮想デスクトップ環境で好きなOSをインストールして試してみてください。
私の場合は「VMware Player」にUbuntu 11.04をインストールして試しました。(※ファイルサイズが大きすぎるので、小さなファイルでしか試していません。)
的確に、ご指示いただき、ありがとうございます。
昨日、21:56からは始まり(現在で10時間経過)、まだ、やっております。
変なループでもしているのか、心配ですが、
もう少し待ってみるつもりです。
ここまで、時間がかかるものだとは思っておりませんでしたが、
少なくても、一歩前進できました。
コマンドプロンプトは「点滅」しているので、実行中なのだと思います。
ありがとうございました。
以下のコマンドを実行しております。
2011.9.24 21:56から実行中(現在は 2011.9.25 9:31)
C:\Program Files (x86)\bzip2\bin>bzcat jawiki-20110921-pages-meta-current.xml.bz
2 | sed -e "s/<redirect \/>//" | xml2sql
小さなファイルで試しましたが、GnuWin32のsedでは、行末が2バイト文字になっている行で処理が停止するようです。
分割した小さなwikipediaのデータ(xml)ファイルと適当なHTMLファイルで試しましたが、両方で現象が発生しました。(行末に1バイトの目印となる文字を付加してから、sedで<redirect />と一緒に削除処理して、xml2sqlに渡すという方法で上手く動作しました。ただし、大きなファイルでは失敗しましたので、成功するかどうかはまだ分かりません。)
数10時間掛けるよりも、Linux環境で実行した方がいいのではないかと思います。
アドバイスいただき、ありがとうございます。
9/25から始め、今日で3日目が終わろうとしています。
PC立ち上げっぱなし、は問題ないのですが、時間かかりすぎますかね。
>小さなファイルで試しましたが、GnuWin32のsedでは、
>行末が2バイト文字になっている行で処理が停止するようです。
ディスクI/Oがあり、ドスプロンプトの画面でカーソルが点滅しているので、何か処理していると思うのですが。
>Linux環境で実行した方がいいのではないかと
レンタルサーバ以外触ったことがないので、少し考えます。
コメントいただき、ありがとうございました。
Vistaで搭載メモリ3GBだけですが、そんなに時間は掛かりませんでしたので、やはりsedが原因で処理が停止していると思います。
処理が進んでいる場合、text.txt、page.txt、revision.txtのサイズが増えますので、各ファイルのプロパティを開いてから、エクスプローラでファイル一覧を更新して、サイズを確認してみてください。
※ただ更新しただけでは、なぜか変化しませんので・・・
ありがとうございました。
text.txt - 約6.98GB、page.txt - 約173MB、revision.txt - 約220MBでした。
次のページに必要な拡張機能等の記載がありましたので、今後の作業の参考にしてください。
http://www.mirai-city.org/xml2sql%E3%81%AB%E3%82%88%E3%82%8Bwikipedia%E3%81%AE%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3/
この作業を自分なりにまとめておこうと、思っていたところでした。
大変助かります。
また、次にmediawikiにインポートする作業に取り掛かろうと思っています。
その節も、アドバイスいただけたら助かります。
ありがとうございました。
インポートは、ファイルのあるディレクトリに移動してから、下記のコマンドでやってみてください。
※「{page,revision,text}.txt」ではエラーになるようです。(Windowsだからかもしれませんが、確認していないので不明です。)
Mysqlのバージョンが5.0系ということですので、特に問題なく完了すると思います。
mysqlimport -u ユーザー名 -p データベース名 --local page.txt rivision.txt text.txt
※「-p」は、パスワードが必要な場合だけ指定します。
※「--local」は、ローカルにあるファイルを読み込む時に指定します。(※指定しない場合、インポート先のデータベースのデータディレクトリ内にあると判断されます。)
他にも分からない事があったら気軽に聞いてください。