毎日テキストマイニング

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

2018/09/21【90日目】自然言語処理100本ノック、その8

26問目です。 25問目の結果からマークダウンの強調を表す''' を消す問題です。 取り敢えず、replaceをしてみます。

import json
import json
import re
from pprint import pprint
def extract_base_info(text):
    m = re.search("{{基礎情報[^|]+\|(?P<info_body>.+?)\n}}", text, re.DOTALL)
    if not m:
        return {}

    info_body = m.group("info_body")

    info_dict = {}

    for item in info_body.split("\n|"):
        item = item.replace(“’’’”, "")
        key, word = re.split(r"\s*=\s*", item, maxsplit=1)
        info_dict[key] = word

    return info_dict

text = extract("イギリス")
base_info = extract_base_info(text)

pprint(base_info, indent=4)

実行結果。

"|確立形態4 = 現在の国号「'''グレートブリテン及び北アイルランド連合王国'''」に変更\n"

なんとなく予想はできていましたが消えませんね。 正規表現での置換はre.sub関数を使うそうです。

import json
import re
from pprint import pprint
def extract_base_info(text):
    m = re.search("{{基礎情報[^|]+\|(?P<info_body>.+?)\n}}", text, re.DOTALL)
    if not m:
        return {}

    info_body = m.group("info_body")

    info_dict = {}

    for item in info_body.split("\n|"):
        items = re.sub(r"'''", r"", item)
        key, word = re.split(r"\s*=\s*", items, maxsplit=1)
        info_dict[key] = word

    return info_dict

text = extract("イギリス")
base_info = extract_base_info(text)

pprint(base_info, indent=4)
'確立形態4': '現在の国号「グレートブリテン及び北アイルランド連合王国」に変更',

27問目です。 [http〜 を消す問題。次のようなところですね。

'|GDP値元 = 1兆5478億<ref '
 'name="imf-statistics-gdp">[http://www.imf.org/external/pubs/ft/weo/2012/02/weodata/weorept.aspx?pr.x=70&pr.y=13&sy=2010&ey=2012&scsm=1&ssd=1&sort=country&ds=.&br=1&c=112&s=NGDP%2CNGDPD%2CPPPGDP%2CPPPPC&grp=0&a= '
 'IMF>Data and Statistics>World Economic Outlook Databases>By Countrise>United '
 'Kingdom]</ref>\n'

https:を消す正規表現は次の通りなので、これを置換すれば良さそうです。

(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)
import re
from pprint import pprint
def extract_base_info(text):
    m = re.search("{{基礎情報[^|]+\|(?P<info_body>.+?)\n}}", text, re.DOTALL)
    if not m:
        return {}

    info_body = m.group("info_body")

    info_dict = {}

    for item in info_body.split("\n|"):
        items = re.sub(r"\[(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)", r"", item)
        items = re.sub(r"'''", r"", items)
        key, word = re.split(r"\s*=\s*", items, maxsplit=1)
        info_dict[key] = word

    return info_dict

text = extract("イギリス")
base_info = extract_base_info(text)

pprint(base_info, indent=4)

実行結果。

    'GDP値元': '1兆5478億<ref name="imf-statistics-gdp"> IMF>Data and '
             'Statistics>World Economic Outlook Databases>By Countrise>United '
             'Kingdom]</ref>',

良さそうです。

28問目。 < hoge > といったタグを消していく問題です。こちらもre.sub関数で置換していけば良さそうです。

import json
import re
from pprint import pprint
def extract_base_info(text):
    m = re.search("{{基礎情報[^|]+\|(?P<info_body>.+?)\n}}", text, re.DOTALL)
    if not m:
        return {}

    info_body = m.group("info_body")

    info_dict = {}

    for item in info_body.split("\n|"):
        items = re.sub(r"\[(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)", r"", item)
        items = re.sub(r"'''", r"", items)
        items = re.sub(r"<.*>", r"", items)
        key, word = re.split(r"\s*=\s*", items, maxsplit=1)
        info_dict[key] = word

    return info_dict

text = extract("イギリス")
base_info = extract_base_info(text)

pprint(base_info, indent=4)

ぱっと見これで良さそうです。

ひとまず今日はここまで。

今日の結果

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

起きてたら見に来てください♪0:50からやるよーー!""サムネイル公演終わり〜!今日もありがとうございました?
見ないと〜!!!この後24時59分からです!さとはドラマには出演していないのですが、23日の舞台マジムリ学園にゲスト出演します??
"おやすみ〜(*´ω`*)☆""サムネイル公演でした〜☆写真は前座に出てくれた交換留学生のステフィちゃんとモバイルちゃんと♡*゜2人とも綺麗だし大人っぽいし、何より日本語が上手でびっくり(゜o゜)!!今日もありがとうございました(*´ω`*)""私も載せていただきました☆是非皆さんチェックしてくださいね♡♡""今日まで!!皆さんお忘れなく♡*゜""今日は美容院にいってエクステを取ってきました!ショートゆいりーよろしくね?
'楽しい': 9, '嬉しい': 6, '可愛い': 2, '面白い': 2, '寂しい': 2, '高い': 1, 'たのしい': 1, '痛い': 1, '難しい': 1, '宜しい': 1, 'すごい': 1, 'おもしろい': 1, '寒い': 1, '熱い': 1, 'かっこよい': 1, 'っぽい': 1, 'よろしい': 1, 'ほしい': 1, 'ない': 1, '早い': 1, 'すっごい': 1
'今日': 16, '公演': 14, '楽しい': 9, '回': 9, '私': 9, '学園': 8, '最終': 8, 'さん': 8, '皆さん': 8, '人': 7, '期生': 7, '嬉しい': 6, '放送': 6, 'ちゃん': 6, 'の': 6, '出演': 6, 'ん': 6, '後': 5, '是非': 5, '部': 5, '方': 5,
'する': 33, '今日': 16, '見る': 16, 'くださる': 15, '公演': 14, 'いる': 11, '楽しい': 9, '回': 9, '私': 9, '学園': 8, '最終': 8, 'さん': 8, '皆さん': 8, '人': 7, '期生': 7, '嬉しい': 6, '放送': 6, 'ちゃん': 6, 'の': 6, '出演': 6, 'ん': 6, 'やる': 6, 'くれる': 6, 'いただく': 6, 'ある': 6,

f:id:rimt:20180930034225p:plain