毎日テキストマイニング

180日間、毎日テキストマイニングをするブログです

2018/09/16【85日目】pythonでのJsonコードの取り扱い

一昨日くらいからJSONにどっぷりはまっていますので、今回調べてみました。

JSON(ジェイソン:JavaScriptオブジェクト記法)は人間が読めるようにデータを整形した形でこんな感じのものだそうです。

{name”:”hogehoge”,
 “day”:”2019-09-23”,
“money””100^Yen}

JSON形式のデータは多くのWebサイトのやりとりで使われているそう。

それで、ファイルの読み込みにはjoss.loads(load_string)を主に使うそうですが、ファイルの読み込みの場合は json.load()を使うそうです(わかりづらい)。。。

import json

with open("jawiki-country.json") as f:
    hoge = json.load(f)

実行結果。

JSONDecodeError: Extra data: line 2 column 1 (char 27837)

エラーが返ってきます。 どうやらfor文で1行ずつ読み込まないといけないぽいです。

import json
hoge_list =[]
with open("jawiki-country.json") as f:
    for i in f:
        hoge = json.loads(i)
        hoge_list.append(hoge)
hoge_list[1]
{'text': '{{基礎情報 国\n|略名 = オーストリア\n|日本語国名 = オーストリア共和国\n|公式国名 = {{Lang|de|\'\'\'Republik Österreich\'\'\'}}\n|国旗画像 = Flag of Austria.svg\n|国章画像 = [[ファイル:Austria Bundesadler.svg|100px|オーストリアの国章]]\n|国章リンク = ([[オーストリアの国章|国章]])\n|標語 = \n|国歌 = [[山岳の国、大河の国]]\n|位置画像 = Location Austria EU Europe.png\n|公用語 = [[ドイツ語]]<!--公文書等は標準ドイツ語使用-->\n|首都 = [[ウィーン]]\n|最大都市 = ウィーン\n|元首等肩書 = [[連邦大統領 (オーストリア)|連邦大統領]]\n|元首等氏名 = [[ハインツ・フィッシャー]]\n|首相等肩書 = [[連邦首相 (オーストリア)|連邦首相]]\n|首相等氏名 = [[ヴェルナー・ファイマン]]([[オーストリア社会民主党|社会民主党]])\n|面積順位 = 112\n|面積大きさ = 1 E10\n|
(以下、省略)

あとはこれを綺麗に生成できれば良さそうです。 どうやるのか調べていましたが、リストにappendするのではなく、関数を作ってreturnすると良さそうです。 こんな感じ。

import json
from bs4 import BeautifulSoup

hoge_list =[]
def json_text(title):
    with open("jawiki-country.json") as f:
        for i in f:
            text = json.loads(i)
            if text["title"] == title:
                re_text = BeautifulSoup(text["text"], "lxml").get_text()
                return re_text 
print(json_text("イギリス"))

そのままだとHTMLタグがたくさんあるので、BeautifulSoupで取り除きます。

{{redirect|UK}}
{{基礎情報 国
|略名 = イギリス
|日本語国名 = グレートブリテン及び北アイルランド連合王国
|公式国名 = {{lang|en|United Kingdom of Great Britain and Northern Ireland}}英語以外での正式国名:
*{{lang|gd|An Rìoghachd Aonaichte na Breatainn Mhòr agus Eirinn mu Thuath}}([[スコットランド・ゲール語]])
*{{lang|cy|Teyrnas Gyfunol Prydain Fawr a Gogledd Iwerddon}}([[ウェールズ語]])
*{{lang|ga|Ríocht Aontaithe na Breataine Móire agus Tuaisceart na hÉireann}}([[アイルランド語]])
*{{lang|kw|An Rywvaneth Unys a Vreten Veur hag Iwerdhon Glédh}}([[コーンウォール語]])
*{{lang|sco|Unitit Kinrick o Great Breetain an Northren Ireland}}([[スコットランド語]])
**{{lang|sco|Claught Kängrick o Docht Brätain an Norlin Airlann}}、{{lang|sco|Unitet Kängdom o Great Brittain an Norlin Airlann}}(アルスター・スコットランド語)
|国旗画像 = Flag of the United Kingdom.svg
|国章画像 = [[ファイル:Royal Coat of Arms of the United Kingdom.svg|85px|イギリスの国章]]
|国章リンク = ([[イギリスの国章|国章]])

できた。 やっぱり初めてやることは時間がかかりますね。

今日の結果

今日のAKBの呟きは60件でした。 要約するとこんな感じです。

中国の皆さんにいつかお会いできますよーに❤️みてくださった方ありがとうございました!""中国のSNSサイト淘宝で、この後日本時間21時から生配信します!ちより、もぎちゃん、こじまこ、私の4人だよ?✨""こんにちは?
皆さん本当にありがとうございますっ!✨✨""今日は田北香世子さんが出演している#ダイコウシンという舞台を観に行ってきました!!すごく不思議な世界観の中で宇宙人と人間の愛のお話といいますか、、?難しいんですけど、でも本当に面白かったです✨わたしもこういうことができる人に…""なんと!まなずきですね??"
"エンタバアキバさんでの「センチメンタルトレイン」のお渡し会でした!せいちゃんとセンチメンタルトレインのMVの衣装でやったよ♪お足元の悪い中来てくれた皆さん本当にありがとうございました(´∀`*)♡手前の展示ブースも凄くて感激☆""今日はプラチナフラッシュの発売日だよ〜\(^o^)/いろんなシチュエーションで沢山撮影したので、是非皆さんチェックしてください♪♪""ずっきーの生誕祭終わりました?
'楽しい': 4, '凄い': 4, 'すごい': 4, '嬉しい': 4, '良い': 3, 'よい': 2, '難しい': 2, '美しい': 2, 'たのしい': 1, 'かわいい': 1, 'かっこよい': 1, '寒い': 1, '近い': 1, '面白い': 1, 'っぽい': 1, '美味しい': 1, '遅い': 1, 'ない': 1, '強い': 1, '痛い': 1, '有難い': 1, '熱い': 1, '悪い': 1, 'おしい': 1, 'うれしい': 1
'さん': 13, '皆さん': 12, '今日': 10, '生誕': 8, '公演': 8, '人': 8, '是非': 7, '祭': 7, '中国': 7, '配信': 7, 'ちゃん': 7, 'みんな': 7, '私': 6, '舞台': 6, '時': 6, '日': 6, '時間': 5, '発売': 5, '学園': 5, 'の': 5, '方': 5, '日本': 5, '期生': 5, 'センチメンタルトレイン': 5, 'みなさん': 5,
'する': 31, 'くださる': 22, 'さん': 13, 'ずる': 13, '来る': 13, '皆さん': 12, '今日': 10, '見る': 10, '生誕': 8, '公演': 8, '人': 8, 'いる': 8, '是非': 7, '祭': 7, '中国': 7, '配信': 7, 'ちゃん': 7, 'みんな': 7, 

f:id:rimt:20180923235518p:plain