1 package OpenILS::Application::Search;
2 use base qw/OpenSRF::Application/;
3 use strict; use warnings;
5 use OpenSRF::Utils::Logger qw(:logger);
7 use OpenILS::Utils::Fieldmapper;
8 use OpenILS::Utils::ModsParser;
9 use OpenSRF::Utils::SettingsClient;
10 use OpenSRF::Utils::Cache;
13 #use OpenILS::Application::Search::StaffClient;
14 use OpenILS::Application::Search::Biblio;
15 use OpenILS::Application::Search::Authority;
16 use OpenILS::Application::Search::Actor;
17 use OpenILS::Application::Search::Z3950;
20 use OpenILS::Application::AppUtils;
22 use Time::HiRes qw(time);
23 use OpenSRF::EX qw(:try);
25 use Text::Aspell; # spell checking...
28 # Houses generic search utilites
31 OpenILS::Application::Search::Z3950->initialize();
33 # try to load the added content handler
34 my $conf = OpenSRF::Utils::SettingsClient->new;
35 my $implementation = $conf->config_value(
36 "apps", "open-ils.search","app_settings", "added_content", "implementation" );
39 eval "use $implementation";
41 $logger->error("Unable to load Added Content handler: $@");
44 $implementation->initialize();
46 } else { #if none is defined, use the default which returns empty sets
47 eval "use OpenILS::Application::Search::AddedContent";
52 my($self, $str, $full) = @_;
56 $string =~ s/\s+the\s+/ /oi;
57 $string =~ s/\s+an\s+/ /oi;
58 $string =~ s/\s+a\s+/ /oi;
60 $string =~ s/^the\s+//io;
61 $string =~ s/^an\s+//io;
62 $string =~ s/^a\s+//io;
64 $string =~ s/\s+the$//io;
65 $string =~ s/\s+an$//io;
66 $string =~ s/\s+a$//io;
68 $string =~ s/^the$//io;
69 $string =~ s/^an$//io;
74 if($string =~ /^\s*$/o) {
104 push @words, "united state";
106 for my $word (@words) {
107 if($string =~ /^\s*"?\s*$word\w*\s*"?\s*$/i) {
112 warn "Cleansed string to: $string\n";
113 if($string =~ /^\s*$/o) {
123 __PACKAGE__->register_method(
124 method => "check_spelling",
125 api_name => "open-ils.search.spell_check");
128 my( $self, $client, $phrase ) = @_;
130 my @resp_objects = ();
131 my $speller = Text::Aspell->new();
132 $speller->set_option('lang', 'en_US');
133 my $return_something = 0;
135 my $return_phrase = "";
137 for my $word (split(' ',$phrase) ) {
138 if( ! $speller->check($word) ) {
139 if( $speller->suggest($word) ) { $return_something = 1; }
140 # $return_something = 1;
142 $word_stuff->{'word'} = $word;
143 $word_stuff->{'suggestions'} = [ $speller->suggest( $word ) ];
144 if( ! $return_phrase ) { $return_phrase = ($speller->suggest($word))[0]; }
145 else { $return_phrase .= " " . ($speller->suggest($word))[0];}
148 if( ! $return_phrase ) { $return_phrase = $word; }
149 else { $return_phrase .= " $word"; }
153 if( $return_something ) { return $return_phrase; }