Published Date : 2019年5月23日8:25
1 | データ収集(Data Scraping) |
---|---|
2 | 前処理(Preprocessing) |
3 | 分析(Analyizing) |
4 | Build Neural Network |
5 | Word2Vecを使う |
6 | LSTMによる文章生成 |
# まずグーグルドライブをマウント from google.colab import drive drive.mount('/content/drive') """ Go to this URL in a browser: https://accounts.google.com/o/oauth2/auth?client_id=hogehogehogehogehoge................... Enter your authorization code: [ここにコードを入力してエンターキー] """ # JSONファイルをアップロードした場所に移動。 # マイドライブ内に適当なフォルダを作ってそこにJSONファイルをおいてくだちぃ。 cd /content/drive/My Drive/data # ライブラリインポート import pandas as pd import json import numpy as np # jsonファイルの読み込み。 with open('./daihon.json','r',encoding='utf-8') as f: daihon=json.load(f)
# nagisaをインストール !pip install nagisa # 軽く使ってみる import nagisa text = 'ドナルド・トランプ大統領は先日Twitterであの出来事について語った' words = nagisa.tagging(text) print(words) # 結果 --> ドナルド/名詞 ・/補助記号 トランプ/名詞 大統領/名詞 は/助詞 先日/名詞 Twitter/名詞 で/助詞 あの/連体詞 出来事/名詞 に/助詞 つい/動詞 て/助詞 語っ/動詞 た/助動詞
import re import nagisa import pandas as pd # タイトルと芸名をまとめる。 titles=[d['title'] for d in daihon] names=[t.split('「')[0] for t in titles] # 分析に不要だと思われる記号類を取り除く準備 # 全体用 remove_words_all=lambda x: x.replace('Boke: ','').replace('mannaka: ','').replace('Tukkomi: ','').replace('?','').replace('。','').replace('!','').replace('…','').replace('…。','').replace('!?','').replace('「','').replace('」','').replace('【','').replace('】','').replace('『','').replace('』','').replace('・・・','').replace('~','').replace('(','').replace(')','').replace('、','') # 分割用 remove_words=lambda x: x.replace('?','').replace('。','').replace('!','').replace('…','').replace('…。','').replace('!?','').replace('「','').replace('」','').replace('【','').replace('】','').replace('『','').replace('』','').replace('・・・','').replace('~','').replace('(','').replace(')','').replace('、','') # スクレイピングしたJSONファイルから台本のセリフのみを抜き出し、1行ずつ改行でつなげ、一つの文字列にする。 scripts=list('\n'.join(remove_words_all(lines) for lines in d['article']) for d in daihon) # 分割用 div_scripts=list('\n'.join(remove_words(lines) for lines in d['article']) for d in daihon) # ボケと(トリオの場合にはmannakaがいる)ツッコミのセリフを分ける。 boke_lines=list(b.replace('Boke: ','') for b in [''.join(re.findall(r'Boke:[^\n]+\n',s)) for s in div_scripts]) mannaka_lines=list(b.replace('mannaka: ','') for b in [''.join(re.findall(r'mannaka:[^\n]+\n',s)) for s in div_scripts]) tukkomi_lines=list(b.replace('Tukkomi: ','') for b in [''.join(re.findall(r'Tukkomi:[^\n]+\n',s)) for s in div_scripts]) # 分かち書きする際に、例えば「四千頭身」が「四千」と「頭身」に分かれてしまうのを防ぐ。 # もう少し、シングルワードを加えていく。 # 台本をみながら独断と偏見で、しかもこれでも全体の2%という凶悪さ。 single_word=['どうも','ザ・バーディーズ','サッカーワールドカップ','サッカーW杯','お願い','お願いします','すいません','ありがとうございます', 'すごいっすね','でね','このまま','あのね','だから','80代','しょうもな','しょうもない','4人','かなと','やんか','なるんよ','たんかな','やないか', 'へんように','のよ','んやけど','てへんよ','やけに','おかえりなさい','タッちゃん','したはっ','くるんかーい','きたやん','いらん','とって','カリスマ美容師', '美容師','なるほどな','ほんなら','ヘアスタイル','かしこまりました','いらっしゃいませ','木村拓哉','福士蒼汰','ベリーショート','モト冬樹','えっえっ','ショートカット', 'はやってる','モト冬樹','いや','すいません','全体的','だから','お赤飯','整髪料','ねん','これ','もうええわ','どうもありがとうございました','お姉ちゃん', 'よい子','めちゃくちゃ','数十倍','距離感','奇跡的','えいえい','んっ','えい','ダンスパーティー','神様','洋食屋','東京Walker','オムライス','温暖化', 'ポケットティッシュ','1回','ひょうたん島','お父さん','1か月','ちょっ','ちょっと','お金','お笑い','40年','ピン芸','2009年','M-1グランプリ','M-1', 'トップバッター','審査委員長','島田紳助','何回','6回','2012年','北野演芸館','ビートたけし','1年半','誰','医学部','国家試験','漫才師','自動車学校','学科', '8回','9回','通り','三つ編み','オギャ~','14~15歳','25周年','関西弁','東京都','大阪府','通天閣','人前','スカイツリー','トテトテ','どっか','最先端', '全問正解','1問','親しき中にも礼儀あり','こんにゃく','おじさん','与太小僧','他の人','お化け','メリーさん','一人称','貴様','びびって','女の人','肝の玉', 'エンドレスリピート','最先端','マジ卍','十二ひとえ','12枚','かごかい','いとをかし','コロ助','懐メロ','秋の田のかりほ','1つ','元カノ','ありがとうございました','2階', '600','何度','気のせい','お手下げ','ドコドコドコドン','ブサイク','不細工','マックシェイク','失礼しま~す','ペチペチ星','5歳','週5','罰ゲーム','ペチンコ屋', 'パチンコ屋','ペチペチクイズ','10回','ホヤァ~ン','ペチペチダンス','だって','一回','一等','二等','3回','5年間','ジャスティン・ビーバー'] # くっつける。 names=names+single_word # 分かち書きができるように準備 nagisa_tagger=nagisa.Tagger(single_word_list=names) # 分かち書きして、データフレームに直す下準備の関数 def nagisa_parse(text,nagisa_tagger): text=text.split('\n') wakati_list=[nagisa_tagger.tagging(t) for t in text] wakati_words=[wakati.words for wakati in wakati_list] wakati_postags=[wakati.postags for wakati in wakati_list] wakati_zip=[list(map(list,zip(w,wakati_postags[i]))) for i,w in enumerate(wakati_words)] wakati_comb=[j for z in wakati_zip for j in z] return wakati_comb # 分かち書き 全体Ver wakati_comb=[nagisa_parse(s,nagisa_tagger) for s in scripts] # 分かち書き 各役割ごとVer boke_wakati_comb=[nagisa_parse(s,nagisa_tagger) for s in boke_lines] mannaka_wakati_comb=[nagisa_parse(s,nagisa_tagger) for s in mannaka_lines] tukkomi_wakati_comb=[nagisa_parse(s,nagisa_tagger) for s in tukkomi_lines] # キーをタイトルに、バリューをデータフレームにした辞書にする。 wakati_dfs_dict=dict((titles[i],pd.DataFrame(w,columns=['words','postags'])) for i,w in enumerate(wakati_comb)) # 役割ごと # これはタイトル数と合わないので普通にデータフレームする boke_wakati_dfs_dict=list(pd.DataFrame(w,columns=['words','postags']) for w in boke_wakati_comb) mannaka_wakati_dfs_dict=list(pd.DataFrame(w,columns=['words','postags']) for w in mannaka_wakati_comb) tukkomi_wakati_dfs_dict=list(pd.DataFrame(w,columns=['words','postags']) for w in tukkomi_wakati_comb) # 中身を見る scrpts_dfs_dict[titles[0]]