File Coverage

blib/lib/AI/Categorizer/Learner/NaiveBayes.pm
Criterion Covered Total %
statement 27 30 90.0
branch 0 2 0.0
condition n/a
subroutine 9 10 90.0
pod 2 5 40.0
total 38 47 80.8


line stmt bran cond sub pod time code
1             package AI::Categorizer::Learner::NaiveBayes;
2              
3 1     1   762 use strict;
  1         2  
  1         27  
4 1     1   5 use AI::Categorizer::Learner;
  1         1  
  1         21  
5 1     1   4 use base qw(AI::Categorizer::Learner);
  1         2  
  1         62  
6 1     1   5 use Params::Validate qw(:types);
  1         1  
  1         134  
7 1     1   5 use Algorithm::NaiveBayes;
  1         1  
  1         269  
8              
9             __PACKAGE__->valid_params
10             (
11             threshold => {type => SCALAR, default => 0.3},
12             );
13              
14             sub create_model {
15 2     2 0 3 my $self = shift;
16 2         19 my $m = $self->{model} = Algorithm::NaiveBayes->new;
17              
18 2         3439 foreach my $d ($self->knowledge_set->documents) {
19 8         385 $m->add_instance(attributes => $d->features->as_hash,
20             label => [ map $_->name, $d->categories ]);
21             }
22 2         121 $m->train;
23             }
24              
25             sub get_scores {
26 9     9 0 15 my ($self, $newdoc) = @_;
27              
28 9         34 return ($self->{model}->predict( attributes => $newdoc->features->as_hash ),
29             $self->{threshold});
30             }
31              
32             sub threshold {
33 0     0 1 0 my $self = shift;
34 0 0       0 $self->{threshold} = shift if @_;
35 0         0 return $self->{threshold};
36             }
37              
38             sub save_state {
39 1     1 1 48 my $self = shift;
40 1         4 local $self->{knowledge_set}; # Don't need the knowledge_set to categorize
41 1         14 $self->SUPER::save_state(@_);
42             }
43              
44             sub categories {
45 3     3 0 5 my $self = shift;
46 3         14 return map AI::Categorizer::Category->by_name( name => $_ ), $self->{model}->labels;
47             }
48              
49             1;
50              
51             __END__