目的
自然言語処理のコーパス用データを効率よく作成するための事前処理として、カテゴリー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回目です。
以前の記事は次のリンクから参照可能です。