アニメと声優は同じだった

データベースを作り、出演している声優が似ているアニメを調べようと思った。
声優が300人いれば、各アニメ作品に対して300次元の声優ベクトルが定義できる。
そのベクトル同士の角度が0度に近ければ似ている、90度なら似てないとするわけだ。*1
膨大なアニメと声優、ついでにキャラ名のデータを、どういう構造で保存しようか考えた。
一つのアニメに対して何人かの声優がいて、同時にキャラ名も記録したい。
しばらく考えて、出演声優が似ているアニメを探す問題と、出演アニメが似ている声優を探す問題は、同じ論理構造をしていることに気がついた。
つまり、プログラミングする側から見れば、両者に何の違いもない。
変数名が違っても、吐くバイナリは一緒だ。
アニメと声優が、キャラを通して結びついている。
右図が上下対称。そういうイメージ。
双対と言ったらおおげさか(見るからに対称だし)。

改めて考えると、「キャラ」という両者に中立な要素を中心にすればきれいになりそうだ。
アニメと声優に番号を振れば、各キャラに2つの整数値を持たせるだけでいい。
つまり、必要なのは、アニメ・声優・キャラの名前を列挙しただけのリストと、
それに対応した、キャラの数だけ2つの整数値が並んだリストだ。

*1:本来180度までありえるものが90度までなのは、ベクトルの成分を0か1としていたためで、これは少し変だった。コメント欄で協調フィルタリングというキーワードを下さったmkomiyaさんに感謝。修正版