毎日テキストマイニング

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

2018/09/17【86日目】自然言語処理100本ノック、その4

さて JSON形式でテキストを取得できましたので問題に戻ります。

021 次のようなカテゴリー名を取得する問題です。

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

ひとまず、正規表現で取得してみます。

import re
r = re.compile(r'Category.*')
r.search(n21)
<_sre.SRE_Match object; span=(36844, 36863), match='[[Category:イギリス|*]]'>

最初の1箇所しか返ってきていませんね。 for文で回して取り出していくのかと1時間くらい格闘していましたが、SRE_Patternクラスにはfindallメソッドと言うのがあるのに気付きました。

search( )やmatch( )では最初にマッチした部分しか取り出せません。マッチした部分を全て取り出すにはfindall( )を使います。

import re
r = re.compile(r'Category.*')
r.findall(n21)
['Category:イギリス|*]]',
 'Category:英連邦王国|*]]',
 'Category:G8加盟国]]',
 'Category:欧州連合加盟国]]',
 'Category:海洋国家]]',
 'Category:君主国]]',
 'Category:島国|くれいとふりてん]]',
 'Category:1801年に設立された州・地域]]']

22 下のようなものを数値に変換する問題ですね。

==政治==
===気候===
====イギリスのポピュラー音楽====

また難しい問題ですね。 ひとまず正規表現で取得。

import re

section_reg = re.compile(r'(==+)(..+)(==+)')
r.findall(n21)

実行結果。

[('==', '国名', '=='),
 ('==', '歴史', '=='),
 ('==', '地理', '=='),
 ('===', '気候=', '=='
 ('===', '食文化=', '=='),
 ('===', '文学=', '=='),
 ('===', ' 哲学 =', '=='),
 ('===', '音楽=', '=='),
 ('====', 'イギリスのポピュラー音楽==', '=='),

Oh! うまく取得できていないですね。いくらやってもうまくいかないので、このまま行きます。

A[0][0:2]

こうやれば必要なものは取得できますし。

import re

section_reg = re.compile(r'(==+)(.)(==+)')
A = r.findall(n21)
A[0][0:2]
for i in range(len(A)):
    if A[i][0] == '====':
        print(3)
    elif A[i][0] == '===':
        print(2)
    else:
        print(1)

ひとまず、こうすればセクションのレベルは取得できます。 しかし、全く進まないですね。

今日の結果

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

ニコ生での中継もあるからね!絶対見てくださーーい?✨""やびちゃんの生誕イベントに出演させて頂きました!?
さい&amp;こうでした。"AKB新聞!!よろしくお願いします!!""メンバー数人、東京湾の夜景を見に連れてってあげたいと計画。女(20代)にしては変わった遊び。"柚子ごしょう好きになった。大人にまたなった"しごおわ帰る""すき+すき=だいすき❤️❤️❤️""今日は東京マハロさんの"たぶん世界は8年目"をみに行きました。本当に凄かった。最後の最後までいろんな感情がうまれる作品でした。そして何より久し振りに皆さんにお会いできて嬉しすぎました☺️皆さんお優しくて本当に好き。ゆりあちゃん久…""こんばんは!1度日本に来てます???
"今日は美容dayでした☆美容院にも行けたし、人生で初めてまつエクもつけてみたの〜(*´ω`*)♡明日からメイクするのが楽しみ♪明日のじゃんけん大会、どんな髪型とメイクにしようかな〜( ̄▽ ̄)""SHOWROOMありがとうございました☆明日のじゃんけん大会、絶対勝つぞー\(^o^)/\(^o^)/#武藤シスターズ""20:40からSHOWROOMやりまーす!#武藤シスターズ( ̄▽ ̄)""3位!!!初のダイスキ選抜でこんなに高い順位なんて、、☆応援してくださった皆さん本当にありがとうございました♡♡わーい\(^o^)/""#プラチナフラッシュのオフショット①絶賛発売中です☆.
'可愛い': 6, '嬉しい': 4, '楽しい': 4, '凄い': 3, 'よい': 2, '優しい': 2, '早い': 2, '美味しい': 2, 'すごい': 1, 'たのしい': 1, '無い': 1, '面白い': 1, 'いい': 1, '新しい': 1, 'ない': 1, '高い': 1, '仲良い': 1, '恋しい': 1
'明日': 9, '舞台': 8, '今日': 8, '皆さん': 8, '大会': 7, '可愛い': 6, '私': 6, 'ちゃん': 6, 'カフェ': 5, 'お願い': 5, '公演': 5,
'する': 35, 'くださる': 12, '明日': 9, 'てる': 9, 'ける': 9, '見る': 9, 'くれる': 9, '舞台': 8, '今日': 8, '皆さん': 8, '大会': 7, 'なる': 7, '可愛い': 6, '私': 6, 'ちゃん': 6, '行く': 6, 'カフェ': 5, 'お願い': 5, '公演': 5, 'ある': 5, 'いる': 5, '来る': 5, 

f:id:rimt:20180925000440p:plain