Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

しょぼいカレンダーからアニメデータベースを作る

Kawasaki.rb #026 「ほぼ2周年記念LT大会」の発表内容です

  • Be the first to comment

しょぼいカレンダーからアニメデータベースを作る

  1. 1. しょぼいカレンダーから アニメデータベースを作る 2015/7/22 kawasaki.rb #26 ぺけみさお
  2. 2. ● ぺけみさお(xmisao) ● http://www.xmisao.com/ ● プログラマ(Java屋さん) ● 趣味のRubyist 自己紹介
  3. 3. 本日のテーマ ぺけアニメデータベースの紹介をします http://animedb.xmisao.com/
  4. 4. 突然ですが
  5. 5. アニメがわりと 好きです
  6. 6. 野望
  7. 7. アニメ データベースを 作る
  8. 8. やりたいこと ● アニメとより深く向き合うために… ○ あるアニメと似ているかも 知れないアニメを探したい ○ あるスタッフ/キャストが携わった アニメを一覧したい
  9. 9. データはどこから 手に入れる?
  10. 10. Wikipedia ? ● 情報量はすごい ● 基本的にマシンリーダブルではないため、 プログラムによる定型的な情報抽出が困難
  11. 11. しょぼいカレンダー ● http://cal.syoboi.jp/ ● その筋では有名なアニメ情報サイト ● アニメの放送時間をリアルタイムに更新 (スポーツ中継もなんのその) ● 過去3,000タイトル以上の放送日時、 キャスト、スタッフ等の情報を蓄積 ● APIでほぼ全ての情報が取得可能 ○ アニメ自動録画システムfoltiaなど マニアックな応用例あり
  12. 12. しょぼいカレンダー参照系API一覧 ● cal_chk.php ● db.php ○ TitleLookup ○ ProgLookup ○ ChLookup ○ ChGroupLookup ○ TitleViewCount ○ TitleRankHistory ○ TitlePointHistory ○ TitlePointTop ● json.php ○ TitleMedium ○ TitleLarge ○ TitleFull ○ ProgramByPID ○ ProgramByCount ○ ProgramByDate ○ SubTitles ○ ChFilter ○ ChIDFilter ● rss.php ● rss2.php
  13. 13. しょぼいカレンダーAPIの特徴 ● データのアクセスには寛容 ○ ほぼDBのテーブルのような生データが取得可能 がんばれば主要なデータはまるまる抜ける ● 統一感のないAPI ○ クエリや出力のフォーマットがまちまち プログラムで個々に対応する必要がある ● 一部データは正規化されていない ○ スタッフの名前と役職、キャストと配役は プレーンテキストを解析してパースする必要あり
  14. 14. Rubyで しょぼいカレンダー からデータを 取得したい (PythonやJuliaではありません この会はkawasaki.rbです)
  15. 15. しょぼいカレンダーAPI のRubyラッパGem ● r7kamura / syoboi_calendar ○ 2013/4/10公開 ○ 7,176ダウンロード / 23,550位 ○ 主要な4つのAPIに対応 ○ いわゆるRubyっぽい書き方が可能 ● xmisao / syobocal ←拙作 ○ 2014/4/16公開 ○ 508ダウンロード / 92,604位 ○ 参照系の全20APIに対応 ○ 愚直にAPIをラッピング 先行のsyoboi_calendarは対応APIが不足 かつポリシーがいまいち好みじゃなかったため開発
  16. 16. syoboi_calendarによるコード例 require "syoboi_calendar" client = SyoboiCalendar::Client.new client.channels #=> an Array of SyoboiCalendar::Resources::Channel client.programs #=> an Array of SyoboiCalendar::Resources::Program client.titles #=> an Array of SyoboiCalendar::Resources::Title
  17. 17. syobocalによるコード例 require 'syobocal' params = {"TID" => "1"} Syobocal::DB::TitleLookup(params) #=> Title Information of TID = 1
  18. 18. アニメ データベース の作成へ
  19. 19. データベースの作成 しょぼいカレンダーより以下のDBを作成 ● タイトル 3,862件 ● スタッフ17,221名(*) ● キャスト 7,623名(*) ● タイトル間類似度 約15M 通りを計算 ○ 共通のスタッフとキャストの数を類似度としている ○ 数学的にはキャストとスタッフを高次元のベクトルとみな して内積を類似度としている感じ (*)表記揺れのためパースに不完全な箇所あり
  20. 20. Webインタフェースの開発 使ったもの ● Sinatra ● Sequel + SQLite3 ● Nginx ● Amazon EC2
  21. 21. 今後の課題 ● 出現頻度を考慮した、もっと賢い類似度計算 ● タイトル、キャスト、スタッフのクラスタリング ● 関係性や傾向のビジュアライジング ● etc
  22. 22. ぺけアニメ データベースを 是非ご覧下さい http://animedb.xmisao.com/

×