素人の言語処理100本ノック:20


[言語処理100本ノック 2015](http://www.cl.ecei.tohoku.ac.jp/nlp100/)の挑戦記録です。環境はUbuntu 16.04 LTS ＋ Python 3.5.2 \:\: Anaconda 4.1.1 (64-bit)です。過去のノックの一覧は[こちら](http://qiita.com/segavvy/items/fb50ba8097d59475f760)からどうぞ。

## 第3章: 正規表現
>Wikipediaの記事を以下のフォーマットで書き出したファイルjawiki-country.json.gzがある．
>・1行に1記事の情報がJSON形式で格納される
>・各行には記事名が"title"キーに，記事本文が"text"キーの辞書オブジェクトに格納され，そのオブジェクトがJSON形式で書き出される
>・ファイル全体はgzipで圧縮される
>以下の処理を行うプログラムを作成せよ．

###20. JSONデータの読み込み
>Wikipedia記事のJSONファイルを読み込み，「イギリス」に関する記事本文を表示せよ．問題21-29では，ここで抽出した記事本文に対して実行せよ．

####出来上がったコード：

```python:main.py
# coding: utf-8
import gzip
import json
fname = 'jawiki-country.json.gz'

with gzip.open(fname, 'rt') as data_file:
	for line in data_file:
		data_json = json.loads(line)
		if data_json['title'] == 'イギリス':
			print(data_json['text'])
			break
```

####実行結果：

長いので、先頭と末尾の20行のみ抜粋です。

```console:端末：先頭20行
{{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
|国章画像 = [[ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章]]
|国章リンク = （[[イギリスの国章|国章]]）
|標語 = {{lang|fr|Dieu et mon droit}}<br/>（[[フランス語]]:神と私の権利）
|国歌 = [[女王陛下万歳|神よ女王陛下を守り給え]]
|位置画像 = Location_UK_EU_Europe_001.svg
|公用語 = [[英語]]（事実上）
|首都 = [[ロンドン]]
|最大都市 = ロンドン
```

（中略）

```console:端末：末尾20行
;その他
*[http://www.jetro.go.jp/world/europe/uk/ JETRO - 英国]

{{イギリス関連の項目}}
{{ヨーロッパ}}
{{EU}}
{{国連安全保障理事会理事国}}
{{G8}}
{{OECD}}
{{イギリス連邦}}

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

結果全体を確認したい方は、[GitHub](https://github.com/segavvy/nlp100_Python/tree/master/20)にアップしていますのでどうぞ。


###gzipの操作
gzipの操作は`gzip`モジュールを使えば簡単です。今回は[`gzip.open()`](http://docs.python.jp/3/library/gzip.html#gzip.open)で読み込みました。
gzipモジュールの解説は[gzip - gzip ファイルのサポート](http://docs.python.jp/3/library/gzip.html#module-gzip)にあります。

###JSONの操作
JSONの操作も`json`モジュールを使えば簡単です。今回使った[`json.loads()`](http://docs.python.jp/3/library/json.html#json.loads)は、JSON形式の文字列を渡すと[変換表](http://docs.python.jp/3/library/json.html#json-to-py-table)に従ってPythonのオブジェクトに変換してくれます。普通の辞書やリストに変換されるので操作も簡単です。
`json`モジュールの解説は[json - JSON エンコーダおよびデコーダ](http://docs.python.jp/3/library/json.html#module-json)にあります。

　
21本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。
<hr>

*実行結果には、[100本ノックで用いるコーパス・データ](http://www.cl.ecei.tohoku.ac.jp/nlp100/#data)で配布されているデータの一部が含まれます。この第3章で用いているデータのライセンスは[クリエイティブ・コモンズ 表示-継承 3.0 非移植](https://creativecommons.org/licenses/by-sa/3.0/legalcode)（[日本語訳](https://creativecommons.org/licenses/by-sa/3.0/deed.ja)）です。*