I have a list of about 1000 group names and I am running the adistr on them as the docs for the fuzzy string matching shows. How do I get only the top twenty results returned in order closest
sub get_fuzzy_match_groupnames( $ ) { my @result_array; my $self = shift; my $dbh = $self->{'dbh'}; my @possibleMatchName; #holds the groupname #name not found do approximate string lookup my $sqlQuery = "SELECT GroupID, GroupName FROM GROUPINFORMATION WHERE UserID = 0 "; my $query = $dbh->prepare( $sqlQuery ); $query->execute() || die $dbh->errstr; while( @result_array = $query->fetchrow_array ) { push( @possibleMatchName, $result_array[1] ); } my %d; @d{@possibleMatchName} = map { abs } adistr( $_[0], @possibleMatchN +ame ); my @d = sort { $d{$a} <=> $d{$b} } @possibleMatchName; if( length( @d ) > 20 ) { return @d[0..20]; } else { return @d; } }
In reply to Getiing A Smaller Fuzzy by Angel
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |