npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

string_score

v0.1.22

Published

String Scoring Algorithm packaged for NodeJS

Downloads

6,255

Readme

What is it

  • Simple - Adds a .score() method to the JavaScript String object... "String".score("str");
  • Fast - fastest that I can find, often drastically faster... run the tests yourself
  • Small - We are talking (520 Bytes)
  • Portable - Works in 100% of the browsers I've tested on multiple platforms
  • Independent - Doesn't require any other JavaScript - should work with any framework.
  • Tested - Not everyone writes tests (silly people). Testing using Qunit
  • Proper - Passes jslint as well as meets the coding practices and principles of opinionated developers :-)
  • Fuzzyable - Optional parameter for fuzziness (allows mismatched info to still score the string)

See it in action

Check it out http://joshaven.com/string_score

Installation Notes

Simply include one of the string score JavaScript files and call the .score() method on any string.

NodeJS Installation

npm install --save string_score
require("string_score");

Thats it! It will automatically add a .score() method to all JavaScript String object... "String".score("str");

Examples

(results are for example only... I may change the scoring algorithm without updating examples)

"hello world".score("axl") //=> 0
"hello world".score("ow")  //=> 0.35454545454545455

"hello world".score("e")           //=>0.1090909090909091 (single letter match)
"hello world".score("h")           //=>0.5363636363636364 (single letter match plus bonuses for beginning of word and beginning of phrase)
"hello world".score("he")          //=>0.5727272727272728
"hello world".score("hel")         //=>0.6090909090909091
"hello world".score("hell")        //=>0.6454545454545455
"hello world".score("hello")       //=>0.6818181818181818
...
"hello world".score("hello worl")  //=>0.8636363636363635
"hello world".score("hello world") //=> 1

// And then there is fuzziness
"hello world".score("hello wor1")  //=>0  (the "1" in place of the "l" makes a mismatch)
"hello world".score("hello wor1",0.5)  //=>0.6081818181818182 (fuzzy)

// Considers string length
'Hello'.score('h') //=>0.52
'He'.score('h')    //=>0.6249999999999999  (better match becaus string length is closer)

// Same case matches better than wrong case
'Hello'.score('h') //=>0.52
'Hello'.score('H') //=>0.5800000000000001

// Acronyms are given a little more weight
"Hillsdale Michigan".score("HiMi") > "Hillsdale Michigan".score("Hills")
"Hillsdale Michigan".score("HiMi") < "Hillsdale Michigan".score("Hillsd")

Tested And Operational Under these environments

Fully functional in the 100% of the tested browsers:

  • Firefox 3 & Newer (Mac & Windows)
  • Safari 4 & Newer (Mac & Windows)
  • IE: 7 & Newer (Windows) **
  • Chrome: 2 & Newer (Windows)
  • Opera: 9.64 & Newer (Windows)

** IE 7 fails (stop running this script message) with 4000 iterations of the benchmark test. All other browsers tested survived this test, and in fact survive a larger number of iterations. The benchmark that is causing IE to choke is: 4000 iterations of 446 character string scoring a 70 character match.

Benchmarks

This is the fastest and smallest javascript string scoring plugin that I am aware of. I have taken great joy in squeezing every millisecond I can out of this script. If you are aware of any ways to improve this script, please let me know.

string_score.js is faster and smaller and does more than either liquidmetal.js or quicksilver.js

The test: 4000 iterations of 446 character string scoring a 70-character match

  • string_score.js:
    • Firefox 3.6 (805ms)
    • Firefox 4 (245ms)
    • Chrome 9 (268ms)
    • Safari 5 (259ms)
  • liquidmetal.js:
    • Firefox 3.6 (1578ms)
    • Firefox 4 (853ms)
    • Chrome 9 (339ms)
    • Safari 5 (996ms)
  • quicksilver.js:
    • Firefox 3.6 (3300ms)
    • Firefox 4 (1994ms)
    • Chrome 9 (2835ms)
    • Safari 5 (3252ms)
  • fuzzy_string.js
    • Firefox 4 (OUCH! I am not sure it heats up my laptop and asks if I want to stop the script... fuzzy_string, nice idea but it doesn't like large strings matches.)

** Tests run with jQuery 1.5 on Mac Book Pro 2.4GHz Core 2 Duo running Snow Leopard *** quicksilver & string_score both use the same test file because they are used in the same way, LiquidMetal has to be called differently so the test file was modified to work with the LiquidMetal Syntax.

Ports

Please notify me of any ports so I can have them listed here. Please also keep track of the string score version that you have ported from. For example, in your readme include a note like: ported from version 0.2

Notes

string_score.js does not have any external dependencies other than a reasonably new browser.

The tests located in the tests folder rely on the files located in the tests folder.

Please share your testing results with me if you are able to test under an unlisted browser.

Credits

Author Joshaven Potter

Thank you Lachie Cox and Quicksilver for inspiration.

Special thanks to all who contribute... and if you're not listed here please email me. ##Contributors Yesudeep Mangalapilly - Collaborator Eric Celeste Matt Duncan Bruno Lara Tavares

License

Licensed under the MIT license.