Leach! Itemizer開発日記

フォロワーの興味・関心を可視化する http://itemizer.leach.tokyo/

WikipediaのSQLダンプから親カテゴリを含むカテゴリ情報をCSVで吐き出すツールをDockerhubで公開

動機

itemizerでは多数の商品を取り扱うため、商品をカテゴリごとに、階層的に分けたいと考えた。 そこで弊チームの一員に相談したところ、Wikipediaがカテゴリ情報を持っているので利用すればよいとの助言を受けたため、カテゴリ情報をCSVで吐き出すことにした ※オープンデータ関連の講演を聴講する機会が多々有ったが、自分の頭の中のテーブルには載っていなかったのではっとしたのは内緒。

手順

とりあえずwikipediaが公開しているSQLダンプファイルの一覧を探すと以下のサイトにあたった。

Wikipediaのダウンロードできるデータファイル一覧 | mwSoft

SQLファイルはテーブルごとに分割してダンプされており、各SQLファイルの概要とそのカラムの説明が記載されている非常に良心的なサイトで安心した。

categoryテーブルをCSVに書き出すだけで良いのかと思ったのもつかの間、categoryテーブルのカラムを見ると親カテゴリの記載がないことに気づいた。 こんな時にはstackoverflowの出番なのだが、今回は納得できる回答が見当たらず、DockerhubやGithubにもそれらしいリポジトリは見当たらなかったため自作することにした。

niwatolli3/wikipedia-category-csv

https://hub.docker.com/r/niwatolli3/wikipedia-category-csv/

以下のコマンドを実行すると、カテゴリ情報を持つCSVファイルが出力される。出力先は /opt/categories.csv である。

docker run -d -v /opt/:/opt/ --rm niwatolli3/wikipedia-category-csv
/home/tomi/repos/wikipedia-category-csv% docker ps   
CONTAINER ID        IMAGE                               COMMAND                  CREATED             STATUS              PORTS                                 NAMES
39a3f0ad16f0        niwatolli3/wikipedia-category-csv   "/bin/sh -c '/usr/..."   2 minutes ago       Up 2 minutes                                              flamboyant_bhabha

IMAGEに自分のハンドルネームが載っていてこの上なく嬉しい。

カテゴリ一覧の生成

Wikipediaが公開しているSQLダンプファイルを用いてカテゴリ一覧を生成しようと考えている。

カテゴリの一覧は取得できるがサブカテゴリをcategoryテーブルからは取れないようなので、うまく取れる方法はないか模索した。

stackoverflowによれば、page, category, category_linksテーブルの3つが必要であると記載されているのでとりあえずmysql にimportしてデータを眺めてみる。

mediawiki - Wikipedia Category Hierarchy from dumps - Stack Overflow

どうやら以下のSQL文でカテゴリ一覧を取れるっぽい

カテゴリ

MariaDB [wikipedia]> select page.page_title from categorylinks join page on page.page_id = categorylinks.cl_from join category on categorylinks.cl_to = category.cat_title where categorylinks.cl_type = 'subcat' and category.cat_title like '学問';
+-----------------------------------+
| page_title                        |
+-----------------------------------+
| 学問の分野                        |
| 科学                              |
| 学問スタブ                        |
| 架空の思想・学問                  |
| 学者                              |
| 学術出版                          |
| 学術称号                          |
| 学術団体                          |
| 学生                              |
| 学派                              |
| 学問の賞                          |
| 研究                              |
| 高等教育                          |
| 知識                              |
| 問題                              |
| ルネサンス・ユマニスム            |
+-----------------------------------+
16 rows in set (0.00 sec)