in reply to Re^2: Algorithm Showdown: Fuzzy Matching (Matcher.pm)
in thread Algorithm Showdown: Fuzzy Matching

This is one of the earlier proposals for solving the problem. It uses a brute for attack using Xor. Its quite simple.

package Fuzzy::Matcher::Xor; use strict; use warnings; use Fuzzy::Matcher; use vars qw/$VERSION @ISA/; @ISA=qw(Fuzzy::Matcher); $VERSION=0.01; # Original implementation by [BrowserUk] # modified to fit Fuzzy::Matcher interface by [demerphq] sub fuzz_search { my ($self,$seq)=@_; use bytes; my $FUZZY=$self->{fuzz}; my $length=$self->{strlen}; my $fuzz_strings=$self->{str_array}; my @matches; for my $offset ( 0 .. length( $seq ) - $length ) { my $ssref = \substr( $seq, $offset, $length ); for my $fuz ( @$fuzz_strings ) { my $m = $length - (( $fuz ^ $$ssref ) =~ tr[\0][\0]); if( $m <= $FUZZY ) { push @matches,$offset,$m,$fuz; } } } return \@matches } 1;
---
demerphq