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 )