接着剤の精進日記

競プロでの精進や研究に関係したことを書いていきます。

Wikipediaのあるカテゴリーに属する記事のタイトルを取得する方法

はじめに

Wikipediaのdumpデータを用いて,あるカテゴリに含まれる記事のタイトルを取得します.

環境

CentOS7
Python3.6

事前準備

まず,word2vec-wikification-pyをインストールします.pipでできます.
Wikificationをしてみよう ~Wikipediaを利用した情報抽出 & 曖昧性解消まで ~ - Qiita

pip install word2vec-wikification-py

Mysqlwikiのdumpデータの用意は他を参照してください.
(他の人が用意してくれたのを使ったのでわかりません)

記事のタイトルを出力する

以下のプログラムを動かすことであるカテゴリに属する記事のタイトルを全て出力します.

from word2vec_wikification_py.initialize_mysql_connector import initialize_pymysql_connector
import pymysql.cursors

mysql_username = 'username'
mysql_hostname = 'hostname'
mysql_password = 'password'
mysql_db_name = 'db_name'


serch_words = ['政府']


print("serch_words:" + str(serch_words))
for word in serch_words:
    try:
        mysql_connector = initialize_pymysql_connector(hostname=mysql_hostname,
                                               user_name=mysql_username,
                                               password=mysql_password,
                                               dbname=mysql_db_name)
        with mysql_connector.cursor() as cursor:
            sql = "SELECT cl_to AS parent, page_title AS child FROM page JOIN categorylinks ON categorylinks.cl_from=page.page_id WHERE categorylinks.cl_type != 'subcat' AND categorylinks.cl_to ='" + word + "'"
            cursor.execute(sql)
            results = cursor.fetchall()
    finally:
        mysql_connector.close()

for page_title in results:
    print(page_title[1].decode('utf-8'))

以下の部分は自分で用意したsqlに応じて変えてください

mysql_username = 'username'
mysql_hostname = 'hostname'
mysql_password = 'password'
mysql_db_name = 'db_name'

今回は政府というカテゴリに含まれる記事を出力します.
以下が結果です.
f:id:tkm-kyudo:20181113140042p:plain

取得した結果が右のターミナルに出力されています.
wikiのページと見比べると大丈夫そうですね.
使用するdumpデータによって結果は多少変わると思います.

まとめ

wikipediaのdumpデータを使用することで,wikipediaのあるカテゴリに属する記事のタイトルを取得できました.
Mysqlに関して丸投げしたので,自分でもやってみようと思います.