_remove_stopwords in C4::Search had some issues
For some reason, it would not really do an exact match on stopwords but would also prune some other part of words Signed-off-by: Galen Charlton <gmcharlt@gmail.com> Signed-off-by: Henri-Damien LAURENT <henridamien.laurent@biblibre.com>
This commit is contained in:
parent
dc8935a170
commit
df024e89d6
23
C4/Search.pm
23
C4/Search.pm
|
|
@ -633,19 +633,16 @@ sub _remove_stopwords {
|
|||
# we use IsAlpha unicode definition, to deal correctly with diacritics.
|
||||
# otherwise, a French word like "leçon" woudl be split into "le" "çon", "le"
|
||||
# is a stopword, we'd get "çon" and wouldn't find anything...
|
||||
foreach ( keys %{ C4::Context->stopwords } ) {
|
||||
next if ( $_ =~ /(and|or|not)/ ); # don't remove operators
|
||||
if ( $operand =~
|
||||
/(\P{IsAlpha}$_\P{IsAlpha}|^$_\P{IsAlpha}|\P{IsAlpha}$_$|^$_$)/ )
|
||||
{
|
||||
$operand =~ s/\P{IsAlpha}$_\P{IsAlpha}/ /gi;
|
||||
$operand =~ s/^$_\P{IsAlpha}/ /gi;
|
||||
$operand =~ s/\P{IsAlpha}$_$/ /gi;
|
||||
$operand =~ s/$1//gi;
|
||||
push @stopwords_removed, $_;
|
||||
}
|
||||
}
|
||||
}
|
||||
foreach ( keys %{ C4::Context->stopwords } ) {
|
||||
next if ( $_ =~ /(and|or|not)/ ); # don't remove operators
|
||||
if ( my ($matched) = ($operand =~
|
||||
/(\P{IsAlnum}\Q$_\E\P{IsAlnum}|^\Q$_\E\P{IsAlnum}|\P{IsAlnum}\Q$_\E$|^\Q$_\E$)/gi) )
|
||||
{
|
||||
$operand =~ s/\Q$matched\E/ /gi;
|
||||
push @stopwords_removed, $_;
|
||||
}
|
||||
}
|
||||
}
|
||||
return ( $operand, \@stopwords_removed );
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue