無料エロ漫画サイトの煽り文を機械学習で再現する方法(全年齢版)
<注意書き>
こちらは18歳未満でも安心して読める記事です。
よって結果は出力してません。結果を見たい18歳以上の方はnoteの記事
(https://note.mu/notes/n02752880ceaa)を読むか
TwitterのBot(@R18_manga_LSTM)をフォローしてください。
こっちは手順解説です。
(5/5/2019更新)コードを少しマシにしました。
今回、「エロ漫画タイム」(リンク先R18)
(http://eromanga-time.com/)という無料エロ漫画サイトを題材として、文章の機械学習と文章の自動生成に取り組みました。
「エロ漫画タイム」には、独特な煽り文(作品紹介)があります。
これが非常に特徴的で面白いのですが、18歳未満にふさわしくないので例は差し控えさせてください。(note参照)
さて、この煽り文(に近いもの)を機械学習で作り出します。
◯環境
OS:Windows 10 home(64-bit)
GPU: Geforce GTX 1070Ti
Python 3.6.6(64bit)
Anaconda Navigator 1.9.6
MeCab-0.996
Jupyter Notebook 5.7.0
Google Chrome 72.0.3626.121(Official Build)(64 ビット)
◯データセットを用意する
まずは学習するためのデータセットを準備します。
APIが提供されてるならそちらからアプローチをかけたほうが良いですが、当然そんなものが提供されているはずもないので普通にやります。
サイトに行き、F12キーを押して(Google Chromeの場合)開発者モードを開きます。
↑開発者モードの例(このサイト)
そして、取得したい値がどこに書き込まれているかを探します。
今回の場合、<h2 class="article-title entry-title">の下にありました。
次に、ページ構造を確認しておきます。
普通に次のページに行き、URLの変化をチェックします。
「エロ漫画タイム」はURLが
http://eromanga-time.com/?paged=(ページ番号)
の形で管理されていたので、全ページを取得したいときはページ番号部分を動かせばいいとわかりますね。
これで必要な情報は手に入れたのでエディタに移りましょう。
煽り文をスクレイピングするコードを書きます。
Beautiful SoupとRequestsをインストールしておく必要があります。
前にげっちゅをスクレイピングした際に使ったコードを改造したので、前に何を参考にしていたか忘れちゃった。
注意するのは"class"は予約語なのでそのままでは使えず、”class_”で使うこと、ループ回さないと全取得できないことの2点。
このプログラムは取得した情報を保存してないですが、そのへんは大目に見てください。
やろうと思えばできますが(リストをstr型に変換してから書き込み)、jupyter使ったほうが簡単なので…
実際にはJupyter Notebookで動かして結果をコピペで保存しました。
2時間ほどかかると思います。
また、これだとhtmlタグがそのまま残るので、エディタで正規表現を使って処理します。
http://hodade.com/seiki/page.php?r_tag_sakujo
http://hodade.com/seiki/page.php?r_karagyou_sakujo
上のサイト2つを参考にして削除して、行を詰めます。
◯学習して出力する
今回はささっとやるために以下のレポジトリを使いました。
自動文章生成AI(LSTM)に架空の歴史を作成させた方法とアルゴリズム | SPJ
掲載元のサイトによると、事前処理が必要なのでこれも以下を参考にエディタで処理します。
http://hodade.com/seiki/page.php?r_gyoutou_tsuika
http://hodade.com/seiki/page.php?r_gyoumatsu_tsuika
データの事前処理が終わったら、プログラムをReadmeに従って実行します。
「--gpu=0」を使うと早くなると書いてありますが、generator.pyでGPUを使用するとエラーが出たので使わないほうがいいかも。
出力結果は…
18歳未満が見ると悪いのでやめておきます。botとnoteで確認してね!