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)
おしまい
あとは煮るなり焼くなりお好きなように。
-
"Ctrl+q"で解除 ↩