将Wiktionary的导出数据导入到MariaDB中
尽管与维基百科相比较较为次要,但有时候我想从Wiktionary的正文数据中挑选成语。
在一种情况下,将数据转储到数据库中并且希望获取包含某个汉字的词组数据时,这样做可能会低调地派上用场。
有没有需求有点微妙,不过也顺便当作备忘录。
备办
环境为Ubuntu 16.04LTS。
确保所需资源
首先,创建一个工作目录。
$ mkdir work
$ cd work
请从以下链接下载关键的转储数据。
/latest/ 是 /jawiktionary/ 的索引目录。
根据目标信息的不同,所需的文件会根据转储数据更改。想要获取Wikitionary页面的正文,因此需要下载“*-pages-articles.xml.bz2”文件的最新版本。
$ wget https://dumps.wikimedia.org/jawiktionary/latest/jawiktionary-latest-pages-articles.xml.bz2
因为没有表结构的定义信息,所以从mediawiki的存储库中获取tables.sql文件。
mediawiki/tables.sql 是在 GitHub 上的wikimedia/mediawiki 存储库中的一个文件。
如果出现与表结构有关的错误(根据维基百科的转储数据推测),尝试在若干个较旧的修订版本中,可能会成功。
安装必要的软件包。
为了运行MWdumper将MariaDB的主体及xml数据转换成SQL,需要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
参数确认(二)
$ grep max_allowed_packet /etc/mysql/mariadb.conf.d/50-server.cnf
max_allowed_packet = 16M
如果max_allowed_packet的值大于16MB,就可以了。
创建数据库
$ sudo mysql -u root -p
> create database wikt CHARACTER SET binary ;
如果在创建表时未将字符集设置为二进制,则会产生以下错误并导致失败。
错误 1071 (42000),第138行:指定的键值过长;最大键长为767字节
我忘记了在哪里找到的,但数据库的名称可以随意。在这里,我们将其称为”wikt”。
在中文中表达如下:据说在维基百科的数据库中没有问题。
确认一下数据库的状态。
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。
手册: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)
结束
剩下的就根据您喜欢的方式煮或者烤。