Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
102
Help us understand the problem. What is going on with this article?
@naoyashiga

DMM API・MeCab・マルコフ連鎖でAV作品の紹介文を自動生成

More than 3 years have passed since last update.

電子書籍「人工知能ポルノ」出版


人工知能ポルノ: コンピュータが書いたエロい文章

本記事の生成結果を電子書籍にしました。200~400文字程度の文章を100編掲載しています。 ご興味のある方はどうぞ!

自動生成してえ

こちらの記事に感銘を受けた。自分も何かやってみたいと思ったが、DeepLearningを用いての自動生成はハードルが高く、まずはマルコフ連鎖を使って自動生成してみようと思った。
【エヴァンゲリオン】アスカっぽいセリフをDeepLearningで自動生成してみる

そうだ!AVだ! :laughing:

自動生成にはデータが必要。自分はアニメがわからんので、エヴァンゲリオンの真似をしてもテンションがあがらない。自分のテンションがあがるものは?...すぐ思いついたのがAVの紹介文だ。

AV紹介文のメリット

  • 120字程度でデータが多そう?
    • タイトルと比べれば生成する文にバリエーションが出そう
  • 人を興奮させようという熱意ある文章 :chart_with_upwards_trend:
    • 無機質でないので楽しそう
  • DMM APIで取得できる
    • 2016年3月にver3.0が出た
      • 何かしら改良されてるはずなので開発が以前より容易かも

DMM APIを登録

https://affiliate.dmm.com/api/guide/
とういうことで早速始める。こちらの利用ガイドを参考に。

  • DMMアフィリエイト登録
    • アフィリエイトID発行
  • API IDを取得

作品紹介文を取得

こちらを参考にした。DMMのAPIはver3.0になっているのでそこは修正する必要がある。
http://akms.hateblo.jp/entry/2013/05/24/234703

コード

1000作品の紹介文を取得してero.txtに書き込んだ。

# -*- coding: utf-8 -*-

require 'open-uri'
require 'rexml/document'

def getURL(offsetNum)
    url = "https://api.dmm.com/affiliate/v3/ItemList?"
    queries = []

    params = {
      "api_id"       => 'YOUR_API_ID',
      "affiliate_id" => 'YOUR_AFFILIATE_ID',
      "site"         => 'DMM.R18',
      "service"      => 'digital',
      "floor"        => 'videoa',
      "sort"         => 'rank',
      "offset"       => offsetNum,
      "hits"         => 100,
      "output"       => "xml"
    }

    params.each_pair do |key,value|
      queries.push("#{key}=#{value}")
    end

    url += queries.join("&")

    return url

end

# 書き込み用テキストファイルを開く
File.open("ero.txt", "w") do |file|

    # 取得したいoffsetの回数だけLoop
    10.times do
        url = getURL(num)
        res = open(url)
        REXML::Document.new(res).elements.each("xml/result/items/item") do |element|
            # 作品紹介文を書き込む
            file.puts element.elements['comment'].text
        end
    end
end

マルコフ連鎖を行う

MeCabを準備

いろいろなやり方があると思うけど、下の記事を読んで設定した。
http://qiita.com/grachro/items/4fbc9bf8174c5abb7bdd

マルコフ連鎖のスクリプト準備

こちらのスクリプトを参考にした。
https://github.com/o-tomox/TextGenerator

自分はPython3系で実行したので、上のスクリプトを2系から3系の書き方に修正した。
https://gist.github.com/naoyashiga/4dfaa7e2a5222a9cadd9

紹介文を自動生成

紹介文を取得

$ ruby dmm.rb

dbに書き込む

$ python PrepareChain.py

自動生成

$ python GenerateText.py

出力結果

出力できた :sunglasses:

おっと内容が卑猥すぎたようだ!残念ながらここでは公開できない :weary:

気になる諸君はぜひ自分でやってみよう!

考察と展望

  • Deep Learningでもやってみたい
  • 生成文章量を調節できるようにしたい
  • もっと大量の文章をもとに生成してみたい

追記

ニューラルネットワークを用いてやってみました。
DMM API、char-rnn(リカレントニューラルネットワーク)でAV作品の紹介文を自動生成 - not good but great

102
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
naoyashiga
クリエイティブ開発者

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
102
Help us understand the problem. What is going on with this article?