将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)

结束

剩下的就根据您喜欢的方式煮或者烤。

在中文环境下,「Ctrl+q」用于解除↩。
广告
将在 10 秒后关闭
bannerAds