👩💻
言語処理100本ノック 2020 (Rev 2) 第3章: 正規表現 28. MediaWikiマークアップの除去
問題
28. MediaWikiマークアップの除去
27の処理に加えて,テンプレートの値からMediaWikiマークアップを可能な限り除去し,国の基本情報を整形せよ.
solution28.py
import pandas as pd
import re
df_j = pd.read_json('chapter03/jawiki-country.json.gz', lines=True, compression='infer')
text_uk = df_j.query('title=="イギリス"')['text'].values[0]
template_text = re.findall(r'\{\{基礎情報 (.+?^}\})', text_uk, re.MULTILINE+re.DOTALL)[0]
template_text = re.sub("'{2,5}","", template_text)
template_text = re.sub("\[\[(?:.[^|]+?\|)??(([^|]+?)|(\{\{.+?\}\}))\]\]", r"\1", template_text)
template_text = re.sub("\[\[ファイル:(.+?)(?:\|.+)*\]\]", r"\1", template_text)
template_text = re.sub("\{\{lang\|.+?\|(.+?)\}\}", r"\1", template_text)
template_text = re.sub("\{\{仮リンク\|(.+?)\|.+?\}\}", r"\1", template_text)
template_text = re.sub("\{\{.+?}\}","", template_text)
template_text = re.sub("<.+?>","", template_text)
template_text = re.sub("\[.+?]","", template_text)
template = dict(re.findall("\|(.+?) *= *(.+?)\n(?=\||})", template_text, re.MULTILINE+re.DOTALL))
for t in template:
print(t, template[t])
output
略名 イギリス
日本語国名 グレートブリテン及び北アイルランド連合王国
公式国名 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(ウェールズ語)
#以下に続きます
この問題では、正規表現を用いてテンプレートの値からMediaWikiマークアップを可能な限り除去しテキストに変換します。
参考記事
第3章: 正規表現
re --- 正規表現操作
Python正規表現
regex101
Pythonで文字列を置換(replace, translate, re.sub, re.subn)
Discussion