File Coverage

blib/lib/Lingua/Stem/Snowball/Lt.pm
Criterion Covered Total %
statement 35 42 83.3
branch 8 14 57.1
condition 3 6 50.0
subroutine 9 9 100.0
pod 3 3 100.0
total 58 74 78.3


line stmt bran cond sub pod time code
1             package Lingua::Stem::Snowball::Lt;
2 3     3   104278 use strict;
  3         10  
  3         715  
3 3     3   17 use warnings;
  3         6  
  3         128  
4 3     3   89 use 5.006002;
  3         17  
  3         235  
5              
6 3     3   16 use Carp;
  3         6  
  3         420  
7 3     3   15 use Exporter;
  3         4  
  3         154  
8 3         1987 use vars qw(
9             $VERSION
10             @ISA
11             @EXPORT_OK
12             $AUTOLOAD
13             %EXPORT_TAGS
14             $stemmifier
15             %instance_vars
16 3     3   15 );
  3         5  
17              
18             $VERSION = '0.03';
19              
20             @ISA = qw( Exporter DynaLoader );
21             %EXPORT_TAGS = ( 'all' => [qw( stem )] );
22             @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
23              
24             require DynaLoader;
25             __PACKAGE__->bootstrap($VERSION);
26              
27             # Ensure that C symbols are exported so that other shared libaries (e.g.
28             # KinoSearch) can use them. See Dynaloader docs.
29 3     3 1 1256 sub dl_load_flags {0x01}
30              
31             # A shared home for the actual struct sb_stemmer C modules.
32             $stemmifier = Lingua::Stem::Snowball::Lt::Stemmifier->new;
33              
34             %instance_vars = (
35             lang => 'lt',
36             encoding => 'UTF-8',
37             locale => undef,
38             stemmer_id => -1,
39             strip_apostrophes => 0,
40             );
41              
42             sub new {
43 65     65 1 1288 my $class = shift;
44 65   33     661 my $self = bless { %instance_vars, @_ }, ref($class) || $class;
45              
46             # Get an sb_stemmer.
47 65         428 $self->_derive_stemmer;
48              
49 65         142 return $self;
50             }
51              
52             sub stem {
53 183     183 1 145674 my ( $self, $words, $locale, $is_stemmed );
54              
55             # Support lots of DWIMmery.
56 183 100       941 if ( UNIVERSAL::isa( $_[0], 'HASH' ) ) {
57 122         302 ( $self, $words, $is_stemmed ) = @_;
58             }
59             else {
60 61         168 ( $words, $locale, $is_stemmed ) = @_;
61 61         182 $self = __PACKAGE__->new( );
62             }
63              
64             # Bail if there's no input.
65 183 50 66     899 return undef unless ( ref($words) or length($words) );
66              
67             # Duplicate the input array and transform it into an array of stems.
68 183 100       581 $words = ref($words) ? $words : [$words];
69 183         337 my @stems = map {lc} @$words;
  360         1350  
70 183         1483 $self->stem_in_place( \@stems );
71              
72             # Determine whether any stemming took place, if requested.
73 183 50       412 if ( ref($is_stemmed) ) {
74 0         0 $$is_stemmed = 0;
75 0 0       0 if ( $self->{stemmer_id} == -1 ) {
76 0         0 $$is_stemmed = 1;
77             }
78             else {
79 0         0 for ( 0 .. $#stems ) {
80 0 0       0 next if $stems[$_] eq $words->[$_];
81 0         0 $$is_stemmed = 1;
82 0         0 last;
83             }
84             }
85             }
86              
87 183 100       960 return wantarray ? @stems : $stems[0];
88             }
89              
90             1;
91              
92             __END__