前回、Juliaで自然言語処理100本ノックを1章だけやりました。今回はその続きです。
※ 前回記事の最後に「Uniprotデータベースのちょっとした調査を……」と書いていますが、あれは嘘になりました。いつかは載せます。
続き(第4章)はこちらから。
言語処理100本ノック 第3章
Wikipediaの記事を以下のフォーマットで書き出したファイルjawiki-country.json.gz
がある.
1行に1記事の情報がJSON形式で格納される
各行には記事名が"title"
キーに,記事本文が"text"
キーの辞書オブジェクトに格納され,そのオブジェクトがJSON形式で書き出される
ファイル全体はgzipで圧縮される
以下の処理を行うプログラムを作成せよ.
準備
using JSON
wikidata = open("./100nock/jawiki-country.json", "r")
本番
21-25 は、最初にやった方法が愚かっぽい感じでして……
あとでもっと良い方法を思いついたので、そっちは別解集みたいな形で後ろに載せました。
20. JSONデータの読み込み
#########################################################################
# 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. カテゴリ名を含む行を抽出
####################################################
# 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. カテゴリ名の抽出
##################################################
# 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. セクション構造
###############################################################################
# 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. ファイル参照の抽出
####################################################
# 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. テンプレートの抽出
######################################################################################
# 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ポンド]] (£)","確立年月日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. 強調マークアップの除去
#####################################################################################
# 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ポンド]] (£)","確立年月日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. 内部リンクの除去
##########################################################################
# 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ポンド (£)","確立年月日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マークアップの除去
#=========================================================================================
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ポンド (£)
通貨コード : GBP
時間帯 : ±0
夏時間 : +1
ISO 3166-1 : GB / GBR
ccTLD : .uk / .gb
国際電話番号 : 44
注記 :
29. 国旗画像のURLを取得する
#================================================================
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
などの修飾子の設定。参考
21. カテゴリ名を含む行を抽出
# 21. カテゴリ名を含む行を抽出
match_arr = eachmatch(r"(\[\[Category:.*\]\]\n?)", txt)
map(m->m.captures[1], match_arr)
22. カテゴリ名の抽出
# 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. セクション構造
# 23. セクション構造
match_arr = eachmatch(r"(==+)\s?([^=]+)\s?==+", txt)
f(m) = "$(length(m.captures[1])) : $(m.captures[2])"
print(map(f, match_arr))
24. ファイル参照の抽出
# 24. ファイル参照の抽出
match_arr = eachmatch(r"(ファイル|File):.*?([^\s]+\.\w+)[^\w/\.]", txt)
print(map(m->m.captures[2], match_arr))
25. テンプレートの抽出
# 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)