AI-Classifier
view release on metacpan or search on metacpan
},
"prereqs" : {
"configure" : {
"requires" : {
"ExtUtils::MakeMaker" : "6.30"
}
},
"develop" : {
"requires" : {
"Pod::Coverage::TrustPod" : "0",
"Test::Pod" : "1.41",
"Test::Pod::Coverage" : "1.08"
}
},
"runtime" : {
"requires" : {
"AI::NaiveBayes" : "0.01",
"AI::NaiveBayes::Learner" : "0",
"Carp" : "0",
"File::Find::Rule" : "0.32",
"File::Spec" : "0",
"List::Util" : "0",
"MooseX::Storage" : "0.25",
"Text::WordCounter" : "0",
"perl" : "5.010",
"strict" : "0",
"warnings" : "0"
}
},
"test" : {
"requires" : {
"Data::Dumper" : "0",
"Test::More" : "0"
}
}
},
"release_status" : "stable",
"resources" : {
"repository" : {
"type" : "git",
"web" : "http://github.com/operasoftware/AI-Classifier"
}
},
---
abstract: 'A convenient class for text classification'
author:
- 'Zbigniew Lukasiak <zlukasiak@opera.com>, Tadeusz SoÅnierz <tsosnierz@opera.com>'
build_requires:
Data::Dumper: 0
Test::More: 0
configure_requires:
ExtUtils::MakeMaker: 6.30
dynamic_config: 0
generated_by: 'Dist::Zilla version 4.300028, CPAN::Meta::Converter version 2.120921'
license: perl
meta-spec:
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: 1.4
name: AI-Classifier
no_index:
Makefile.PL view on Meta::CPAN
use ExtUtils::MakeMaker 6.30;
my %WriteMakefileArgs = (
"ABSTRACT" => "A convenient class for text classification",
"AUTHOR" => "Zbigniew Lukasiak <zlukasiak\@opera.com>, Tadeusz So\305\233nierz <tsosnierz\@opera.com>",
"BUILD_REQUIRES" => {
"Data::Dumper" => 0,
"Test::More" => 0
},
"CONFIGURE_REQUIRES" => {
"ExtUtils::MakeMaker" => "6.30"
},
"DISTNAME" => "AI-Classifier",
"EXE_FILES" => [],
"LICENSE" => "perl",
"NAME" => "AI::Classifier",
"PREREQ_PM" => {
"AI::NaiveBayes" => "0.01",
copyright_holder = Opera Software ASA
copyright_year = 2012
version = 0.03
[@Basic]
[AutoPrereqs]
[Prereqs]
Moose = 1.15
MooseX::Storage = 0.25
File::Find::Rule = 0.32
AI::NaiveBayes = 0.01
[TestRelease]
[PkgVersion]
[MetaNoIndex]
directory = t/lib
directory = examples
[InstallGuide]
[MetaJSON]
[MetaResources]
repository.web = http://github.com/operasoftware/AI-Classifier
repository.type = git
[NextRelease]
format = %-9v %{yyyy-MM-dd}d
[CheckChangeLog]
[PodSyntaxTests]
[PodCoverageTests]
[PodWeaver]
t/file_reader.t view on Meta::CPAN
use strict;
use warnings;
use Test::More;
use AI::Classifier::Text::FileLearner;
use File::Spec;
use Data::Dumper;
{
my $iterator = AI::Classifier::Text::FileLearner->new(
training_dir => File::Spec->catdir( qw( something something else ) )
);
is(
$iterator->get_category( File::Spec->catdir( qw( something something else aaa bbb ) ) ),
t/file_reader.t view on Meta::CPAN
'file' => File::Spec->catfile( qw( t data training_initial_features ham 1 ) ),
'categories' => [ 'ham' ],
features => { trala => 1, some_tag => 3, NO_URLS => 2 }
},
};
is_deeply( \%hash, $target );
}
{
{
package TestLearner;
sub new { bless { examples => [] } };
sub add_example {
my ( $self, @example ) = @_;
push @{ $self->{examples} }, \@example;
}
}
my $internal_learner = TestLearner->new();
my $learner = AI::Classifier::Text::FileLearner->new(
training_dir => File::Spec->catdir( @training_dirs ),
learner => $internal_learner
);
$learner->teach_it;
my $weights;
if( $internal_learner->{examples}[0][1]{aaaa} ){
$weights = $internal_learner->{examples}[1][1];
}
else{
$weights = $internal_learner->{examples}[0][1];
}
ok( abs( $weights->{ccccc} - 0.44 ) < 0.01
and
abs( $weights->{NO_URLS} - 0.9 ) < 0.01 )
or warn Dumper( $weights );
$internal_learner = TestLearner->new();
$learner = AI::Classifier::Text::FileLearner->new(
training_dir => File::Spec->catdir( @training_dirs ),
learner => $internal_learner,
term_weighting => 'n',
);
$learner->teach_it;
if( $internal_learner->{examples}[0][1]{aaaa} ){
$weights = $internal_learner->{examples}[1][1];
}
else{
t/release-pod-coverage.t view on Meta::CPAN
#!perl
BEGIN {
unless ($ENV{RELEASE_TESTING}) {
require Test::More;
Test::More::plan(skip_all => 'these tests are for release candidate testing');
}
}
use Test::More;
eval "use Test::Pod::Coverage 1.08";
plan skip_all => "Test::Pod::Coverage 1.08 required for testing POD coverage"
if $@;
eval "use Pod::Coverage::TrustPod";
plan skip_all => "Pod::Coverage::TrustPod required for testing POD coverage"
if $@;
all_pod_coverage_ok({ coverage_class => 'Pod::Coverage::TrustPod' });
t/release-pod-syntax.t view on Meta::CPAN
#!perl
BEGIN {
unless ($ENV{RELEASE_TESTING}) {
require Test::More;
Test::More::plan(skip_all => 'these tests are for release candidate testing');
}
}
use Test::More;
eval "use Test::Pod 1.41";
plan skip_all => "Test::Pod 1.41 required for testing POD" if $@;
all_pod_files_ok();
use strict;
use Test::More tests => 6;
use AI::Classifier::Text;
use AI::NaiveBayes::Learner;
use File::Spec;
ok(1); # If we made it this far, we're loaded.
my $lr = AI::NaiveBayes::Learner->new(purge => 0);
$lr->add_example(attributes => _hash(qw(sheep very valuable farming)),
labels => ['farming'] );
is $lr->examples, 1;
use strict;
use warnings;
use Test::More;
use AI::Classifier::Text::Analyzer;
my $analyzer = AI::Classifier::Text::Analyzer->new();
ok( $analyzer, 'Analyzer created' );
my $features = {};
$analyzer->analyze( 'aaaa http://www.example.com/bbb?xx=yy&bb=cc;dd=ff', $features );
is_deeply( $features, { aaaa => 1, 'example.com' => 1, MANY_URLS => 2 } );
( run in 0.531 second using v1.01-cache-2.11-cpan-4d50c553e7e )