Algorithm-SlopeOne
view release on metacpan or search on metacpan
lib/Algorithm/SlopeOne.pm view on Meta::CPAN
package Algorithm::SlopeOne;
# ABSTRACT: Slope One collaborative filtering for rated resources
use strict;
use utf8;
use warnings qw(all);
use Carp qw(confess);
our $VERSION = '0.004'; # VERSION
sub new {
my ($class) = @_;
return bless {
diffs => {},
freqs => {},
} => $class;
}
sub diffs {
my ($self) = @_;
return $self->{diffs};
}
sub freqs {
my ($self) = @_;
return $self->{freqs};
}
sub clear {
my ($self) = @_;
for (qw(diffs freqs)) {
delete $self->{$_};
$self->{$_} = {};
}
return $self;
}
sub add {
my ($self, $userprefs) = @_;
my $type = ref $userprefs;
if ($type eq q(HASH)) {
$userprefs = [ $userprefs ];
} elsif ($type eq q(ARRAY)) {
} else {
confess q(Expects a HashRef or an ArrayRef of HashRefs);
}
for my $ratings (@{$userprefs}) {
for my $item1 (keys %{$ratings}) {
for my $item2 (keys %{$ratings}) {
$self->freqs->{$item1}{$item2} ++;
$self->diffs->{$item1}{$item2} += $ratings->{$item1} - $ratings->{$item2};
}
}
}
return $self;
( run in 1.665 second using v1.01-cache-2.11-cpan-172d661cebc )