Lou Vanek wrote: > this was discussed on both this ML and the Rails ML about a week ago. The > threads have the word 'fuzzy' in the subject. > > TomRossi7 wrote: > >> How would you recommend implementing something like a fuzzy search with >> Ruby and a SQL database. For example, I want to search a field in a >> table for anything that is similar to "Frank Smithe". I would want an >> array of matches with some sort of score telling me how good of a match >> the item received ("frank smithe" 100%, "frank smith" 90%). >> >> Am I making sense? Is there a third party app I would need? >> >> Thanks, >> Tom >> >> >> > > > I needed to do something similar with my office database. I used the Levenshtein distance. The routine was also quite useful in finding name differences between my office data base and the billing company's. #------------------------------------------------------ # Determine Levenshtein distance of two strings def Ld(s,t) #s string #1 #t string #2 n = s.size m = t.size a = Array.new if n != 0 && m != 0 #2 create array r = Array.new rz = Array.new 0.upto(m) {|x| r.push(0)} 0.upto(n) {|x|a.push(r.dup)} a.each_index {|x| a[x][0] = x} 0.upto(m) {|x| a[0][x] = x} cost = 0 1.upto(n) do |i| 1.upto(m) do |j| if s[i] == t[j] cost =0 else cost = 1 end a[i][j] = [a[ i- 1][j] +1,a[i][j - 1] + 1,a[i - 1][j - 1] + cost].min end end a[n][m] else 0 end end