File Coverage

blib/lib/Plucene/Plugin/Analyzer/MetaphoneAnalyzer.pm
Criterion Covered Total %
statement 20 20 100.0
branch n/a
condition n/a
subroutine 7 7 100.0
pod 1 1 100.0
total 28 28 100.0


line stmt bran cond sub pod time code
1             package Plucene::Plugin::Analyzer::MetaphoneAnalyzer;
2            
3 1     1   41751 use base 'Plucene::Analysis::Analyzer';
  1         1  
  1         1006  
4 1     1   203 use 5.006;
  1         4  
  1         39  
5 1     1   5 use strict;
  1         6  
  1         28  
6 1     1   5 use warnings;
  1         2  
  1         38  
7             our $VERSION = '1.02';
8 1     1   1004 use Plucene::Analysis::Standard::StandardTokenizer;
  1         48768  
  1         21  
9 1     1   852 use Plucene::Plugin::Analyzer::MetaphoneFilter;
  1         5  
  1         15  
10            
11             our $LANG = 'en';
12            
13             =head1 NAME
14            
15             Plucene::Plugin::Analyzer::MetaphoneAnalyzer - Metaphone analyzer
16            
17             =head1 DESCRIPTION
18            
19             Filters StandardTokenizer with MetaphoneFilter
20            
21             =head1 EXAMPLE
22            
23             #!/usr/bin/perl
24            
25             use strict;
26             use Plucene;
27             use Plucene::Index::Writer;
28             use Plucene::Plugin::Analyzer::MetaphoneAnalyzer;
29             use Plucene::Search::IndexSearcher;
30             use Plucene::QueryParser;
31            
32             my $db = "plucene_index";
33            
34             my $writer = Plucene::Index::Writer->new($db, Plucene::Plugin::Analyzer::MetaphoneAnalyzer->new(), 1);
35            
36             $doc = Plucene::Document->new();
37             $doc->add(Plucene::Document::Field->Keyword(filename => 'test2.html'));
38             $doc->add(Plucene::Document::Field->Text(title => 'Another file title'));
39             $doc->add(Plucene::Document::Field->UnStored(content => 'Nothing HERE.'));
40             $writer->add_document($doc);
41            
42             $writer->optimize;
43            
44             my $searcher = Plucene::Search::IndexSearcher->new($db);
45             my $parser = Plucene::QueryParser->new({
46             analyzer => Plucene::Plugin::Analyzer::MetaphoneAnalyzer->new(),
47             default => 'content',
48             });
49             my $parsed = $parser->parse("nothink");
50            
51             my @docs;
52             my $hc = Plucene::Search::HitCollector->new(
53             collect => sub {
54             my ($self, $doc, $score) = @_;
55             my $res = eval { $searcher->doc($doc); };
56             push @docs, $res if res;
57             },
58             );
59            
60             $searcher->search_hc($parsed, $hc);
61             my @results = map {{
62             filename => $_->get('filename')->string,
63             title => $_->get('title')->string,
64             }} @docs;
65            
66             print "Results:\n";
67             foreach my $result (@results) {
68             print "\t$result->{title} ($result->{filename})\n";
69             }
70            
71             =cut
72            
73             sub tokenstream {
74 1     1 1 234 my $self = shift;
75            
76 1         24 return Plucene::Plugin::Analyzer::MetaphoneFilter->new({
77             input => Plucene::Analysis::Standard::StandardTokenizer->new(@_)
78             });
79             }
80            
81             =head1 AUTHOR
82            
83             Alan Schwartz C
84            
85             =head1 LICENSE
86            
87             You may distribute this code under the same terms as Plucene himself.