Skip to content
/ fzy Public

A Crystal port of awesome Fzy project, a fuzzy finder algorithm.

License

Notifications You must be signed in to change notification settings

hugopl/fzy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

fzy.cr

Build Status

A Crystal port of awesome Fzy fuzzy finder algorithm.

Installation

  1. Add the dependency to your shard.yml:
dependencies:
  fzy:
    github: hugopl/fzy
  1. Run shards install

Usage

Basic usage:

require "fzy"

matches = Fzy.search("hey", %w(Hey Whatever Halley), store_positions: true)
matches.each do |match|
  puts "value: #{match.item}"
  puts "score: #{match.score}"
  puts "  pos: #{match.positions.inspect}"
end

Should print

value: Hey
score: Infinity
  pos: [0, 1, 2]
value: Halley
score: 1.87
  pos: [0, 4, 5]

If you need to do many searches on the same set of data you can speed up things by creating an Fzy::PreparedHaystack or an array of Fzy::Hay.

require "fzy"

haystack = %w(Hey Halley Whatever)
prepared_haystack = Fzy::PreparedHaystack.new(haystack)
matches = Fzy.search("hey", prepared_haystack)
matches.each do |match|
  puts "value: #{match.item}"
  puts "score: #{match.score}"
  puts "  pos: #{match.positions.inspect}"
end

# Reusing the prepared haystack makes the search faster.
matches = Fzy.search("ho let's go!", prepared_haystack)

Contributing

  1. Fork it (https://github.com/hugopl/fzy/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors