Chapter3

今回は正規表現とAPI編です.

p20

data_path = "../data/jawiki-country.json.gz"
import pandas as pd
import numpy as np
import json
import gzip
import re
with gzip.open(data_path, "rt") as f:
    for line in f:
        fj = json.loads(line)
        if fj["title"] == "イギリス":
            article_england = fj["text"]
            print(article_england[:100])
{{redirect|UK}}
{{基礎情報 国
|略名 = イギリス
|日本語国名 = グレートブリテン及び北アイルランド連合王国
|公式国名 = {{lang|en|United Kingdom 

p21

category_eng = re.findall("\[\[Category:.*", article_england)

for i in category_eng:
    print(i)
[[Category:イギリス|*]]
[[Category:英連邦王国|*]]
[[Category:G8加盟国]]
[[Category:欧州連合加盟国]]
[[Category:海洋国家]]
[[Category:君主国]]
[[Category:島国|くれいとふりてん]]
[[Category:1801年に設立された州・地域]]

p22

category_name = []

for i in category_eng:
    name = re.sub(r"\[\[Category:|(\|\*)?\]\]", "",i)
    category_name.append(name)
    print(name)
イギリス
英連邦王国
G8加盟国
欧州連合加盟国
海洋国家
君主国
島国|くれいとふりてん
1801年に設立された州・地域

p23

# セクションのリスト
section_eng = re.findall(r"==.*==", article_england)

# セクション名とそのレベルの辞書
section = {}

for i in section_eng:
    count = i.count("=")
    level = int(count/2 - 1)
    i = re.sub("=","",i)
    section[i] = level

for index, i in enumerate(section.items()):
    print(i)
    if index > 5: break
('国名', 1)
('歴史', 1)
('地理', 1)
('気候', 2)
('政治', 1)
('外交と軍事', 1)
('地方行政区分', 1)

p24

試しにイギリスのWikiをみてみると, 画像は[[File: or [[ファイル: で始まっていることがわかる.
これを正規表現で抽出する.

media = re.findall(r"ファイル:.*?\||File:.*?\|", article_england)

# media = re.findall("(ファイル|File):.*?\|", article_england)
# 上記だと何故かFile, ファイルとしか出力されない

media_name = []

for index,i in enumerate(media):
    i = re.sub(r"ファイル:|File:|\|", "", i)
    media_name.append(i)
    print(i)
    if index > 5 : break
Royal Coat of Arms of the United Kingdom.svg
Battle of Waterloo 1815.PNG
The British Empire.png
Uk topo en.jpg
BenNevis2005.jpg
Elizabeth II greets NASA GSFC employees, May 8, 2007 edit.jpg
Palace of Westminster, London - Feb 2007.jpg

p25

template = re.findall(r'''
    ^\{\{基礎情報.*?$   
    (.*?)       
    ^\}\}$      
    ''', article_england, flags = re.MULTILINE + re.VERBOSE + re.DOTALL)
template_list = re.findall(r'''
    ^\|         
    (.+?)       
    \s*         
    =
    \s*         
    (.+?)       
    (?:         
        (?=\n\|)    
        | (?=\n$)   
    )           
    ''', template[0], flags = re.MULTILINE + re.VERBOSE + re.DOTALL)

template_dic = {}

for item in template_list:
    template_dic[item[0]] = item[1]

for index,i in enumerate(template_dic.items()):
    print(i)
    if index > 5 : break
('略名', 'イギリス')
('日本語国名', 'グレートブリテン及び北アイルランド連合王国')
('公式国名', '{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>英語以外での正式国名:<br/>\n*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}([[スコットランド・ゲール語]])<br/>\n*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}([[ウェールズ語]])<br/>\n*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}([[アイルランド語]])<br/>\n*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}([[コーンウォール語]])<br/>\n*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}([[スコットランド語]])<br/>\n**{{lang|sco|Claught Kängrick o Docht Brätain an Norlin Airlann}}、{{lang|sco|Unitet Kängdom o Great Brittain an Norlin Airlann}}(アルスター・スコットランド語)</ref>')
('国旗画像', 'Flag of the United Kingdom.svg')
('国章画像', '[[ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章]]')
('国章リンク', '([[イギリスの国章|国章]])')
('標語', '{{lang|fr|Dieu et mon droit}}<br/>([[フランス語]]:神と私の権利)')

p26

template_markup_removed = template_dic

for key, value in template_dic.items():
    template_markup_removed[key] = re.sub("'{2,5}", "", value) # 強調, 斜体は'が2~5個
    print(template_markup_removed[key])

イギリス
グレートブリテン及び北アイルランド連合王国
{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>英語以外での正式国名:<br/>
*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}(スコットランド・ゲール語)<br/>
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}(ウェールズ語)<br/>
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}(アイルランド語)<br/>
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}(コーンウォール語)<br/>
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}(スコットランド語)<br/>
**{{lang|sco|Claught Kängrick o Docht Brätain an Norlin Airlann}}、{{lang|sco|Unitet Kängdom o Great Brittain an Norlin Airlann}}(アルスター・スコットランド語)</ref>
Flag of the United Kingdom.svg
ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章
(イギリスの国章|国章)
{{lang|fr|Dieu et mon droit}}<br/>(フランス語:神と私の権利)
女王陛下万歳|神よ女王陛下を守り給え
Location_UK_EU_Europe_001.svg
英語(事実上)
ロンドン
ロンドン
イギリスの君主|女王
エリザベス2世
イギリスの首相|首相
デーヴィッド・キャメロン
76
1 E11
244,820
1.3%
2011
22
1 E7
63,181,775<ref>[http://esa.un.org/unpd/wpp/Excel-Data/population.htm United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population]</ref>
246
2012
1兆5478億<ref name="imf-statistics-gdp">[http://www.imf.org/external/pubs/ft/weo/2012/02/weodata/weorept.aspx?pr.x=70&pr.y=13&sy=2010&ey=2012&scsm=1&ssd=1&sort=country&ds=.&br=1&c=112&s=NGDP%2CNGDPD%2CPPPGDP%2CPPPPC&grp=0&a= IMF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom]</ref>
2012
5
2兆4337億<ref name="imf-statistics-gdp" />
2012
6
2兆3162億<ref name="imf-statistics-gdp" />
36,727<ref name="imf-statistics-gdp" />
建国
イングランド王国/スコットランド王国<br />(両国とも連合法 (1707年)|1707年連合法まで)
927年/843年
グレートブリテン王国建国<br />(連合法 (1707年)|1707年連合法)
1707年
グレートブリテン及びアイルランド連合王国建国<br />(連合法 (1800年)|1800年連合法)
1801年
現在の国号「グレートブリテン及び北アイルランド連合王国」に変更
1927年
スターリング・ポンド|UKポンド (&pound;)
GBP
±0
+1
GB / GBR
.uk / .gb<ref>使用は.ukに比べ圧倒的少数。</ref>
44
<references />

p27

template_markup_link_removed = template_markup_removed

for key, value in template_markup_removed.items():
    template_markup_link_removed[key] = re.sub("\[\[|\]\]", "", value) # 内部リンクは[[]]で囲まれている.
    print(template_markup_link_removed[key])

イギリス
グレートブリテン及び北アイルランド連合王国
{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>英語以外での正式国名:<br/>
*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}(スコットランド・ゲール語)<br/>
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}(ウェールズ語)<br/>
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}(アイルランド語)<br/>
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}(コーンウォール語)<br/>
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}(スコットランド語)<br/>
**{{lang|sco|Claught Kängrick o Docht Brätain an Norlin Airlann}}、{{lang|sco|Unitet Kängdom o Great Brittain an Norlin Airlann}}(アルスター・スコットランド語)</ref>
Flag of the United Kingdom.svg
ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章
(イギリスの国章|国章)
{{lang|fr|Dieu et mon droit}}<br/>(フランス語:神と私の権利)
女王陛下万歳|神よ女王陛下を守り給え
Location_UK_EU_Europe_001.svg
英語(事実上)
ロンドン
ロンドン
イギリスの君主|女王
エリザベス2世
イギリスの首相|首相
デーヴィッド・キャメロン
76
1 E11
244,820
1.3%
2011
22
1 E7
63,181,775<ref>[http://esa.un.org/unpd/wpp/Excel-Data/population.htm United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population]</ref>
246
2012
1兆5478億<ref name="imf-statistics-gdp">[http://www.imf.org/external/pubs/ft/weo/2012/02/weodata/weorept.aspx?pr.x=70&pr.y=13&sy=2010&ey=2012&scsm=1&ssd=1&sort=country&ds=.&br=1&c=112&s=NGDP%2CNGDPD%2CPPPGDP%2CPPPPC&grp=0&a= IMF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom]</ref>
2012
5
2兆4337億<ref name="imf-statistics-gdp" />
2012
6
2兆3162億<ref name="imf-statistics-gdp" />
36,727<ref name="imf-statistics-gdp" />
建国
イングランド王国/スコットランド王国<br />(両国とも連合法 (1707年)|1707年連合法まで)
927年/843年
グレートブリテン王国建国<br />(連合法 (1707年)|1707年連合法)
1707年
グレートブリテン及びアイルランド連合王国建国<br />(連合法 (1800年)|1800年連合法)
1801年
現在の国号「グレートブリテン及び北アイルランド連合王国」に変更
1927年
スターリング・ポンド|UKポンド (&pound;)
GBP
±0
+1
GB / GBR
.uk / .gb<ref>使用は.ukに比べ圧倒的少数。</ref>
44
<references />

p28

目につくのは下記
- ref ~ /ref
- <>で囲まれているもの
- {{lang|~|~(残したい)}}
- 連合法 (1800年)|1800年連合法)などがあるが, ()は全て削除

これらを除去する

template_markup_link_media_removed = template_markup_link_removed

for key, value in template_markup_link_removed.items():
    template_markup_link_media_removed[key] = re.sub("<ref.+?ref>|<.+?>|{.+?\|.+?\||\}\}|\(.+?\)|\*+", "", value) # 上記のものを正規表現で除去
    print(template_markup_link_media_removed[key])
イギリス
グレートブリテン及び北アイルランド連合王国
United Kingdom of Great Britain and Northern Ireland英語以外での正式国名:
An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath
Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon
Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann
An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh
Unitit Kinrick o Great Breetain an Northren Ireland
Claught Kängrick o Docht Brätain an Norlin Airlann、Unitet Kängdom o Great Brittain an Norlin Airlann
Flag of the United Kingdom.svg
ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章

Dieu et mon droit
女王陛下万歳|神よ女王陛下を守り給え
Location_UK_EU_Europe_001.svg
英語
ロンドン
ロンドン
イギリスの君主|女王
エリザベス2世
イギリスの首相|首相
デーヴィッド・キャメロン
76
1 E11
244,820
1.3%
2011
22
1 E7
63,181,775
246
2012
1兆5478億
2012
5
2兆4337億
2012
6
2兆3162億
36,727
建国
イングランド王国/スコットランド王国
927年/843年
グレートブリテン王国建国
1707年
グレートブリテン及びアイルランド連合王国建国
1801年
現在の国号「グレートブリテン及び北アイルランド連合王国」に変更
1927年
スターリング・ポンド|UKポンド (&pound;)
GBP
±0
+1
GB / GBR
.uk / .gb
44

p29

国旗画像はp25のtemplate_dic["国旗画像"]に入っている.

url = 'https://www.mediawiki.org/w/api.php?' + 'action=query'  + '&titles=File:' + template_dic["国旗画像"]  + '&format=json' + '&prop=imageinfo' + '&iiprop=url'

import requests

r = requests.get(url).json()

print(json.dumps(r, indent = 4))
{
    "continue": {
        "iistart": "2007-09-03T09:51:34Z",
        "continue": "||"
    },
    "query": {
        "pages": {
            "-1": {
                "ns": 6,
                "title": "File:Flag of the United Kingdom.svg",
                "missing": "",
                "known": "",
                "imagerepository": "shared",
                "imageinfo": [
                    {
                        "url": "https://upload.wikimedia.org/wikipedia/commons/a/ae/Flag_of_the_United_Kingdom.svg",
                        "descriptionurl": "https://commons.wikimedia.org/wiki/File:Flag_of_the_United_Kingdom.svg",
                        "descriptionshorturl": "https://commons.wikimedia.org/w/index.php?curid=347935"
                    }
                ]
            }
        }
    }
}

jsonの構造を確認できたのでurlを抜き出す.

image_url = r["query"]["pages"]["-1"]["imageinfo"][0]["url"]

print(image_url)
https://upload.wikimedia.org/wikipedia/commons/a/ae/Flag_of_the_United_Kingdom.svg

無事に取り出せたか画像を確認してみる

イギリスの国旗画像

オーケーっぽい

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.