前提・実現したいこと
皆様
wikipediaのダンプデータを使って,各単語のカテゴリ情報を抽出するプログラムを作成しているのですが,カテゴリ情報をうまく抜き出せずに困っています.プログラミング初心者で,ぜひ,ご教授ください.
例えば,wikipediaで「日本」という単語を調べると,該当ページの一番下に「カテゴリ:日本|島国|現存する君主国|G8加盟国」と表示されます(https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC).
ある単語を入力したときに,「日本」,「島国」,「現存する君主国」,「G8加盟国」にあたるカテゴリ情報を自動的に取得するプログラムを作りたいと考えております.
使用しているwikipediaのダンプデータは,https://dumps.wikimedia.org/jawiki/20190801/ にあるjawiki-20190801-categorylinks.sql.gzというファイルです.解凍して,mysqlにインポートをしました.
categorylinks.sqlには,以下のカラムがあります.
cl_from,cl_to,cl_sortkey,cl_timestamp,cl_sortkey_prefix,cl_collation,cl_typeです.
cl_fromは番号で,別のダンプデータに収録されている各ページのIDを指すpage_idの番号と対応しています.例えば,「日本」のpage_idは1864744です.また,cl_toは文字で,cl_fromに該当するpage_idが属するカテゴリを表します.
発生している問題
以上のことをふまえて,日本のカテゴリ情報を抽出しようと,mysqlで以下のsql文を実行しました.cl_type = 'page'は,cl_fromがページの時に設定するようです.
mysql> select cl_to from categorylinks where cl_from = 1864744 and cl_type = 'page';
しかし,結果は以下の通りで,取得したい「日本」,「島国」,「現存する君主国」,「G8加盟国」以外のカテゴリも表示されました.「日本」,「島国」,「現存する君主国」,「G8加盟国」だけを抜き出すには,どうすればいいのでしょうか.
+----------------------------------------------------------------------------+ | cl_to | +----------------------------------------------------------------------------+ | Div_colで3列を指定しているページ | G8加盟国 | ISBNマジックリンクを使用しているページ | Reflistで3列を指定しているページ | Webarchiveテンプレートのarchiveisリンク | Webarchiveテンプレートのウェイバックリンク | グラフのあるページ | 出典を必要とする記事/2018年2月 | 出典を必要とする記述のある記事/2016年5月 | 出典を必要とする記述のある記事/2016年9月 | 外部リンクがリンク切れになっている記事/2010年1月-4月 | 外部リンクがリンク切れになっている記事/2018年3月 | 島国 | 日本 | 書きかけの節のある項目 | 正確性 | 現存する君主国 | 編集半保護中の記事 | 言葉を濁した記述のある記事_(いつ)/2011年 +----------------------------------------------------------------------------+ 19 rows in set (0.00 sec)
試したこと
・categorylinks.sqlのcl_typeは,’page’,’subcat’,’file’を選ぶことができますが,’subcat’,'file'でもうまくいきませんでした.
・ページ情報をまとめたjawiki-page.sqlやjawiki-pagelinks.sql,またカテゴリ一覧をまとめたcategory.sqlのダンプデータも見てみましたが,各ページがどのカテゴリに所属しているかを表すカラムはありませんでした.
どうすれば,「日本」のページが属する4つのカテゴリを正確に抜く出すことができるのでしょうか.
ぜひ,どなたか教えてください.よろしくお願いいたします.
回答2件
あなたの回答
tips
プレビュー