File Coverage

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