LoginSignup
3
8

More than 3 years have passed since last update.

【自然言語処理のためのWikipediaデータの扱い方(#2) 】カテゴリーDBの作成

Posted at

目的

自然言語処理のコーパス用データを効率よく作成するための事前処理として、カテゴリーDBの作成を行います。このDBを使うと特定のカテゴリーに所属するサブカテゴリーの一覧作成などが可能になります。

次の記事などを参考にさせていただいています。
(MySQLからSQLiteへの変換とSQLの修正は行っていますが、ほとんどそのままです)
https://qiita.com/tekunikaruza/items/93d3267a444acef470d9

方法

カテゴリー関連のDumpデータを使用してSQLiteのDBを作成し、SQLを使用して子カテゴリー一覧を取得します。

手順

mysql2sqlieteをダウンロードする

wikipediaのdumpページからダウンロードできるファイルはMySQLのSQLファイルなので、SQLiteのSQLに変換するために使用変換ツールです。

git clone git@github.com:dumblob/mysql2sqlite.git

sqlite3をインストールする

インストールされていない場合は次のコマンドでインストールします。

sudo apt install sqlite3

カテゴリー構造データをダウンロードして解凍

# Wikipediaのdumpページからダウンロード
wget https://dumps.wikimedia.org/jawiki/20191001/jawiki-20191001-categorylinks.sql.gz

# 解凍
gunzip jawiki-20191001-categorylinks.sql.gz

記事情報データをダウンロードして解凍

カテゴリーIDからカテゴリー名を検索する際に使用します。

# Wikipediaのdumpページからダウンロード
wget https://dumps.wikimedia.org/jawiki/20191001/jawiki-20191001-page.sql.gz

# 解凍
gunzip jawiki-20191001-page.sql.gz

カテゴリー構造データをsqliteのDBへ投入

./mysql2sqlite/mysql2sqlite jawiki-20191001-categorylinks.sql | sqlite3 wikicategory.db

記事情報データをsqliteのDBへ投入

MySQLからSQLiteへ返還してINSERTする際、UNIQUEキー制約の部分でエラーが出たためこの制約を削除してから投入しています。Wikipediaを運用するわけではないので、この制約は無くても問題ありません。

# 対象のキー制約を削除したSQLを新たに作成。
# ("UNIQUE KEY `name_title`"という文字列を検索し、ヒットした行を削除しています)
sed '/UNIQUE\sKEY\s`name_title`/d' jawiki-20191001-page.sql > jawiki-20191001-page_nouniqkey.sql

# 作成したSQLを使用して記事情報データをDBに投入
./mysql2sqlite/mysql2sqlite jawiki-20191001-page_nouniqkey.sql | sqlite3 wikicategory.db

以上でDBの作成自体は終了です。

カテゴリーデータの抽出

テストとして特定のカテゴリーに属するサブカテゴリ―の一覧を表示します。
冒頭で紹介したページにあるSQLを参考に、次のSQLを使用したワンライナーで実行してみます。

SELECT
    p.page_title
FROM
    page AS p JOIN categorylinks AS c ON c.cl_from = p.page_id
WHERE
    c.cl_type = "subcat" AND c.cl_to = "人工知能";

作業ディレクトリで次のコマンドを入力すると、サブカテゴリ―一覧が表示されます。

> sqlite3 wikicategory.db 'SELECT p.page_title FROM page AS p JOIN categorylinks AS c ON c.cl_from=p.page_id WHERE c.cl_type="subcat" AND c.cl_to="人工知能";'
音声合成
音声認識
人工知能学者
機械学習
コンピュータ囲碁
コンピュータ将棋
コンピュータチェス
コンピュータビジョン
人工知能を題材とした作品
自然言語処理
進化的計算
人工知能の哲学
心身問題
人工知能の組織
知識表現
チャットボット
データマイニング
認知アーキテクチャ
ファジー論理
論理プログラミング

バックナンバー

この記事は【自然言語処理のためのWikipediaデータの扱い方】というシリーズ2回目です。
以前の記事は次のリンクから参照可能です。

【自然言語処理のためのWikipediaデータの扱い方(#1) 】Wikipedia記事DBの作成

3
8
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
3
8