毎日テキストマイニング

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

2018/8/19【57日目】AKBの本当の神曲をみつける

Amazonのレビューですが、1728件のレビューが取得できました。 なんかデータの不具合があまりも多くて前処理(主にコンマの処理)で泣きそうだったのですが、なんとか読み込めました。

とりあえず学習

とりあえずword2vecで学習させました。センターと入力するとこんな感じになります。

word2vecの説明はこちら。

dailytextmining.hatenablog.com

model.most_similar("センター")
[('優子', 0.7802525758743286),
 ('ゆ', 0.7613364458084106),
 ('前田', 0.7600348591804504),
 ('さん', 0.736564040184021),
 ('ゆき', 0.7352813482284546),
 ('渡辺', 0.7113367319107056),
 ('篠田', 0.7061018943786621),
 ('敦子', 0.6999825239181519),
 ('優紀', 0.6963295340538025),
 ('マイク', 0.694685697555542)]

センターでみてみると大島優子の方が前田敦子より出てきます。 センターになった回数でいうと前田敦子の方が圧倒的に多いですが、レビュー数でみるとそこまで極端に負けてもいないので、センターになった回数が少ない分、大島優子の方が話題に上がることが多いんでしょうね。

センターになった回数(複数センターも含めて)

前田敦子がセンター曲のレビュー数

大島優子がセンター曲のレビュー数

それでは曲の方もみていきます。まずは名曲と入力してみます。

model.most_similar("名曲")
[('作品', 0.7805891036987305),
 ('思い出', 0.6867567896842957),
 ('さらなる', 0.684403657913208),
 ('季節', 0.6754779815673828),
 ('cool', 0.6640548706054688),
 ('ぶり', 0.663932204246521),
 ('さすが', 0.6636984348297119),
 ('おすすめ', 0.6614989042282104),
 ('バラード', 0.6546747088432312),
 ('最高', 0.6485679149627686)]

曲名が出てこないですね。今のままですとそもそも曲名が辞書に登録されていないので、出力されるわけがないですね。MeCabの辞書に曲を追加していきます。辞書の登録の仕方はこちらでやりました。

2018/7/10【18日目前半】MeCabに辞書を登録する

dailytextmining.hatenablog.com

それと、レビューですと当然ですが、「この曲は」とか「今までで一番の曲」といったように、曲名がわからないものがあります。なので、曲名がわかるようにタイトルとレビュータイトルをくっ付けてしましたいと思います。

こんな感じ(タイトルはテキストエディタで置換しました)です。

print((train["song_title"][2])+train["review_title"][2]+(example.get_text()))
会いたかったこの曲が一番好きですAKBの曲、もう何曲も出ているけど、原点であるこの曲が一番好きです。
#元のレビュー
#AKBの曲、もう何曲も出ているけど、原点であるこの曲が一番好きです。

かなり良さげになりました。 関数も書き直します。

def text_to_vec(song_title, reviw_title, raw_text):
    tweet_text = BeautifulSoup(raw_text, "lxml").get_text()  
    letters_only = re.sub("(https?)(:\/\/[-_.!~*\'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)", " ", tweet_text)
    all_text = song_title + reviw_title + letters_only
    mecab = tagger.parse(all_text)
    words = mecab.lower().split()
    return(words)

これでもう一度、学習し直します。

model.most_similar("名曲")
[('作品', 0.8430494070053101),
 ('diva', 0.8392430543899536),
 ('思い出', 0.831322431564331),
 ('翼はいらない', 0.831229567527771),
 ('ストレート', 0.8210798501968384),
 ('背中', 0.8144763708114624),
 ('偏見', 0.8110009431838989),
 ('玲奈', 0.8055139780044556),
 ('バラード', 0.800865650177002),
 ('会いたかった', 0.800559937953949)]
  • ('翼はいらない', 0.831229567527771),
  • ('会いたかった', 0.800559937953949)]

の2曲が名曲として出てきました。

それでは、名曲の上となる神曲はどうでしょうか?

model.most_similar("神")
[('river', 0.8973854780197144),
 ('そのもの', 0.8895211815834045),
 ('風は吹いている', 0.889178454875946),
 ('ポニーテールとシュシュ', 0.8870421648025513),
 ('時計', 0.8821254968643188),
 ('表題', 0.8791835308074951),
 ('良', 0.8672671914100647),
 ('強がり', 0.8662034273147583),
 ('心のプラカード', 0.8661544322967529),
 ('らしい', 0.857416033744812)]

の4曲が神曲として出力されました。

意外ですね。てっきり、恋するフォーチュンクッキー365日の紙飛行機が入ってくるかと思いましたが、これらは名曲と呼んでいる人は少ないのかもしれませんね。個別にみてみます。

model.most_similar("恋するフォーチュンクッキー")
[('プラス', 0.8465442061424255),
 ('館', 0.8344211578369141),
 ('快挙', 0.8325627446174622),
 ('号', 0.8271607160568237),
 ('music', 0.8268901109695435),
 ('収め', 0.8205280900001526),
 ('ハイテンション', 0.8122432827949524),
 ('物凄く', 0.810246467590332),
 ('真夏', 0.806281566619873),
 ('名義', 0.8055335283279419)]

(名義ってなんだ。。。)

model.most_similar("365日の紙飛行機")
[('釣り', 0.8331804275512695),
 ('唇', 0.8098644614219666),
 ('懐かしく', 0.8057860732078552),
 ('名作', 0.7978659868240356),
 ('せっかく', 0.7806496620178223),
 ('売り切れ', 0.7798574566841125),
 ('芽', 0.7773637771606445),
 ('講座', 0.7764194011688232),
 ('baby', 0.7740527391433716),
 ('桜の栞', 0.7714337706565857)]

(こっちは名作!)

こんな感じでした。本当ならここで共起ネットワークを作ればいいのですが、なかなか手間がかかりそうなので、今日はここまでにします。

今日の結果

今日のAKBの呟きは51件でした。 新潟公演が終わったらしいです。出張公演ってやっているんですね。

f:id:rimt:20180820025848p:plain

{'嬉しい': 8, '楽しい': 7, '眠い': 3, '温かい': 3, 'いい': 3, '寒い': 2, '美味しい': 2, '優しい': 2, '良い': 2, 'すごい': 2, '多い': 2, '賢い': 1, 'やばい': 1, '欲しい': 1, '物凄い': 1, '有難い': 1, 'おいしい': 1, 'あやい': 1, '難しい': 1, '新しい': 1, '上手い': 1, '可愛い': 1, 'あたたかい': 1, 'ちっちゃい': 1}
'公演': 41, '出張': 14, '回': 14, 'さん': 14, '新潟': 13, '劇場': 11, 'チームエー': 11, '今日': 10, '真子': 9, '生誕': 9, '祭': 9, '嬉しい': 8, '楽しい': 7, '彩': 7, '日': 7, '大好き': 7, 'ちゃん': 7, '黒': 6, '組': 6, 'ファン': 5, '夜': 5, '方': 5, '放送': 5,
'公演': 41, 'てる': 22, 'する': 21, '出張': 14, '回': 14, 'さん': 14, '新潟': 13, '劇場': 11, 'チームエー': 11, '今日': 10, '真子': 9, '生誕': 9, '祭': 9, '嬉しい': 8, 'いる': 8, '楽しい': 7, '彩': 7, '日': 7, '大好き': 7, 'ちゃん': 7, 'くる': 7, 'くださる': 7, '寝る': 7, 'なる': 7, 

ちなみに好きで入力したら、まゆゆだけが唯一入ってきました。

model.most_similar("好き")
[('大好き', 0.7712128162384033),
 ('最高', 0.7647926807403564),
 ('爽やか', 0.7458555102348328),
 ('的', 0.7421799898147583),
 ('セクシー', 0.7198798656463623),
 ('嫌い', 0.7031300067901611),
 ('可愛い', 0.697096049785614),
 ('まゆ', 0.6903289556503296),
 ('akb', 0.6642345190048218),
 ('カップリング', 0.6578464508056641)]