2018年03月21日
言語処理100本ノックでPython入門 #28 - いろいろな正規表現
今日は、言語処理100本ノック 2015の問題28です。
■ 問題
問題20で作成したファイルを入力として、以下の問題を解きます。
28. MediaWikiマークアップの除去 27の処理に加えて,テンプレートの値からMediaWikiマークアップを可能な限り除去し,国の基本情報を整形せよ.
■ Pythonのコード
import re def readArticle(filename): with open(filename, 'r', encoding='utf8') as fin: return fin.read() def getBasicInfo(article): basicInfo = re.search(r'\{\{基礎情報(.+?)\}\}\n', article, re.DOTALL).group(1) pat = r'^\|(.+?)\s*=\s*(.+?)(?<!<br/>)\n' reg = re.compile(pat, re.MULTILINE | re.DOTALL) wdict = {} for k, v in reg.findall(basicInfo): v = re.sub(r"''('|''')([^']+?)''+", r"\2", v) v = re.sub(r"\[\[(?:[^\]]+\|)?([^:]+?)\]\]", r"\1", v) v = re.sub(r"\[http(?:[^\]]+? )?(.+?)\]", r"\1", v) v = re.sub(r"#REDIRECT \[\[([^\[]+?)\]\]", r"\1", v) v = re.sub(r"^===*\s*(.+)\s*=", r"\1", v) v = re.sub(r"^(?:\*|#|;)+\s*([^\n]+?)$", r"\1", v, flags=re.MULTILINE) v = re.sub(r"{{(?:[^\{]+\|)?([^\|]+?)}}", r"\1", v) v = re.sub(r"<[^>]+>", r" ", v) wdict[k] = v return wdict def main(): # england-article.txtは、問題20(nlp20.py)で作成したファイル article = readArticle('england-article.txt') dic = getBasicInfo(article) dic = sorted(dic.items(), key=lambda x: x[0]) for item, v in dic: print(item, ':', v) if __name__ == '__main__': main()
■ コードについて一言
「可能な限り除去し」ということで、わかる範囲で除去してみました。これまでの、正規表現の総復習みたいなコードですね。かなり力業的なコードです。 ひとつ一つの説明は省きますが、一つだけ、flags=re.MULTILINEを付けているものがあります。これは、記事の中にある箇条書きに対応するためです。
v = re.sub(r"^(?:\*|#|;)+\s*([^\n]+?)$", r"\1", v, flags=re.MULTILINE)compileしないで、 MULTILINEオプションを指定しています。
■ 結果
GDP/人 : 36,727 GDP値 : 2兆3162億 GDP値MER : 2兆4337億 GDP値元 : 1兆5478億 IMF>Data and Statistics>World Economic Outlook Databases>By Countrise>United Kingdom GDP統計年 : 2012 GDP統計年MER : 2012 GDP統計年元 : 2012 GDP順位 : 6 GDP順位MER : 5 ISO 3166-1 : GB / GBR ccTLD : .uk / .gb 使用は.ukに比べ圧倒的少数。 人口値 : 63,181,775 United Nations Department of Economic and Social Affairs>Population Division>Data>Population>Total Population 人口大きさ : 1 E7 人口密度値 : 246 人口統計年 : 2011 人口順位 : 22 位置画像 : Location_UK_EU_Europe_001.svg 元首等氏名 : エリザベス2世 元首等肩書 : 女王 公式国名 : United Kingdom of Great Britain and Northern Ireland 英語以外での正式国名: An Rioghachd Aonaichte na Breatainn Mhor agus Eirinn mu Thuath(スコットランド・ゲール語) Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon(ウェールズ語) Riocht Aontaithe na Breataine Moire agus Tuaisceart na hEireann(アイルランド語) An Rywvaneth Unys a Vreten Veur hag Iwerdhon Gledh(コーンウォール語) Unitit Kinrick o Great Breetain an Northren Ireland(スコットランド語) Claught Kangrick o Docht Bratain an Norlin Airlann、Unitet Kangdom o Great Brittain an Norlin Airlann(アルスター・スコットランド語) 公用語 : 英語(事実上) 国旗画像 : 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ポンド (£) 通貨コード : GBP 面積値 : 244,820 面積大きさ : 1 E11 面積順位 : 76 首相等氏名 : デーヴィッド・キャメロン 首相等肩書 : 首相 首都 : ロンドン
Posted by gushwell at 21:00│Comments(0)