liquidmetal
v1.3.0
Published
A mimetic poly-alloy of the Quicksilver scoring algorithm, essentially LiquidMetal. `</Schwarzenegger Voice>`
Downloads
236
Readme
LiquidMetal
A mimetic poly-alloy of the Quicksilver scoring algorithm, essentially
LiquidMetal. </Schwarzenegger Voice>
Flex matching short abbreviations against longer strings is a boon in productivity for typists. Applications like Quicksilver, Alfred, LaunchBar, and Launchy have made this method of keyboard entry a popular one. It's time to bring this same functionality to web controls. LiquidMetal makes scoring long strings against abbreviations easy.
How You Can Help
If you like this project, buy me a coffee, donate via Gratipay, or book a session with me on Codementor.
Bitcoin: 1rmm5tv6f997JK5bLcGbRCZyVjZUPkQ2m
Usage
Include the library:
<script src="liquidmetal.js" type="text/javascript"></script>
Score any string against an abbreviation:
LiquidMetal.score("FooBar", "foo") //=> 0.950
LiquidMetal.score("FooBar", "fb") //=> 0.917
LiquidMetal.score("Foo Bar", "fb") //=> 0.929
LiquidMetal.score("Foo Bar", "baz") //=> 0.0
LiquidMetal.score("Foo Bar", "") //=> 0.8
All scores fall between a range of 0.0 (no match) to 1.0 (perfect match).
Inspired By
- Quicksilver and its scoreForAbbreviation algorithm by Alcor
- Quicksilver.js by Lachie Cox
Why?
- To satisfy my own requirements for the jquery.flexselect plugin
- The Quicksilver algorithm doesn't give proper weight to abbreviations that match the first character of the scored string.
- The Quicksilver algorithm is extremely slow for certain length string/abbreviation combinations because of its use of recursion. While slightly slower for shorter length string/abbreviation combinations, LiquidMetal outperforms the Quicksilver algorithm by orders of magnitude under other conditions.
- The javascript version of the Quicksilver algorithm (Quicksilver.js) is case sensitive and doesn't give added weight to camel case strings; whereas, LiquidMetal is case insensitive and does give added weight to uppercase letters in camel case strings.
Todo
- More tests
- Consider tweaking the scores for "trailing" characters
- Improve implementation of highest score matching (LiquidMetal currently returns the highest scoring match for an abbreviation, but is inefficient)
- See if it's possible to tune the performance further
Author
Other
Copyright (c) 2009-2014, Ryan McGeary (ryan -[at]- mcgeary [dot] org)