File Coverage

blib/lib/Lingua/Stem/Pt.pm
Criterion Covered Total %
statement 45 62 72.5
branch 10 24 41.6
condition 1 3 33.3
subroutine 8 10 80.0
pod 3 3 100.0
total 67 102 65.6


line stmt bran cond sub pod time code
1             package Lingua::Stem::Pt;
2              
3             =head1 NAME
4              
5             Lingua::Stem::Pt - Stemming algorithm for Portuguese
6              
7             =head1 SYNOPSIS
8              
9             use Lingua::Stem::Pt;
10             my $stems = Lingua::Stem::Pt::stem({ -words => $word_list_reference,
11             -locale => 'pt',
12             -exceptions => $exceptions_hash,
13             });
14              
15             =head1 DESCRIPTION
16              
17             This routine applies a stemming slgorithm to a passed anon array of Portuguese words,
18             returning the stemmed words as an anon array.
19              
20             It is a 'convienence' wrapper for 'Lingua::Stemmer::PT' that provides
21             a standardized interface and caching.
22              
23             =head1 CHANGES
24              
25             2.30 2020.06.20 - Version renumber for module consistency
26              
27             1.01 2003.09.28 - Documenation fix
28              
29             1.00 2003.04.05 - Initial release
30              
31             =cut
32              
33             #######################################################################
34             # Initialization
35             #######################################################################
36              
37 1     1   7 use strict;
  1         1  
  1         63  
38 1     1   45 use warnings;
  1         3  
  1         33  
39              
40 1     1   538 use Lingua::PT::Stemmer;
  1         1997  
  1         38  
41              
42 1     1   8 use Exporter;
  1         1  
  1         48  
43 1     1   6 use Carp;
  1         4  
  1         55  
44 1     1   6 use vars qw (@ISA @EXPORT_OK @EXPORT %EXPORT_TAGS $VERSION);
  1         1  
  1         83  
45             BEGIN {
46 1     1   18 @ISA = qw (Exporter);
47 1         4 @EXPORT = ();
48 1         2 @EXPORT_OK = qw (stem clear_stem_cache stem_caching);
49 1         497 %EXPORT_TAGS = ();
50             }
51             $VERSION = "2.30";
52              
53             my $Stem_Caching = 0;
54             my $Stem_Cache = {};
55              
56             =head1 METHODS
57              
58             =cut
59              
60             #######################################################################
61              
62             =over 4
63              
64             =item stem({ -words => \@words, -locale => 'pt', -exceptions => \%exceptions });
65              
66             Stems a list of passed words using the rules of Portuguese. Returns
67             an anonymous array reference to the stemmed words.
68              
69             Example:
70              
71             my $stemmed_words = Lingua::Stem::Pt::stem({ -words => \@words,
72             -locale => 'pt',
73             -exceptions => \%exceptions,
74             });
75              
76             =back
77              
78             =cut
79              
80             sub stem {
81 1 50   1 1 3 return [] if ($#_ == -1);
82 1         1 my $parm_ref;
83 1 50       4 if (ref $_[0]) {
84 1         2 $parm_ref = shift;
85             } else {
86 0         0 $parm_ref = { @_ };
87             }
88            
89 1         1 my $words = [];
90 1         2 my $locale = 'pt';
91 1         1 my $exceptions = {};
92 1         4 foreach (keys %$parm_ref) {
93 3         5 my $key = lc ($_);
94 3 100       8 if ($key eq '-words') {
    100          
    50          
95 1         2 @$words = @{$parm_ref->{$key}};
  1         4  
96             } elsif ($key eq '-exceptions') {
97 1         3 $exceptions = $parm_ref->{$key};
98             } elsif ($key eq '-locale') {
99 1         3 $locale = $parm_ref->{$key};
100             } else {
101 0         0 croak (__PACKAGE__ . "::stem() - Unknown parameter '$key' with value '$parm_ref->{$key}'\n");
102             }
103             }
104            
105 1         2 local $_;
106 1         2 foreach (@$words) {
107              
108             # Check against exceptions list
109 5 50       12 if (exists $exceptions->{$_}) {
110 0         0 $_ = $exceptions->{$_};
111 0         0 next;
112             }
113              
114             # Check against cache of stemmed words
115 5         8 my $original_word = $_;
116 5 0 33     10 if ($Stem_Caching && exists $Stem_Cache->{$original_word}) {
117 0         0 $_ = $Stem_Cache->{$original_word};
118 0         0 next;
119             }
120 5         13 ($_) = Lingua::PT::Stemmer::stem("$_");
121 5 50       11751 $Stem_Cache->{$original_word} = $_ if $Stem_Caching;
122             }
123 1 50       7 $Stem_Cache = {} if ($Stem_Caching < 2);
124            
125 1         5 return $words;
126             }
127              
128             ##############################################################
129              
130             =over 4
131              
132             =item stem_caching({ -level => 0|1|2 });
133              
134             Sets the level of stem caching.
135              
136             '0' means 'no caching'. This is the default level.
137              
138             '1' means 'cache per run'. This caches stemming results during a single
139             call to 'stem'.
140              
141             '2' means 'cache indefinitely'. This caches stemming results until
142             either the process exits or the 'clear_stem_cache' method is called.
143              
144             =back
145              
146             =cut
147              
148             sub stem_caching {
149 0     0 1   my $parm_ref;
150 0 0         if (ref $_[0]) {
151 0           $parm_ref = shift;
152             } else {
153 0           $parm_ref = { @_ };
154             }
155 0           my $caching_level = $parm_ref->{-level};
156 0 0         if (defined $caching_level) {
157 0 0         if ($caching_level !~ m/^[012]$/) {
158 0           croak(__PACKAGE__ . "::stem_caching() - Legal values are '0','1' or '2'. '$caching_level' is not a legal value");
159             }
160 0           $Stem_Caching = $caching_level;
161             }
162 0           return $Stem_Caching;
163             }
164            
165             ##############################################################
166              
167             =over 4
168              
169             =item clear_stem_cache;
170              
171             Clears the cache of stemmed words
172              
173             =back
174              
175             =cut
176              
177             sub clear_stem_cache {
178 0     0 1   $Stem_Cache = {};
179             }
180              
181             ##############################################################
182              
183             =head1 NOTES
184              
185             This code is a wrapper around Lingua::Stem::Snowball::Pt written by
186             Ask Solem Hoel,
187              
188             =head1 SEE ALSO
189              
190             Lingua::Stem Lingua::PT::Stemmer;
191              
192             =head1 AUTHOR
193              
194             Integration in Lingua::Stem by
195             Jerilyn Franz, FreeRun Technologies,
196            
197              
198             =head1 COPYRIGHT
199              
200             Jerilyn Franz, FreeRun Technologies
201              
202             This code is freely available under the same terms as Perl.
203              
204             =head1 BUGS
205              
206             =head1 TODO
207              
208             =cut
209              
210             1;