2.5 似ている製品
2章も半分まで来ました。今回は、ユーザではなくアイテムを軸にして、あるアイテムと類似しているアイテムを推薦するサンプルです。類似性スコアを算出するサブルーチンはそのまま使えて、入力として与えるハッシュのキーであるユーザとアイテムを入れ替える部分だけ新規に実装しました。
出来たもの
# データのitemとpersonを入れ替える sub transformPrefs { my ($prefs) = @_; my %result = (); foreach my $person (keys %{$prefs}) { foreach my $item (keys %{ $prefs->{$person} }) { $result{$item}{$person} = $prefs->{$person}->{$item}; } } return %result; }
まあ、これくらいです。あとは、これを使ってユーザとアイテムを入れ替えたハッシュを作って、コマンドラインからアイテム名と個数を与えることで、推薦するアイテムが得られます。
入れ替え。
my %movies = transformPrefs(\%critics);
結果。
List of Movies: Snakes on a Plane Just My Luck Lady in the Water Superman Returns You, Me and Dupree The Night Listener Enter Movie ==> Superman Returns Enter num of match movies ==> 5 Match Movies: You, Me and Dupree : 0.657951694959769 Lady in the Water : 0.487950036474267 Snakes on a Plane : 0.111803398874989 The Night Listener : -0.179847194799054 Just My Luck : -0.422890031611031
コード置き場
最新版はこちらに置いてあります。
http://gist.github.com/489178