File Coverage

blib/lib/Lingua/ResourceAdequacy.pm
Criterion Covered Total %
statement 136 204 66.6
branch 20 30 66.6
condition 2 6 33.3
subroutine 26 37 70.2
pod 32 32 100.0
total 216 309 69.9


line stmt bran cond sub pod time code
1             package Lingua::ResourceAdequacy;
2              
3 6     6   125544 use strict;
  6         16  
  6         259  
4 6     6   32 use warnings;
  6         9  
  6         19735  
5              
6              
7             our $VERSION='0.1';
8              
9             sub new {
10 7     7 1 1317 my $class = shift;
11 7         27 my %arg = @_;
12              
13 7         14 my @word_list;
14             my @term_list;
15 0         0 my $word;
16 0         0 my @UP_list;
17 0         0 my @DUP_list;
18              
19 7 100       32 if (exists $arg{"word_list"}) {
20 5         11 @word_list = @{$arg{"word_list"}};
  5         17  
21             }
22 7 100       31 if (exists $arg{"term_list"}) {
23 4         6 @term_list = @{$arg{"term_list"}};
  4         14  
24             }
25              
26 7 100       37 if (exists $arg{"DUP_list"}) {
27 1         3 @DUP_list = @{$arg{"DUP_list"}};
  1         9  
28             }
29              
30 7 100       28 if (exists $arg{"UP_list"}) {
31 1         2 @UP_list = @{$arg{"UP_list"}};
  1         4  
32             }
33              
34 7         85 my $RA = {
35             "word_list" => \@word_list,
36             "term_list" => \@term_list,
37             "word_list_stats" => {},
38             "term_list_stats" => {},
39             "DecompUsefulPart" => \@DUP_list,
40             "UsefulPart" => \@UP_list,
41             "UsefulPart_stats" => {},
42             "DecompUsefulPart_stats" => {},
43             "AdequacyMeasures" => {},
44             };
45 7         22 bless $RA, $class;
46 7         27 return $RA;
47             }
48              
49             sub set_word_list {
50 1     1 1 802 my $self = shift;
51 1         2 my $word_list_ref = shift;
52 1         2 my @word_list;
53              
54 1 50       5 if (defined $word_list_ref) {
55 1         3 @word_list = @$word_list_ref;
56 1         6 $self->{"word_list"} = \@word_list;
57 1         5 return(scalar(@word_list));
58             } else {
59 0         0 return -1;
60             }
61              
62             }
63              
64             sub set_term_list {
65 1     1 1 420 my $self = shift;
66 1         3 my $term_list_ref = shift;
67 1         1 my @term_list;
68              
69 1 50       4 if (defined $term_list_ref) {
70 1         4 @term_list = @$term_list_ref;
71 1         3 $self->{"term_list"} = \@term_list;
72 1         4 return(scalar(@term_list));
73             } else {
74 0         0 return -1;
75             }
76              
77             }
78              
79             sub set_DUP_list {
80 2     2 1 784 my $self = shift;
81 2         4 my $DUP_list_ref = shift;
82 2         2 my @DUP_list;
83              
84 2 50       7 if (defined $DUP_list_ref) {
85 2         19 @DUP_list = @$DUP_list_ref;
86 2         14 $self->{"DecompUsefulPart"} = \@DUP_list;
87 2         6 return(scalar(@DUP_list));
88             } else {
89 0         0 return 0;
90             }
91              
92             }
93              
94             sub set_UP_list {
95 2     2 1 432 my $self = shift;
96 2         3 my $UP_list_ref = shift;
97 2         4 my @UP_list;
98              
99 2 50       18 if (defined $UP_list_ref) {
100 2         7 @UP_list = @$UP_list_ref;
101 2         5 $self->{"UsefulPart"} = \@UP_list;
102 2         6 return(scalar(@UP_list));
103             } else {
104 0         0 return 0;
105             }
106              
107             }
108              
109             sub word_list_stats {
110 3     3 1 507 my $self = shift;
111              
112            
113 3         36 $self->_list_stats("word_list");
114              
115             }
116              
117             sub term_list_stats {
118 3     3 1 1876 my $self = shift;
119              
120 3         22 $self->_list_stats("term_list");
121              
122             }
123              
124             sub print_word_list_stats {
125 0     0 1 0 my $self = shift;
126              
127 0         0 print STDERR "---\n";
128 0         0 print STDERR "Word list statistics:\n";
129 0         0 $self->_print_list_stats("word_list");
130 0         0 print STDERR "---\n";
131 0         0 print STDERR "\n";
132             }
133              
134             sub print_term_list_stats {
135 0     0 1 0 my $self = shift;
136              
137 0         0 print STDERR "---\n";
138 0         0 print STDERR "Term list statistics:\n";
139 0         0 $self->_print_list_stats("term_list");
140 0         0 print STDERR "---\n";
141 0         0 print STDERR "\n";
142              
143             }
144              
145             sub _average_Frequency {
146 12     12   18 my $self = shift;
147 12         19 my $field_name = $_[0];
148              
149 12         29 $self->{$field_name . "_stats"}->{'averageFreq'} = 0;
150 12         16 map { $self->{$field_name . "_stats"}->{'averageFreq'} += $_} values %{$self->{$field_name . "_stats"}->{'vocableFreq'}};
  24         58  
  12         35  
151              
152 12         60 $self->{$field_name . "_stats"}->{'averageFreq'} /= $self->{$field_name . "_stats"}->{'vocabularySize'};
153              
154             }
155              
156             sub _list_stats {
157 10     10   18 my $self = shift;
158 10         16 my $field_name = $_[0];
159            
160 10         12 my $vocable;
161              
162 10         14 $self->{$field_name . "_stats"}->{'listSize'} = scalar(@{$self->{$field_name}});
  10         52  
163            
164 10         16 foreach $vocable (@{$self->{$field_name}}) {
  10         25  
165 27         110 $self->{$field_name . "_stats"}->{'vocableFreq'}->{$vocable}++;
166             }
167              
168              
169              
170 10         23 $self->{$field_name . "_stats"}->{'vocabularySize'} = scalar(keys %{$self->{$field_name . "_stats"}->{'vocableFreq'}});
  10         41  
171              
172 10         28 $self->_average_Frequency($field_name);
173            
174             # map { $self->{$field_name . "_stats"}->{'averageFreq'} += $_} values %{$self->{$field_name . "_stats"}->{'vocableFreq'}};
175              
176             # $self->{$field_name . "_stats"}->{'averageFreq'} /= $self->{$field_name . "_stats"}->{'vocabularySize'};
177              
178             # print $self->{$field_name . "_stats"}->{'vocabularySize'};
179             # foreach $vocable (keys %{$self->{$field_name . "_stats"}->{'vocableFreq'}}) {
180            
181             # print "$vocable : " . $self->{$field_name . "_stats"}->{'vocableFreq'}->{$vocable} . "\n";
182             # }
183              
184             }
185              
186             sub get_Vocabulary_size {
187 4     4 1 721 my $self = shift;
188 4         8 my $field_name = shift;
189            
190 4 50       9 if (defined $field_name) {
191 4         27 return ($self->{$field_name . "_stats"}->{'vocabularySize'});
192             } else {
193 0         0 return(-1);
194             }
195             }
196              
197             sub get_List_size {
198 1     1 1 2 my $self = shift;
199 1         2 my $field_name = shift;
200            
201 1 50       3 if (defined $field_name) {
202 1         5 return ($self->{$field_name . "_stats"}->{'listSize'});
203             } else {
204 0         0 return(-1);
205             }
206             }
207              
208             sub get_Average_frequency {
209 2     2 1 3 my $self = shift;
210 2         3 my $field_name = shift;
211            
212 2 50       7 if (defined $field_name) {
213 2         11 return ($self->{$field_name . "_stats"}->{'averageFreq'});
214             } else {
215 0         0 return(-1);
216             }
217             }
218              
219             sub get_FrequencyLength {
220 1     1 1 2 my $self = shift;
221 1         2 my $field_name = shift;
222            
223 1 50 33     9 if ((defined $field_name) && (exists $self->{$field_name . "_stats"}->{'FreqLength'})) {
224 1         8 return ($self->{$field_name . "_stats"}->{'FreqLength'});
225             } else {
226 0         0 return(-1);
227             }
228             }
229              
230              
231              
232              
233             sub _print_list_stats {
234 0     0   0 my $self = shift;
235 0         0 my $field_name = $_[0];
236 0         0 my $vocable;
237              
238 0         0 print STDERR "List size: " . $self->get_List_size($field_name) . "\n";
239 0         0 print STDERR "Vocabulary size: " . $self->get_Vocabulary_size($field_name) . "\n";
240 0         0 print STDERR "Average frequency: " . $self->get_Average_frequency($field_name) . "\n";
241             # if (exists $self->{$field_name . "_stats"}->{'FreqLength'}) {
242 0         0 print STDERR "Frequency * Length: " . $self->get_FrequencyLength($field_name) . "\n";
243             # }
244              
245 0         0 print STDERR "Vocable : freqency\n";
246 0         0 foreach $vocable (keys %{$self->{$field_name . "_stats"}->{'vocableFreq'}}) {
  0         0  
247 0         0 print STDERR "\t$vocable : " . $self->{$field_name . "_stats"}->{'vocableFreq'}->{$vocable} . "\n";
248             }
249              
250             }
251              
252              
253             sub UP_list_stats {
254 2     2 1 289 my $self = shift;
255 2         5 my $vocable;
256             my $term;
257            
258 2         13 $self->_list_stats("UsefulPart");
259              
260 2         4 foreach $vocable (keys %{$self->{"UsefulPart_stats"}->{'vocableFreq'}}) {
  2         10  
261 4         14 foreach $term (keys %{$self->{"UsefulPart_stats"}->{'vocableFreq'}}) {
  4         14  
262 8 100       33 if (length($vocable) < length($term)) {
263 2 50 33     18 if ((length($vocable) > 0) && ($vocable ne $term)) {
264 2 50       56 if ($term =~ /\b$vocable\b/o) {
265 2         33 $self->{"UsefulPart_stats"}->{'vocableFreq'}->{$vocable} -= $self->{"UsefulPart_stats"}->{'vocableFreq'}->{$term};
266             }
267             }
268             }
269             }
270             }
271 2         8 $self->_average_Frequency("UsefulPart");
272              
273 2         4 my $term_components;
274             my @components;
275 2         4 my $freq_length = 0;
276            
277 2         5 foreach $term (keys %{$self->{"UsefulPart_stats"}->{'vocableFreq'}}) {
  2         7  
278             # print STDERR "$term\n";
279             # print STDERR $self->{"UsefulPart_stats"}->{'vocableFreq'}->{$term} . "\n";
280             # $term_components = $term;
281 4         19 @components = split /\s/, $term;
282             # print STDERR join(":", @components) . "\n";
283             # print STDERR scalar(@components) . "\n";
284 4         15 $freq_length += $self->{"UsefulPart_stats"}->{'vocableFreq'}->{$term} * scalar(@components);
285             # print STDERR "=> $freq_length\n";
286             }
287 2         10 $self->{"UsefulPart_stats"}->{'FreqLength'} = $freq_length;
288             }
289              
290             sub print_UP_list_stats {
291 0     0 1 0 my $self = shift;
292              
293 0         0 print STDERR "---\n";
294 0         0 print STDERR "Useful Part list statistics:\n";
295 0         0 $self->_print_list_stats("UsefulPart");
296 0         0 print STDERR "---\n";
297 0         0 print STDERR "\n";
298              
299             }
300              
301             sub DUP_list_stats {
302 2     2 1 258 my $self = shift;
303 2         1158 my $vocable;
304             my $term;
305            
306 2         10 $self->_list_stats("DecompUsefulPart");
307              
308              
309             }
310              
311             sub print_DUP_list_stats {
312 0     0 1 0 my $self = shift;
313              
314 0         0 print STDERR "---\n";
315 0         0 print STDERR "Decomposed Useful Part list statistics:\n";
316 0         0 $self->_print_list_stats("DecompUsefulPart");
317 0         0 print STDERR "---\n";
318 0         0 print STDERR "\n";
319              
320             }
321              
322             sub get_UP_VocabularySize {
323 1     1 1 2 my $self = shift;
324              
325 1         3 return($self->get_Vocabulary_size("UsefulPart"));
326              
327             }
328              
329             sub get_UP_ListSize {
330 0     0 1 0 my $self = shift;
331              
332 0         0 return($self->get_List_size("UsefulPart"));
333              
334             }
335              
336             sub get_UP_AverageFrequency {
337 0     0 1 0 my $self = shift;
338              
339 0         0 return($self->get_Average_frequency("UsefulPart"));
340              
341             }
342              
343             sub get_UP_FrequencyLength {
344 1     1 1 2 my $self = shift;
345              
346 1         4 return($self->get_FrequencyLength("UsefulPart"));
347              
348             }
349              
350             sub get_DUP_VocabularySize {
351 1     1 1 2 my $self = shift;
352              
353 1         3 return($self->get_Vocabulary_size("DecompUsefulPart"));
354              
355             }
356              
357             sub get_DUP_ListSize {
358 0     0 1 0 my $self = shift;
359              
360 0         0 return($self->get_List_size("DecompUsefulPart"));
361              
362             }
363              
364             sub get_DUP_AverageFrequency {
365 1     1 1 1 my $self = shift;
366              
367 1         4 return($self->get_Average_frequency("DecompUsefulPart"));
368              
369             }
370              
371             sub get_term_list_VocabularySize {
372 1     1 1 2 my $self = shift;
373              
374 1         2 return($self->get_Vocabulary_size("term_list"));
375              
376             }
377              
378             sub get_term_list_ListSize {
379 0     0 1 0 my $self = shift;
380              
381 0         0 return($self->get_List_size("term_list"));
382              
383             }
384              
385             sub get_term_list_AverageFrequency {
386 0     0 1 0 my $self = shift;
387              
388 0         0 return($self->get_Average_frequency("term_list"));
389              
390             }
391              
392             sub get_word_list_VocabularySize {
393 1     1 1 2 my $self = shift;
394              
395 1         3 return($self->get_Vocabulary_size("word_list"));
396              
397             }
398              
399             sub get_word_list_ListSize {
400 1     1 1 2 my $self = shift;
401              
402 1         3 return($self->get_List_size("word_list"));
403              
404             }
405              
406             sub get_word_list_AverageFrequency {
407 1     1 1 2 my $self = shift;
408              
409 1         2 return($self->get_Average_frequency("word_list"));
410              
411             }
412              
413              
414             sub AdequacyMeasures {
415 1     1 1 7 my $self = shift;
416              
417 1         4 $self->{"AdequacyMeasures"}->{"Contribution"} = $self->get_UP_VocabularySize / $self->get_term_list_VocabularySize;
418 1         4 $self->{"AdequacyMeasures"}->{"Excess"} = 1 - $self->{"AdequacyMeasures"}->{"Contribution"};
419              
420 1         4 $self->{"AdequacyMeasures"}->{"Recognition"} = $self->get_DUP_VocabularySize / $self->get_word_list_VocabularySize;
421 1         5 $self->{"AdequacyMeasures"}->{"Ignorance"} = 1 - $self->{"AdequacyMeasures"}->{"Recognition"};
422              
423 1         3 $self->{"AdequacyMeasures"}->{"Coverage"} = $self->get_UP_FrequencyLength / $self->get_word_list_ListSize;
424              
425 1         4 $self->{"AdequacyMeasures"}->{"Density"} = $self->get_DUP_AverageFrequency / $self->get_word_list_AverageFrequency;
426 1         3 return(0);
427             }
428              
429              
430             sub print_AdequacyMeasures {
431 0     0 1   my $self = shift;
432              
433 0           print STDERR "-----\n";
434 0           print STDERR "Adequacy Measures: \n";
435 0           print STDERR "\tContribution: " . $self->{"AdequacyMeasures"}->{"Contribution"} . "\n";
436 0           print STDERR "\tExcess: " . $self->{"AdequacyMeasures"}->{"Excess"} . "\n";
437 0           print STDERR "\t-----\n";
438 0           print STDERR "\tRecognition: " . $self->{"AdequacyMeasures"}->{"Recognition"} . "\n";
439 0           print STDERR "\tIgnorance: " . $self->{"AdequacyMeasures"}->{"Ignorance"} . "\n";
440 0           print STDERR "\t-----\n";
441 0           print STDERR "\tCoverage: " . $self->{"AdequacyMeasures"}->{"Coverage"} . "\n";
442 0           print STDERR "\tDensity: " . $self->{"AdequacyMeasures"}->{"Density"} . "\n";
443              
444 0           print STDERR "-----\n";
445             }
446              
447             1;
448              
449             __END__