自然言語処理100本ノック2020から逃げるな「28. MediaWikiマークアップの除去」

これは自然言語処理100本ノック2020に挑んだ、とある人間の記録
他の問題はこちら → 自然言語処理100本ノック2020から逃げるな まとめ

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

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

Pythonコード

import NLP100_27
import re

def get_template_no_mediawiki_markup():
    dict = NLP100_27.get_template_no_emphasis_markup()
    dict = remove_file_markup(dict)
    dict = remove_template_lang(dict)
    dict = remove_ref(dict)
    dict = remove_external_link(dict)
    return dict

def remove_file_markup(dict):
    for k, v in dict.items():
        # ファイルの除去
        p = re.compile(r'''
            \[\[            # [[からスタート
            ファイル:       # ファイルの文字列
            ([^|]*?)       # (|を含まない文字列) の繰り返し (url)
            (\|[^|]*?)?     # |と(|を含まない文字列)| の繰り返し (thumb)
            (\|[^|]*?)?     # |を含まない文字列(非貪欲) (説明文)
            \]\]            # ]]で終わり
        ''', re.MULTILINE + re.VERBOSE)
        dict[k] = p.sub(r'\3', v)
    return dict

def remove_template_lang(dict):
    for k, v in dict.items():
        p = re.compile(r'''
            \{\{
            lang        # langで始まる
            \|.*?        # |文字列 (言語タグ)
            \|(.*?)      # |文字列
            \}\}
        ''', re.MULTILINE + re.VERBOSE)
        dict[k] = p.sub(r'\1', v)
    return dict

def remove_ref(dict):
    for k, v in dict.items():
        p = re.compile(r'''
            \<
            \/?         # /が0か1回
            [ref|br]    # refかbrが出現
            .*?         # 文字列
            \>          # >で終わる
        ''', re.MULTILINE + re.VERBOSE)
        dict[k] = p.sub('', v)
    return dict

def remove_external_link(dict):
    for k, v in dict.items():
        # 外部リンクの除去 []ありの場合
        p1 = re.compile(r'''
            (\[             # [からスタート(明示的な場合)
            http            # httpから始まる
            .*?             # 文字列
            (\s(.*?))?a     # 空白+文字列 (表示文字)
            \])             #]でおわり(明示的な場合)
        ''', re.MULTILINE + re.VERBOSE)
        dict[k] = p1.sub(r'\2', v)
        
        p2 = re.compile(r'''
            http.*?([\s\|])   # httpから始まって空白か|が来るまでの文字列  
        ''', re.MULTILINE + re.VERBOSE)
        dict[k] = p2.sub('', dict[k])
    return dict


if __name__ == "__main__":
    dict = get_template_no_mediawiki_markup()
    for k, v in dict.items():
        print('{key}: {value}'.format(key=k, value=v))

27. 内部リンクの除去で作成したget_template_no_emphasis_markup関数を利用しています。

実行結果

略名: イギリス
日本語国名: グレートブリテン及び北アイルランド連合王国
公式国名: 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
国章画像: |イギリスの国章
国章リンク: (国章)
標語: Dieu et mon droit(フランス語:神と我が権利)
国歌: [[女王陛下万歳|God Save the Queen]]{{en icon}}神よ女王を護り賜え{{center|}}
地図画像: Europe-UK.svg
位置画像: United Kingdom (+overseas territories) in the World (+Antarctica claims).svg
公用語: 英語
首都: ロンドン(事実上)
最大都市: ロンドン
元首等肩書: 女王
元首等氏名: エリザベス2世
首相等肩書: 首相
首相等氏名: ボリス・ジョンソン
他元首等肩書1: 貴族院議長
他元首等氏名1: ノーマン・ファウラー
他元首等肩書2: 庶民院議長
他元首等氏名2: {{仮リンク|リンゼイ・ホイル|en|Lindsay Hoyle}}
他元首等肩書3: 最高裁判所長官
他元首等氏名3: ブレンダ・ヘイル
面積順位: 76
面積大きさ: 1 E11
面積値: 244,820
水面積率: 1.3%
人口統計年: 2018
人口順位: 22
人口大きさ: 1 E7
人口値: 6643万5600{{Cite web|url=title=Population estimates - Office for National Statistics|accessdate=2019-06-26|date=2019-06-26}}
人口密度値: 271
GDP統計年元: 2012
GDP値元: 1兆5478億[and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom]
GDP統計年MER: 2012
GDP順位MER: 6
GDP値MER: 2兆4337億
GDP統計年: 2012
GDP順位: 6
GDP値: 2兆3162億
GDP/人: 36,727
建国形態: 建国
確立形態1: イングランド王国/スコットランド王国(両国とも1707年合同法まで)
確立年月日1: 927年/843年
確立形態2: グレートブリテン王国成立(1707年合同法)
確立年月日2: 1707年{{0}}5月{{0}}1日
確立形態3: グレートブリテン及びアイルランド連合王国成立(1800年合同法)
確立年月日3: 1801年{{0}}1月{{0}}1日
確立形態4: 現在の国号「グレートブリテン及び北アイルランド連合王国」に変更
確立年月日4: 1927年{{0}}4月12日
通貨: UKポンド (£)
通貨コード: GBP
時間帯: ±0
夏時間: +1
ISO 3166-1: GB / GBR
ccTLD: .uk / .gb使用は.ukに比べ圧倒的少数。
国際電話番号: 44
注記: 
27. 内部リンクの除去とのdiff
3,9c3,9
< 公式国名: {{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}}(スコットランド・ゲール語)
< *{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}(ウェールズ語)
< *{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}(アイルランド語)
< *{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}(コーンウォール語)
< *{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}(スコットランド語)
< **{{lang|sco|Claught Kängrick o Docht Brätain an Norlin Airlann}}、{{lang|sco|Unitet Kängdom o Great Brittain an Norlin Airlann}}(アルスター・スコットランド語)</ref>
---
> 公式国名: 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(アルスター・スコットランド語)
11c11
< 国章画像: [[ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章]]
---
> 国章画像: |イギリスの国章
13,14c13,14
< 標語: {{lang|fr|Dieu et mon droit}}<br />(フランス語:神と我が権利)
< 国歌: [[女王陛下万歳|{{lang|en|God Save the Queen}}]]{{en icon}}<br />神よ女王を護り賜え<br />{{center|[[ファイル:United States Navy Band - God Save the Queen.ogg]]}}
---
> 標語: Dieu et mon droit(フランス語:神と我が権利)
> 国歌: [[女王陛下万歳|God Save the Queen]]{{en icon}}神よ女王を護り賜え{{center|}}
37c37
< 人口値: 6643万5600<ref>{{Cite web|url=https://www.ons.gov.uk/peoplepopulationandcommunity/populationandmigration/populationestimates|title=Population estimates - Office for National Statistics|accessdate=2019-06-26|date=2019-06-26}}</ref>
---
> 人口値: 6643万5600{{Cite web|url=title=Population estimates - Office for National Statistics|accessdate=2019-06-26|date=2019-06-26}}
40c40
< 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値元: 1兆5478億[and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom]
43c43
< GDP値MER: 2兆4337億<ref name="imf-statistics-gdp" />
---
> GDP値MER: 2兆4337億
46,47c46,47
< GDP値: 2兆3162億<ref name="imf-statistics-gdp" />
< GDP/人: 36,727<ref name="imf-statistics-gdp" />
---
> GDP値: 2兆3162億
> GDP/人: 36,727
49c49
< 確立形態1: イングランド王国/スコットランド王国<br />(両国とも1707年合同法まで)
---
> 確立形態1: イングランド王国/スコットランド王国(両国とも1707年合同法まで)
51c51
< 確立形態2: グレートブリテン王国成立<br />(1707年合同法)
---
> 確立形態2: グレートブリテン王国成立(1707年合同法)
53c53
< 確立形態3: グレートブリテン及びアイルランド連合王国成立<br />(1800年合同法)
---
> 確立形態3: グレートブリテン及びアイルランド連合王国成立(1800年合同法)
62c62
< ccTLD: .uk / .gb<ref>使用は.ukに比べ圧倒的少数。</ref>
---
> ccTLD: .uk / .gb使用は.ukに比べ圧倒的少数。
64c64
< 注記: <references/>
---
> 注記: