LoginSignup
4
3

More than 5 years have passed since last update.

Wiktionary のダンプデータを MariaDB にインポートする

Posted at

Wikipedia に比べればマイナーですが、Wiktionary の本文データから熟語をピックアップしたい時があったりします。

DBにダンプデータを放り込んでおくとある漢字を含む熟語のデータが欲しいようなケースで地味に役に立つ場合があります。

ニーズがあるかどうか微妙ですが、備忘録も兼ねて。

準備

環境はUbuntu 16.04LTS。

必要なリソースの確保

何はともあれ作業ディレクトリを作成。

$ mkdir work
$ cd work

肝心のダンプデータは下記よりダウンロード。

Index of /jawiktionary/latest/

ダンプデータのうちお目当の情報に応じて必要なファイルは変わります。Wikitionaryのページ本文が欲しいので"*-pages-articles.xml.bz2"というファイルの最新版をダウンロード。

$ wget https://dumps.wikimedia.org/jawiktionary/latest/jawiktionary-latest-pages-articles.xml.bz2

テーブル構造の定義情報が付いてこないので、mediawikiのリポジトリからtables.sqlをゲットする。

mediawiki/tables.sql at master · wikimedia/mediawiki · GitHub

テーブル構造起因のエラーが出る場合は(WikiPediaのダンプデータのケースからの推測ですが)何世代か古いリビジョンでトライするとうまく行く可能性があります。

必要なパッケージのインストール

MariaDB本体と、xmlデータをSQLに変換するMWdumperを実行するためにJavaのランタイムが必要です。

$ sudo apt install  openjdk-8-jdk-headless
$ sudo apt install  mariadb-server

MariaDB の設定

一応、MariaDB root のパスワードを設定しておく(初期値は空)。

$ sudo mysql_secure_installation

mariadbの設定のチェック

デフォルトの文字コードがutf8mb4、collation-server が utf8mb4_general_ciになっていれば問題ない。

$ sudo less /etc/mysql/mariadb.conf.d/50-client.cnf
$ sudo less /etc/mysql/mariadb.conf.d/50-server.cnf

パラメータの確認(その2)

$ grep max_allowed_packet /etc/mysql/mariadb.conf.d/50-server.cnf
max_allowed_packet      = 16M

max_allowed_packetの値が16MB以上になっていればOK。

DBの作成

$ sudo mysql -u root -p

> create database wikt CHARACTER SET binary ;

キャラクターセットをbinaryにセットしておかないとテーブル作成時に下記のエラーが発生して失敗する。

ERROR 1071 (42000) at line 138: Specified key was too long; max key length is 767 bytes

どこで見つけたのか忘れたけど。データベースの名称は何でもいい。ここではwiktとした。

とする。Wikipedia のダンプでは問題なかったような。

データベースの状態を確認しておく。

MariaDB [wikt]> show variables like 'character%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | binary                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

MWDumper のビルド

MWDumper については下記を参照。

Manual:MWDumper/ja - MediaWiki

バイナリを見つけられなかったのでソースからビルドする。

$ git clone https://github.com/wikimedia/mediawiki-tools-mwdumper.git
$ cd mwduper
$ mvn package

ビルドに成功すると、targetディレクトリ配下にmwdumper-1.25.jarというファイルが生成されている。このファイルを適当な場所へコピー。

mvnコマンドが見つからないとか言われる時はsudo apt install maven

テーブル定義を読み込ませる

$ cat tables.sql | sudo mysql -u root wikit

Ubuntu の場合はUnixドメインソケット経由で接続する場合はsudoが必要らしい。

データの投入

いざデータ投入。

$ java -jar mwdumper-1.25.jar --format=sql:1.25  --filter=latest jawiktionary-latest-pages-articles.xml.bz2 | sudo mysql -u root wikt

最初の1000件で失敗していると残りが成功しているように見えてもアウトなので注意。

出力が一気に流れてしまうので、Ctrl+sでスクロールを止めてチェックする1

念のため終了コードを確認しておく。

$ echo $?
0

確認してみる。

MariaDB [wikt]> SELECT * FROM text LIMIT 1;
+--------+-------------------------------------------------+-----------+
| old_id | old_text                                        | old_flags |
+--------+-------------------------------------------------+-----------+
|  11066 | Wiktionary:ウィクショナリーについて                 | utf-8     |
+--------+-------------------------------------------------+-----------+
1 row in set (0.27 sec)

おしまい

あとは煮るなり焼くなりお好きなように。


  1. "Ctrl+q"で解除 

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3