言語処理100本ノック(その6)
3章に入りました。
Wikipediaの記事を以下のフォーマットで書き出したファイルjawiki-country.json.gzがある.
1行に1記事の情報がJSON形式で格納される
各行には記事名が"title"キーに,記事本文が"text"キーの辞書オブジェクトに格納され,そのオブジェクトがJSON形式で書き出される
ファイル全体はgzipで圧縮される
以下の処理を行うプログラムを作成せよ.
20. JSONデータの読み込み
Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ.
import json def load_file(): file_list = open('jawiki-country.json').readlines() for item in file_list: json_item = json.loads(item) if json_item['title'] == 'イギリス': return json_item['text'] if __name__ == '__main__': print(load_file())
- 1行ずつ読み込んでパース
- titleがイギリスだったら、本文を表示してループを抜ける
実行結果は長いので省略。
参考
21. カテゴリ名を含む行を抽出
記事中でカテゴリ名を宣言している行を抽出せよ
import re from q20 import load_file split_text = load_file().splitlines() pattern = r"\[\[Category" repattern = re.compile(pattern) for t in split_text: if repattern.match(t): print(t)
- 2行目で、20問目のload_fileメソッドを読み込んでいます
- 1行ずつループを回して[[Categoryを含む行なら出力
実行結果
$ python 21.py [[Category:イギリス|*]] [[Category:英連邦王国|*]] [[Category:G8加盟国]] [[Category:欧州連合加盟国]] [[Category:海洋国家]] [[Category:君主国]] [[Category:島国|くれいとふりてん]] [[Category:1801年に設立された州・地域]]