File Coverage

blib/lib/Lingua/Stem/Da.pm
Criterion Covered Total %
statement 47 64 73.4
branch 11 26 42.3
condition 1 3 33.3
subroutine 8 10 80.0
pod 3 3 100.0
total 70 106 66.0


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