Julia で言語処理100本ノック打ってみた　第3章

前回、[Juliaで自然言語処理100本ノック](https://qiita.com/Rshimura/items/4389d164840589a14ec6)を1章だけやりました。今回はその続きです。

※ 前回記事の最後に「Uniprotデータベースのちょっとした調査を……」と書いていますが、あれは嘘になりました。いつかは載せます。


続き（第4章）は[こちら](https://qiita.com/Rshimura/items/eedaee77566b9ffb5b12)から。


# 言語処理100本ノック　第３章

Wikipediaの記事を以下のフォーマットで書き出したファイル`jawiki-country.json.gz`がある．

1行に1記事の情報がJSON形式で格納される
各行には記事名が`"title"`キーに，記事本文が`"text"`キーの辞書オブジェクトに格納され，そのオブジェクトがJSON形式で書き出される
ファイル全体はgzipで圧縮される
以下の処理を行うプログラムを作成せよ．

## 準備

```julia
using JSON
wikidata = open("./100nock/jawiki-country.json", "r")
```


## 本番
21-25 は、最初にやった方法が愚かっぽい感じでして……
あとでもっと良い方法を思いついたので、そっちは[別解集](https://qiita.com/Rshimura/items/e8727e4e4737163e63ce#%E5%88%A5%E3%81%AE%E6%96%B9%E6%B3%95%E3%83%99%E3%82%BF%E3%81%AA%E6%96%B9%E6%B3%95)みたいな形で後ろに載せました。


### 20. JSONデータの読み込み

```julia
#########################################################################
#    20. JSONデータの読み込み
#    Wikipedia記事のJSONファイルを読み込み，「イギリス」に関する記事本文を表示せよ．
#    問題21-29では，ここで抽出した記事本文に対して実行せよ．
#########################################################################
seek(wikidata, 0)
eng_text = ""
for l in eachline(wikidata)
    entry = JSON.parse(l)
    ent_title = entry["title"]
    ent_text = entry["text"]
    if (ent_title == "イギリス")
        print(ent_text)
        eng_text *= ent_text
    end
end
```

    {{redirect|UK}}
    {{基礎情報 国
    |略名 = イギリス
    |日本語国名 = グレートブリテン及び北アイルランド連合王国
    |公式国名 = {{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
  
    ......

    
    {{デフォルトソート:いきりす}}
    [[Category:イギリス|*]]
    [[Category:英連邦王国|*]]
    [[Category:G8加盟国]]
    [[Category:欧州連合加盟国]]
    [[Category:海洋国家]]
    [[Category:君主国]]
    [[Category:島国|くれいとふりてん]]
    [[Category:1801年に設立された州・地域]]


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

```julia
####################################################
# 21. カテゴリ名を含む行を抽出
# 記事中でカテゴリ名を宣言している行を抽出せよ
####################################################
eng_list = split(eng_text, "\n")
cate_line = []
for l in eng_list
    if occursin(r"\[\[Category:", l)
        println(l)
        push!(cate_line, l)
    end
end

```

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

### 22. カテゴリ名の抽出

```julia
##################################################
# 22. カテゴリ名の抽出
# 記事のカテゴリ名を（行単位ではなく名前で）抽出せよ．
##################################################
cate_name = []
for c in cate_line
    m = match(r"\[\[Category:([^\W]+).*\]\]", c)
    push!(cate_name, pop!(m.captures))
end    
println(cate_name)
```

    Any["イギリス", "英連邦王国", "G8加盟国", "欧州連合加盟国", "海洋国家", "君主国", "島国", "1801年に設立された州"]


### 23. セクション構造

```julia
###############################################################################
# 23. セクション構造
# 記事中に含まれるセクション名とそのレベル（例えば"== セクション名 =="なら1）を表示せよ
###############################################################################
sections = []

for l in eng_list
    m = match(r"(==+) *([^=]+)", l)
    if m !== nothing
        name = m.captures[2]
        mm = eachmatch(r"=", m.match)
        level = length(collect(mm))
        push!(sections, [name, level])
    end
end

# print
for s in sections
    println("$(s[1])  : $(s[2])")
end
```

    国名  : 2
    歴史  : 2
    地理  : 2
    気候  : 3
    政治  : 2
    言語  : 3
    ......
    競馬  : 3
    モータースポーツ  : 3
    脚注  : 2
    関連項目  : 2
    外部リンク  : 2


### 24. ファイル参照の抽出

```julia
####################################################
# 24. ファイル参照の抽出
# 記事から参照されているメディアファイルをすべて抜き出せ．
####################################################
cnt = 0
for l in eng_list
    m = match(r"(ファイル|File):.*?([^\s]+\.\w+)[^\w/\.]", l)
    if m !== nothing
        println(m.captures[2])
        cnt += 1
    end
end
println(cnt)
```

    Kingdom.svg
    1815.PNG
    Empire.png
    en.jpg
    BenNevis2005.jpg
    edit.jpg
    2007.jpg
    Toronto.jpg
    2007.jpg
    Holyrood.jpg
    London.bankofengland.arp.jpg
    2008.jpg
    SeaPros.jpg
    2008.jpg
    T5.jpg
    Anglospeak.svg
    CHANDOS3.jpg
    Fabs.JPG
    PalaceOfWestminsterAtNight.jpg
    Door.jpg
    dsc06789.jpg
    Cross-spire.jpeg
    2009.jpg
    Greenwich.jpg
    30.jpg
    Yard2.jpg
    Nahaufnahme.jpg
    2006.jpg
    2005-08-27.jpg
    3673.JPG
    night.jpg
    Greenhead.jpg
    (1).JPG
    illuminated.jpg
    34

### 25. テンプレートの抽出

```julia
######################################################################################
# 25. テンプレートの抽出
# 記事中に含まれる「基礎情報」テンプレートのフィールド名と値を抽出し，辞書オブジェクトとして格納せよ．
######################################################################################
# ここにきて、改行区切りアダとなる……後ろに別解（というかもっといい解答と思われるもの）を掲載しているが、
# ここでは、意地でもこの方針でいってみる。
# make new list
basic_info = Dict()
pipe_delim_txt = split(eng_text, r"(\n\||\n\}\})")
for l in pipe_delim_txt
    if occursin(r".+ = .+", l)
        field, val = split(l, " = ")
        basic_info[field] = val
    end
end
print(basic_info)
```

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


### 26. 強調マークアップの除去
```julia
#####################################################################################
# 26. 強調マークアップの除去
# 25の処理時に，テンプレートの値からMediaWikiの強調マークアップ（弱い強調，強調，強い強調のすべて）
# を除去してテキストに変換せよ（参考: マークアップ早見表）．https://ja.wikipedia.org/wiki/Help:%E6%97%A9%E8%A6%8B%E8%A1%A8
#####################################################################################
f(s) = replace(s, r"'+(.+?)'+" => s"\1")
basic_info_mod1 = Dict(k => f(basic_info[k]) for k in keys(basic_info))
print(basic_info_mod1)
```

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


### 27. 内部リンクの除去
```julia
##########################################################################
# 27. 内部リンクの除去
# 26の処理に加えて，テンプレートの値からMediaWikiの内部リンクマークアップを除去し，
# テキストに変換せよ（参考: マークアップ早見表）．
##########################################################################
g(s) = replace( s, r"(?:\[\[(?:[^\[\]]+\|)?|\]\])" => s"")
basic_info_mod2 = Dict(k => g(basic_info_mod1[k]) for k in keys(basic_info_mod1))
print(basic_info_mod2)
```

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


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

```julia
#=========================================================================================
28. MediaWikiマークアップの除去
27の処理に加えて，テンプレートの値からMediaWikiマークアップを可能な限り除去し，国の基本情報を整形せよ．
=========================================================================================#
# remove <ref>...</ref> 
h(s) = replace(s, r"<ref.*?>.+?</ref>"ms => s"")
# remove <.+ />
i(s) = replace(s, r"<.*?/>" => s"")
# remove []
j(s) = replace(s, r"\[.+? (.+?)\]" => s"\1")
# remove {{}}
k(s) = replace(s, r"\*?\{\{.+?([^\|]+?)\}\}" => s"\1")
# print
field_list = map(m->m.captures[1], eachmatch(r"^\|(.+?) = (.+?)(?=\n\||\n)"ms, txt))
for f in field_list
    println("$f : " * basic_info_mod2[f]|>h|>i|>j|>k)
end

```

    略名 : イギリス
    日本語国名 : グレートブリテン及び北アイルランド連合王国
    公式国名 : United Kingdom of Great Britain and Northern Ireland
    国旗画像 : Flag of the United Kingdom.svg
    国章画像 : イギリスの国章
    国章リンク : （国章）
    標語 : 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
    GDP統計年元 : 2012
    GDP値元 : 1兆5478億
    GDP統計年MER : 2012
    GDP順位MER : 5
    GDP値MER : 2兆4337億
    GDP統計年 : 2012
    GDP順位 : 6
    GDP値 : 2兆3162億
    GDP/人 : 36,727
    建国形態 : 建国
    確立形態1 : イングランド王国／スコットランド王国（両国とも1707年連合法まで）
    確立年月日1 : 927年／843年
    確立形態2 : グレートブリテン王国建国（1707年連合法）
    確立年月日2 : 1707年
    確立形態3 : グレートブリテン及びアイルランド連合王国建国（1800年連合法）
    確立年月日3 : 1801年
    確立形態4 : 現在の国号「グレートブリテン及び北アイルランド連合王国」に変更
    確立年月日4 : 1927年
    通貨 : UKポンド (&pound;)
    通貨コード : GBP
    時間帯 : ±0
    夏時間 : +1
    ISO 3166-1 : GB / GBR
    ccTLD : .uk / .gb
    国際電話番号 : 44
    注記 : 


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

```julia
#================================================================
29. 国旗画像のURLを取得する
テンプレートの内容を利用し，国旗画像のURLを取得せよ．（
ヒント: MediaWiki APIのimageinfoを呼び出して，ファイル参照をURLに変換すればよい）
=================================================================#
g2(s) = replace(match(r"\[\[([^\|]+?)\|", s).captures[1], r" " => s"_")

x = readlines(`curl -s "https://ja.wikipedia.org/w/api.php?format=json&action=query&prop=imageinfo&iiprop=url&titles=$(g2(basic_info_mod1["国章画像"]))"`)
res = JSON.parse(x[1])
print(res["query"]["pages"]["-1"]["imageinfo"][1]["url"])
```

    https://upload.wikimedia.org/wikipedia/commons/9/98/Royal_Coat_of_Arms_of_the_United_Kingdom.svg


## 別の方法（ベタな方法）

改行区切りで配列に変換する愚かそうな方法を使わない方法。多分こっちが想定されてる方法。肝は、`r"..."ms`などの修飾子の設定。[参考](https://perldoc.jp/docs/perl/5.14.1/perlre.pod)

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

```julia
# 21. カテゴリ名を含む行を抽出
match_arr = eachmatch(r"(\[\[Category:.*\]\]\n?)", txt)
map(m->m.captures[1], match_arr)
```



### 22. カテゴリ名の抽出

```julia
# 22. カテゴリ名の抽出
match_arr = eachmatch(r"\[\[Category:([^\W]+).*\]\]\n?", txt)
map(m->m.captures[1], match_arr)
# [m.captures[1] for m in match_arr] 
```



### 23. セクション構造

```julia
# 23. セクション構造
match_arr = eachmatch(r"(==+)\s?([^=]+)\s?==+", txt)
f(m) = "$(length(m.captures[1])) : $(m.captures[2])"
print(map(f, match_arr))
```



### 24. ファイル参照の抽出

```julia
# 24. ファイル参照の抽出
match_arr = eachmatch(r"(ファイル|File):.*?([^\s]+\.\w+)[^\w/\.]", txt)
print(map(m->m.captures[2], match_arr))
```

### 25. テンプレートの抽出

```julia
# 25. テンプレートの抽出
# ’|’で始まる行は基本情報テンプレートでしかないらしい
# より厳密には、基本情報{{...}} だけ抽出してその中に対してパターンマッチングするべき。
match_arr = eachmatch(r"^\|(.+?) = (.+?)(?=\n\||\n)"ms, txt)
bi_dict = Dict()
f(m) = bi_dict[m.captures[1]] = m.captures[2]
map(f, match_arr)
print(bi_dict)
```