LoginSignup
0
1

More than 5 years have passed since last update.

言語処理100本ノックに挑戦 第3章

Posted at

正規表現

前回の更新から、だいぶ時間が経ってしまった(毎日やろうと思っていたのに、、、)。

2章はUNIXコマンド編なので省略(ファイル操作に関しては、Pythonで書くより楽できる、という感想。当たり前?)。
以下、3章について。

20. JSONデータの読み込み

Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ.

json_title.py
# -*- coding: utf-8 -*-

import gzip
import json

def json_title(filename, titlename):
    # gzの中身を読み込み
    with gzip.open(filename, 'rt') as file:
        temp_dict = {i : json.loads(line) for i, line in enumerate(file)}

    temp_title = [temp_dict[j]['text'].split("\n") for j in temp_dict if temp_dict[j]['title'] == titlename]
    return temp_title[0]

結果

import json_title
column_UK = json_title.json_title('jawiki-country.json.gz', u'イギリス')
column_UK
Out[4]: 
['{{redirect|UK}}',
  '{{基礎情報 国',
  '|略名 = イギリス',
  '|日本語国名 = グレートブリテン及び北アイルランド連合王国',
  '|公式国名 = {{lang|en|United Kingdom of Great Britain and Northern Ireland}}
...
  '[[Category:海洋国家]]',
  '[[Category:君主国]]',
  '[[Category:島国|くれいとふりてん]]',
  '[[Category:1801年に設立された州地域]]']

21. カテゴリ名を含む行を抽出

記事中でカテゴリ名を宣言している行を抽出せよ.

import json_title
column_UK = json_title.json_title('jawiki-country.json.gz', u'イギリス')
[line for line in column_UK if 'Category' in line]
Out[4]: 
['[[Category:イギリス|*]]',
 '[[Category:英連邦王国|*]]',
 '[[Category:G8加盟国]]',
 '[[Category:欧州連合加盟国]]',
 '[[Category:海洋国家]]',
 '[[Category:君主国]]',
 '[[Category:島国|くれいとふりてん]]',
 '[[Category:1801年に設立された州・地域]]']

22. カテゴリ名の抽出

記事のカテゴリ名を(行単位ではなく名前で)抽出せよ.

pattern = re.compile(r'''
                ^       # 行頭にマッチ
                .*      # 任意の文字0字以上にマッチ
                \[\[Category:
                (       # 抽出対象文字グループ開始
                .*?     # 任意の文字0字以上にマッチ
                )       # 抽出対象の文字グループ終了
                (?:     # 抽出対象外!の文字グループ開始 : (?:...)で抽出対象から除外
                \|.*?   # |に続く任意の文字0字以上にマッチ
                )?      # 抽出対象外の文字グループ終了
                \]\]
                .*      # 任意の文字0字以上にマッチ
                $       # 行末
                ''', re.MULTILINE + re.VERBOSE)

[re.findall(pattern, line) for line in column_UK if re.findall(pattern, line)]
Out[50]: 
[['イギリス'],
 ['英連邦王国'],
 ['G8加盟国'],
 ['欧州連合加盟国'],
 ['海洋国家'],
 ['君主国'],
 ['島国'],
 ['1801年に設立された州・地域']]

23. セクション構造

記事中に含まれるセクション名とそのレベル(例えば"== セクション名 =="なら1)を表示せよ.

extract_Session.py
# -*- coding: utf-8 -*-

import json_title
import re

def session(filename, word):
    column_UK = json_title.json_title(filename, word)

    pattern = re.compile(r'''
                (={2,})  # セッション数判定用の'='
                \s*      # 任意の空白を除去
                 (.*?)   # 抽出対象のセッション名
                \s*      # 任意の空白を除去
                ={2,}    # セッション数判定用の'='
                ''', re.MULTILINE + re.VERBOSE)

    result = re.findall(pattern, column_UK)

    return {line[1] : len(line[0]) - 1 for line in result}

結果

import extract_Session
extract_Session.session('jawiki-country.json.gz', u'イギリス')
Out[3]: 
{'イギリスのポピュラー音楽': 3,
 'コメディ': 2,
 'サッカー': 2,
 'スポーツ': 1,
 'モータースポーツ': 2,
 '世界遺産': 2,
 '主要都市': 2,
 '交通': 1,
 '企業': 2,
 '哲学': 2,
 '国名': 1,
 '国民': 1,
 '国花': 2,
 '地方行政区分': 1,
 '地理': 1,
 '外交と軍事': 1,
 '外部リンク': 1,
 '婚姻': 2,
 '宗教': 2,
 '政治': 1,
 '教育': 2,
 '文化': 1,
 '文学': 2,
 '映画': 2,
 '歴史': 1,
 '気候': 2,
 '海運': 2,
 '祝祭日': 2,
 '科学技術': 1,
 '競馬': 2,
 '経済': 1,
 '脚注': 1,
 '航空': 2,
 '言語': 2,
 '貿易': 2,
 '農業': 2,
 '通信': 1,
 '通貨': 2,
 '道路': 2,
 '鉄道': 2,
 '鉱業': 2,
 '関連項目': 1,
 '音楽': 2,
 '食文化': 2}

keyでソートされてるっぽい。
出現順通りに出力できないものか。。。

24. ファイル参照の抽出

記事から参照されているメディアファイルをすべて抜き出せ.

import json_title
a = re.compile('(?:File|ファイル):(.*?)\|')
re.findall(a, column_UK)
Out[28]: 
['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',
 'David Cameron and Barack Obama at the G20 Summit in Toronto.jpg',
 'Soldiers Trooping the Colour, 16th June 2007.jpg',
 'Scotland Parliament Holyrood.jpg',
 'London.bankofengland.arp.jpg',
 'City of London skyline from London City Hall - Oct 2008.jpg',
 'Oil platform in the North SeaPros.jpg',
 'Eurostar at St Pancras Jan 2008.jpg',
 'Heathrow T5.jpg',
 'Anglospeak.svg',
 'CHANDOS3.jpg',
 'The Fabs.JPG',
 'PalaceOfWestminsterAtNight.jpg',
 'Westminster Abbey - West Door.jpg',
 'Edinburgh Cockburn St dsc06789.jpg',
 'Canterbury Cathedral - Portal Nave Cross-spire.jpeg',
 'Kew Gardens Palm House, London - July 2009.jpg',
 '2005-06-27 - United Kingdom - England - London - Greenwich.jpg',
 'Stonehenge2007 07 30.jpg',
 'Yard2.jpg',
 'Durham Kathedrale Nahaufnahme.jpg',
 'Roman Baths in Bath Spa, England - July 2006.jpg',
 'Fountains Abbey view02 2005-08-27.jpg',
 'Blenheim Palace IMG 3673.JPG',
 'Liverpool Pier Head by night.jpg',
 "Hadrian's Wall view near Greenhead.jpg",
 'London Tower (1).JPG',
 'Wembley Stadium, illuminated.jpg']

25. テンプレートの抽出

記事中に含まれる「基礎情報」テンプレートのフィールド名と値を抽出し,辞書オブジェクトとして格納せよ.

extract_Template.py
# -*- coding: utf-8 -*-

import json_title
import re

def template(filename, word):
    column_UK = json_title.json_title(filename, word)

    pattern1 = re.compile(r'''
                          ^\{\{基礎情報.*?$   # 「基礎情報」で始まる行
                          (.*?)              # 抽出対象(非貪欲)
                          ^\}\}$             # }}のみの行
                          ''', re.MULTILINE + re.VERBOSE + re.DOTALL)

    contents = re.findall(pattern1, column_UK)

    pattern2 = re.compile(r'''
                          ^\|  # '|'で始まる行
                          (.*?) # 抽出対象(key)
                          \s.*? # 0字以上の空白
                          =
                          \s.*? # 0字以上の空白
                          (.*?) # 抽出対象(値)
                          $     # 行末まで抽出
                          ''', re.MULTILINE + re.VERBOSE)

    template = re.findall(pattern2, contents[0])

    dict_template = {line[0] : line[1] for line in template}

    return dict_template

結果

import extract_Template
extract_Template.template('jawiki-country.json.gz', u'イギリス')
Out[120]: 
{'GDP/人': '36,727<ref name="imf-statistics-gdp" />',
 'GDP値': '2兆3162億<ref name="imf-statistics-gdp" />',
 'GDP値MER': '2兆4337億<ref name="imf-statistics-gdp" />',
 'GDP値元': '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>',
 'GDP統計年': '2012',
 'GDP統計年MER': '2012',
 'GDP統計年元': '2012',
 'GDP順位': '6',
 'GDP順位MER': '5',
 'ISO': 'GB / GBR',
 'ccTLD': '[[.uk]] / [[.gb]]<ref>使用は.ukに比べ圧倒的少数。</ref>',
 '人口値': '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>',
 '人口大きさ': '1 E7',
 '人口密度値': '246',
 '人口統計年': '2011',
 '人口順位': '22',
 '位置画像': 'Location_UK_EU_Europe_001.svg',
 '元首等氏名': '[[エリザベス2世]]',
 '元首等肩書': '[[イギリスの君主|女王]]',
 '公式国名': '{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>英語以外での正式国名:<br/>',
 '公用語': '[[英語]](事実上)',
 '国旗画像': 'Flag of the United Kingdom.svg',
 '国歌': '[[女王陛下万歳|神よ女王陛下を守り給え]]',
 '国章リンク': '([[イギリスの国章|国章]])',
 '国章画像': '[[ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章]]',
 '国際電話番号': '44',
 '夏時間': '+1',
 '建国形態': '建国',
 '日本語国名': 'グレートブリテン及び北アイルランド連合王国',
 '時間帯': '±0',
 '最大都市': 'ロンドン',
 '標語': '{{lang|fr|Dieu et mon droit}}<br/>([[フランス語]]:神と私の権利)',
 '水面積率': '1.3%',
 '注記': '<references />',
 '略名': 'イギリス',
 '確立年月日1': '[[927年]]/[[843年]]',
 '確立年月日2': '[[1707年]]',
 '確立年月日3': '[[1801年]]',
 '確立年月日4': '[[1927年]]',
 '確立形態1': '[[イングランド王国]]/[[スコットランド王国]]<br />(両国とも[[連合法 (1707年)|1707年連合法]]まで)',
 '確立形態2': '[[グレートブリテン王国]]建国<br />([[連合法 (1707年)|1707年連合法]])',
 '確立形態3': '[[グレートブリテン及びアイルランド連合王国]]建国<br />([[連合法 (1800年)|1800年連合法]])',
 '確立形態4': "現在の国号「'''グレートブリテン及び北アイルランド連合王国'''」に変更",
 '通貨': '[[スターリング・ポンド|UKポンド]] (&pound;)',
 '通貨コード': 'GBP',
 '面積値': '244,820',
 '面積大きさ': '1 E11',
 '面積順位': '76',
 '首相等氏名': '[[デーヴィッド・キャメロン]]',
 '首相等肩書': '[[イギリスの首相|首相]]',
 '首都': '[[ロンドン]]'}

23.同様の課題が。。。

26. 強調マークアップの除去

25の処理時に,テンプレートの値からMediaWikiの強調マークアップ(弱い強調,強調,強い強調のすべて)を除去してテキストに変換せよ.

extraxt_Template2.py
# -*- coding: utf-8 -*-

import extract_Template
import re

def modify(filename, word):
    dict_template = extract_Template.template(filename, word)

    dict_modify = {re.sub("'", "", k) : re.sub("'", "", v) for k, v in dict_template.items()}

    return dict_modify

結果

import extraxt_Template2
extraxt_Template2.modify('jawiki-country.json.gz', u'イギリス')
Out[142]: 
{'GDP/人': '36,727<ref name="imf-statistics-gdp" />',
 'GDP値': '2兆3162億<ref name="imf-statistics-gdp" />',
 'GDP値MER': '2兆4337億<ref name="imf-statistics-gdp" />',
 'GDP値元': '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>',
 'GDP統計年': '2012',
 'GDP統計年MER': '2012',
 'GDP統計年元': '2012',
 'GDP順位': '6',
 'GDP順位MER': '5',
 'ISO': 'GB / GBR',
 'ccTLD': '[[.uk]] / [[.gb]]<ref>使用は.ukに比べ圧倒的少数。</ref>',
 '人口値': '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>',
 '人口大きさ': '1 E7',
 '人口密度値': '246',
 '人口統計年': '2011',
 '人口順位': '22',
 '位置画像': 'Location_UK_EU_Europe_001.svg',
 '元首等氏名': '[[エリザベス2世]]',
 '元首等肩書': '[[イギリスの君主|女王]]',
 '公式国名': '{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>英語以外での正式国名:<br/>',
 '公用語': '[[英語]](事実上)',
 '国旗画像': 'Flag of the United Kingdom.svg',
 '国歌': '[[女王陛下万歳|神よ女王陛下を守り給え]]',
 '国章リンク': '([[イギリスの国章|国章]])',
 '国章画像': '[[ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章]]',
 '国際電話番号': '44',
 '夏時間': '+1',
 '建国形態': '建国',
 '日本語国名': 'グレートブリテン及び北アイルランド連合王国',
 '時間帯': '±0',
 '最大都市': 'ロンドン',
 '標語': '{{lang|fr|Dieu et mon droit}}<br/>([[フランス語]]:神と私の権利)',
 '水面積率': '1.3%',
 '注記': '<references />',
 '略名': 'イギリス',
 '確立年月日1': '[[927年]]/[[843年]]',
 '確立年月日2': '[[1707年]]',
 '確立年月日3': '[[1801年]]',
 '確立年月日4': '[[1927年]]',
 '確立形態1': '[[イングランド王国]]/[[スコットランド王国]]<br />(両国とも[[連合法 (1707年)|1707年連合法]]まで)',
 '確立形態2': '[[グレートブリテン王国]]建国<br />([[連合法 (1707年)|1707年連合法]])',
 '確立形態3': '[[グレートブリテン及びアイルランド連合王国]]建国<br />([[連合法 (1800年)|1800年連合法]])',
 '確立形態4': '現在の国号「グレートブリテン及び北アイルランド連合王国」に変更',
 '通貨': '[[スターリング・ポンド|UKポンド]] (&pound;)',
 '通貨コード': 'GBP',
 '面積値': '244,820',
 '面積大きさ': '1 E11',
 '面積順位': '76',
 '首相等氏名': '[[デーヴィッド・キャメロン]]',
 '首相等肩書': '[[イギリスの首相|首相]]',
 '首都': '[[ロンドン]]'}

27. 内部リンクの除去

26の処理に加えて,テンプレートの値からMediaWikiの内部リンクマークアップを除去し,テキストに変換せよ.

extract_Template3.py
# -*- coding: utf-8 -*-

import extract_Template
import re

def remove(str):
    str = re.sub("'", "", str)

    # ※内部リンクについて
        # [[記事名]] ⑴
        # [[記事名 | 表示文字]] ⑵
        # [[記事名  # 節名|表示文字]] ⑶
    # ※表示文字がない場合は記事名、ある場合は表示文字のみ抽出
    str = re.sub(r"""
                 \[{2}      # [[で始まる文字列
                 (          # 表示文字がある場合の、記事名除外処理
                   [^|\]]+?   # '|'以外 or ']'(内部リンク文字列の最後まで到達しないための処理)以外の1字以上
                   \|         # '|'
                 )          # 記事名除外処理 終了
                 *          # 除外処理用文字列0回以上(0回以上にするのは⑴を抽出するため)
                 (.*?)      # 任意の0字以上(表示文字を抽出)
                 \]{2}      # ]]で終わる文字列
                 """, r'\2', str, flags=re.MULTILINE + re.VERBOSE + re.DOTALL)
    return str

def modify(filename, word):
    dict_template = extract_Template.template(filename, word)

    dict_modify = {remove(k) : remove(v) for k, v in dict_template.items()}

    return dict_modify

結果

import extract_Template3
extract_Template3.modify('jawiki-country.json.gz', u'イギリス')
Out[3]: 
{'GDP/人': '36,727<ref name="imf-statistics-gdp" />',
 'GDP値': '2兆3162億<ref name="imf-statistics-gdp" />',
 'GDP値MER': '2兆4337億<ref name="imf-statistics-gdp" />',
 'GDP値元': '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>',
 'GDP統計年': '2012',
 'GDP統計年MER': '2012',
 'GDP統計年元': '2012',
 'GDP順位': '6',
 'GDP順位MER': '5',
 'ISO': 'GB / GBR',
 'ccTLD': '.uk / .gb<ref>使用は.ukに比べ圧倒的少数。</ref>',
 '人口値': '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>',
 '人口大きさ': '1 E7',
 '人口密度値': '246',
 '人口統計年': '2011',
 '人口順位': '22',
 '位置画像': 'Location_UK_EU_Europe_001.svg',
 '元首等氏名': 'エリザベス2世',
 '元首等肩書': '女王',
 '公式国名': '{{lang|en|United Kingdom of Great Britain and Northern Ireland}}<ref>英語以外での正式国名:<br/>',
 '公用語': '英語(事実上)',
 '国旗画像': 'Flag of the United Kingdom.svg',
 '国歌': '神よ女王陛下を守り給え',
 '国章リンク': '(国章)',
 '国章画像': 'イギリスの国章',
 '国際電話番号': '44',
 '夏時間': '+1',
 '建国形態': '建国',
 '日本語国名': 'グレートブリテン及び北アイルランド連合王国',
 '時間帯': '±0',
 '最大都市': 'ロンドン',
 '標語': '{{lang|fr|Dieu et mon droit}}<br/>(フランス語:神と私の権利)',
 '水面積率': '1.3%',
 '注記': '<references />',
 '略名': 'イギリス',
 '確立年月日1': '927年/843年',
 '確立年月日2': '1707年',
 '確立年月日3': '1801年',
 '確立年月日4': '1927年',
 '確立形態1': 'イングランド王国/スコットランド王国<br />(両国とも1707年連合法まで)',
 '確立形態2': 'グレートブリテン王国建国<br />(1707年連合法)',
 '確立形態3': 'グレートブリテン及びアイルランド連合王国建国<br />(1800年連合法)',
 '確立形態4': '現在の国号「グレートブリテン及び北アイルランド連合王国」に変更',
 '通貨': 'UKポンド (&pound;)',
 '通貨コード': 'GBP',
 '面積値': '244,820',
 '面積大きさ': '1 E11',
 '面積順位': '76',
 '首相等氏名': 'デーヴィッド・キャメロン',
 '首相等肩書': '首相',
 '首都': 'ロンドン'}

28. MediaWikiマークアップの除去

27の処理に加えて,テンプレートの値からMediaWikiマークアップを可能な限り除去し,国の基本情報を整形せよ.

extract_Template4.py
# -*- coding: utf-8 -*-

import extract_Template
import re

def remove(str):
    str = re.sub("'", "", str)

    # ※内部リンクについて
        # [[記事名]] ⑴
        # [[記事名 | 表示文字]] ⑵
        # [[記事名  # 節名|表示文字]] ⑶
    # ※表示文字がない場合は記事名、ある場合は表示文字のみ抽出
    str = re.sub(r"""
                 \[{2}      # [[で始まる文字列
                 (          # 表示文字がある場合の、記事名除外処理
                   [^|\]]+? # '|'以外 or ']'(内部リンク文字列の最後待っで到達しないための処理)以外の1字以上
                   \|       # '|'
                 )          # 記事名除外処理 終了
                 *          # 除外処理用文字列0回以上(0回以上にするのは⑴を抽出するため)
                 (.*?)      # 任意の0字以上(表示文字を抽出)
                 \]{2}      # ]]で終わる文字列
                 """, r'\2', str, flags=re.MULTILINE + re.VERBOSE + re.DOTALL)

    # 言語タグの除去
        # {{lang | 言語タグ | 文字列}}
    str = re.sub(r"""
                 \{{2}      # {{で始まる文字列
                 (          # 表示文字がある場合の、記事名除外処理
                   [^|\}]+? # '|'以外 or '}'以外の1字以上
                   \|       # '|'
                 )          # 記事名除外処理 終了
                 *          # 除外処理用文字列0回以上(0回以上にするのは⑴を抽出するため)
                 (.*?)      # 任意の0字以上(表示文字を抽出)
                 \}{2}      # }}で終わる文字列
                 """, r'\2', str, flags=re.MULTILINE + re.VERBOSE + re.DOTALL)

    # コメント除外処理
    str = re.sub(r'<.*?>', r'', str)

    # 外部リンク除外処理
    str = re.sub(r'\[.*?\]', r'', str)

    return str

def modify(filename, word):
    dict_template = extract_Template.template(filename, word)

    dict_modify = {remove(k) : remove(v) for k, v in dict_template.items()}

    return dict_modify

結果

import extract_Template4
extract_Template4.modify('jawiki-country.json.gz', u'イギリス')
Out[3]: 
{'GDP/人': '36,727',
 'GDP値': '2兆3162億',
 'GDP値MER': '2兆4337億',
 'GDP値元': '1兆5478億',
 'GDP統計年': '2012',
 'GDP統計年MER': '2012',
 'GDP統計年元': '2012',
 'GDP順位': '6',
 'GDP順位MER': '5',
 'ISO': 'GB / GBR',
 'ccTLD': '.uk / .gb使用は.ukに比べ圧倒的少数。',
 '人口値': '63,181,775',
 '人口大きさ': '1 E7',
 '人口密度値': '246',
 '人口統計年': '2011',
 '人口順位': '22',
 '位置画像': 'Location_UK_EU_Europe_001.svg',
 '元首等氏名': 'エリザベス2世',
 '元首等肩書': '女王',
 '公式国名': 'United Kingdom of Great Britain and Northern Ireland英語以外での正式国名:',
 '公用語': '英語(事実上)',
 '国旗画像': 'Flag of the United Kingdom.svg',
 '国歌': '神よ女王陛下を守り給え',
 '国章リンク': '(国章)',
 '国章画像': 'イギリスの国章',
 '国際電話番号': '44',
 '夏時間': '+1',
 '建国形態': '建国',
 '日本語国名': 'グレートブリテン及び北アイルランド連合王国',
 '時間帯': '±0',
 '最大都市': 'ロンドン',
 '標語': 'Dieu et mon droit(フランス語:神と私の権利)',
 '水面積率': '1.3%',
 '注記': '',
 '略名': 'イギリス',
 '確立年月日1': '927年/843年',
 '確立年月日2': '1707年',
 '確立年月日3': '1801年',
 '確立年月日4': '1927年',
 '確立形態1': 'イングランド王国/スコットランド王国(両国とも1707年連合法まで)',
 '確立形態2': 'グレートブリテン王国建国(1707年連合法)',
 '確立形態3': 'グレートブリテン及びアイルランド連合王国建国(1800年連合法)',
 '確立形態4': '現在の国号「グレートブリテン及び北アイルランド連合王国」に変更',
 '通貨': 'UKポンド (&pound;)',
 '通貨コード': 'GBP',
 '面積値': '244,820',
 '面積大きさ': '1 E11',
 '面積順位': '76',
 '首相等氏名': 'デーヴィッド・キャメロン',
 '首相等肩書': '首相',
 '首都': 'ロンドン'}

29. 国旗画像のURLを取得する

テンプレートの内容を利用し,国旗画像のURLを取得せよ.

extract_Flag.py
# -*- coding: utf-8 -*-

import extract_Template4
import requests
import json

def extract(filename, word):
    dict_Template = extract_Template4.modify(filename, word)

    name_flag = dict_Template['国旗画像']

    url_requests = 'https://en.wikipedia.org/w/api.php?' \
                    + 'action=query' \
                    + '&format=json' \
                    + '&prop=imageinfo' \
                    + '&titles=File:' + name_flag \
                    + '&iiprop=url'

    html = requests.get(url_requests)

    j_encode = json.loads(html.text)

    url_flag = j_encode['query']['pages'].popitem()[1]['imageinfo'][0]['url']

    return url_flag

結果

import extract_Flag
extract_Flag.extract('jawiki-country.json.gz', u'イギリス')
Out[3]: 
'https://upload.wikimedia.org/wikipedia/en/a/ae/Flag_of_the_United_Kingdom.svg'

感想

上司に「3月までには100本ノック終わらす」とか適当に言ってたけど、無理そうだな。。。

0
1
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
0
1