Wikipedia:短いページを作るための手順を紹介します。
目次
1 動作環境
2 手順
2.1 事前準備
2.2 ダンプデータのインポート
2.3 28 - 256
2.4 それ以降
3 関連項目
//
動作環境
MySQL4.0.2以降が動くOS(linux, FreeBSD, MacOSX, Windows2000以降)
MySQL
⇒MediaWikiのうちmaintenance/tables.sql
⇒m:xml2sql
Wikipedia:データベースダウンロードも参照
データベースとテーブルの作成
MySQLのサービスが立ち上がったら、jaのデータ読み込み用のデータベースとテーブルを作成しておきます。mysql> create database wikipedia;Query OK, 1 row affected (0.00 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mysql || wikipedia |+--------------------+3 rows in set (0.00 sec)mysql> use wikipedia;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -A Database changedmysql> source /home/John_Doe/tables.sql
xml2sqlのインストール
⇒m:xml2sql#installを参考にインストールを行います。gcc, libc6-dev, expat, libexpat, make が必要です。
ダンプデータのインポート
⇒Wikimedia dump serviceのlatestよりjaのダンプを取得。
xml2sqlでダンプをXMLテキストに変換。
mysqlimport でデータベースにインポート。
wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-pages-articles.xml.bz2bunzip2 -c jawiki-latest-pages-articles.xml.bz2 | xml2sqlmysqlimport -u root wikipedia `pwd`/{page,revision,text}.txt
ダンプデータにBMP外の記事名があると、インポートエラーが発生するかもしれません。mysqlimport: Error: Duplicate entry '0-' for key 2, when using table: page
この場合は、pageテーブルの取り込み済件数をチェックして、テキストエディタで page.txt から指定した記事を取り除いてください (select count(*) from page; また select max(page_id) from page; として page_idで検出することもできます)。その後、page テーブルを切り捨てて (truncate table page;)、再度 mysqlimportを実行します。
検出したBMP外の記事は、記事の場合は改名、リダイレクト(及び記事移動後の跡地のリダイレクト)は即時削除の依頼を行います。
ダンプデータを取り込むことができたら、jaのダンプを読み込んだデータベースを指定して、以下のSQLを順次実行していきます。
28 - 256SET @min_value=28,@max_value=256;SELECT CONCAT('* [[',page_title,']]') FROM page,revision,text WHERE( page.page_namespace=0AND page.page_is_redirect=0AND page.page_len > @min_valueAND page.page_len < @max_valueAND page.page_latest = revision.rev_idAND revision.rev_id = text.old_idAND page.page_title NOT LIKE "%/履歴"AND text.old_text NOT LIKE "%imai%"AND text.old_text NOT LIKE "%akujo%"AND text.old_text NOT LIKE "%曖昧さ回避%"AND text.old_text NOT LIKE "%保護性急%") OR ( page.page_namespace=0AND page.page_is_redirect=0AND page.page_len < @min_valueAND page.page_latest = revision.rev_idAND revision.rev_id = text.old_idAND page.page_title NOT LIKE "%/履歴"AND text.old_text NOT LIKE "%imai%"AND text.old_text NOT LIKE "%akujo%"AND text.old_text NOT LIKE "%eletedpage%"AND text.old_text NOT LIKE "%isambig%"AND text.old_text NOT LIKE "%dab%"AND text.old_text NOT LIKE "%Dab%"AND text.old_text NOT LIKE "%曖昧さ回避%"AND text.old_text NOT LIKE "%保護性急%")ORDER BY page.page_titleINTO OUTFILE './under256bytes.txt';
それ以降SET @min_value=(下限値),@max_value=(上限値);SELECT CONCAT('* [[',page_title,']]') FROM page,revision,text WHEREpage.page_namespace=0AND page.page_is_redirect=0AND page.page_len >= @min_valueAND page.page_len < @max_valueAND page.page_latest = revision.rev_idAND page.page_title NOT LIKE "%/履歴"AND revision.rev_id = text.old_idAND text.old_text NOT LIKE "%imai%"AND text.old_text NOT LIKE "%akujo%"AND text.old_text NOT LIKE "%isambig%"AND text.old_text NOT LIKE "%dab%"AND text.old_text NOT LIKE "%Dab%"AND text.old_text NOT LIKE "%曖昧さ回避%"ORDER BY page.page_titleINTO OUTFILE './under(上限値)bytes.txt';
できたファイルから邪魔っぽいページをいくつか除外。プレビューして削除されたものやREDIRECTを除去。この辺は手動なので適当です。
改善案などはWikipedia‐ノート:短いページまで。質問等はUser talk:Suisuiまで。手順のうち mysqlimportでimport、までの質問は事情により受け付けません。MySQLのマニュアルやFAQなどよりふさわしいところで全て公開されています。
関連項目
⇒m:Help:Database layout - sqlの中身はこちらを参照(英語)
更新日時:2008年4月5日(土)12:38
取得日時:2008/04/10 18:31