Sha256: d2445a74d47bc862253340487994c7c5315aa42b678fe8c5b34e2bbbff974827
Contents?: true
Size: 1.51 KB
Versions: 1
Compression:
Stored size: 1.51 KB
Contents
# encoding: utf-8 # module Generators module Similarity # It's actually a combination of double metaphone # and Levenshtein. # # It uses the double metaphone to get similar words # and ranks them using the levenshtein. # class Phonetic < Strategy attr_reader :amount # # def initialize amount = 10 raise "In Picky 2.0+, the Similarity::Phonetic has been renamed to Similarity::DoubleMetaphone. Please use that one. Thanks!" if self.class == Phonetic @amount = amount end # Generates an index for the given index (in exact index style). # # In the following form: # [:meier, :mueller, :peter, :pater] => { MR: [:meier], MLR: [:mueller], PTR: [:peter, :pater] } # def generate_from index hash = hashify index.keys sort hash end protected # Sorts the index values in place. # def sort index index.each_pair.each do |code, ary| ary.sort_by_levenshtein! code ary.slice! amount, ary.size # size is not perfectly correct, but anyway end index end # Hashifies a list of symbols. # # Where: # { encoded_sym => [syms] } # def hashify list list.inject({}) do |total, element| if code = encoded(element) total[code] ||= [] total[code] << element end total end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
picky-2.6.0 | lib/picky/generators/similarity/phonetic.rb |