def searchApproximate(s,edit)
if(edit==0 && !@useAmbiguity)
return searchExact(s)
end
allowederrors = edit
if(edit>=0)
useHamming = true
minmatchsize = s.length
maxmatchsize = s.length
updateCache(1,edit)
@matches = @cache.loadCache()
else
useHamming = false
edit = edit * (-1)
minmatchsize = s.length - edit
maxmatchsize = s.length + edit
updateCache(2,edit)
@matches = @cache.loadCache()
end
if(@matches.length>0)
return @matches
end
s = s.downcase
@pattern = Digest::MD5.hexdigest(s)
parseSuffixes(@sequence,minmatchsize,maxmatchsize,allowederrors,s)
return cache?(@matches) unless(method == METHOD_SUFFIX)
@suffixes.each do |md5val,posArray|
if(md5val == SUFFIXLEN)
next
end
if (md5val == @pattern)
filteredPosArray = filter(posArray)
match = Array[md5val, 0, filteredPosArray]
$log.debug "Match: " << match.inspect
@matches << match
else
if(posArray[0]>= minmatchsize && posArray[0] <= maxmatchsize)
seq = extractSuffix(posArray[1],posArray[0])
errors = isApproximateEqual?(seq,s,useHamming,edit)
if(errors>=0)
filteredPosArray = filter(posArray)
match = Array[md5val, errors, filteredPosArray]
$log.debug "Match: " << match.inspect
@matches << match
end
end
end
end
return cache?(@matches)
end