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

2,498 views

Published on

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

Published in: Engineering
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,498
On SlideShare
0
From Embeds
0
Number of Embeds
915
Actions
Shares
0
Downloads
2
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  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/

×