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

needleman-js

v1.1.0

Published

Needleman-Wunsch algorithm in javascript

Downloads

21

Readme

Tests

Needleman-Wunsch algorithm

This project provides a simple implementation of the Needleman-Wunsch algorithm for searching strings in a pool while supporting errors in the needle.

Installation

Download the package and install it to your dependencies

npm install needleman-js

Usage

You can work with this class as is, with the default configuration:

const NeedlemanSearch = require('needleman-js');

const needleman = new NeedlemanSearch();

const pool = ["cat", "cats", "cut", "pig","dog", "elephant", "camel"]

const result = needleman.search("cat", pool);

Or you can tweak the different values:

  • indePenalty: The default is -1. This will be subtracted from the score for each space error on letters from the pool item.
  • missPenalty: The default is -2. This will be subtracted from the score for each miss on letters from the pool item.
  • matchReward: The default is +5. This will be added to the score for each letter matching the pool item.
  • scoringFn: The default compares a direct match. This provides how the scoring of an element is calculated for each pool item.
  • calcMinExpectedScore: The default calculates the (needle.length * this.matchReward) / 2.0;
const needleman = new NeedlemanSearch(
	indePenalty, 
	missPenalty, 
	matchReward, 
	scoringFn, 
	calcMinExpectedScore);

About the algorithm

This package is an implementation of Needleman-Wunsch algorithm. It is an algorithm developed in bioinformatics to align protein or nucleotide sequences. But it provides a fast and simple way of searching a needle in a pool of elements allowing some discordances:


const pool = ["cat", "cats", "cut", "pig","dog", "elephant", "camel"]

const resultCat = needleman.search("cat", pool); 
// { '8': [ 'cut' ], '14': [ 'cats' ], '15': [ 'cat' ] }
const resultCet = needleman.search("cet", pool); 
// { '8': [ 'cat', 'cut' ] }

The output will be an object with the matching score as keys and an array of the pool elements as values.

We can tweak the algorithm by setting three variables:

  • indePenalty: the scoring penalty when the matching elements are not aligned, i.e. there are some characters or spaces that will be required to match: the pair: (cat, cats) will require an element 's' to be inserted.
  • missPenalty: The scoring penalty when two elements do not match directly.
  • matchReward: How much points will be awarded when two elements match.

With these three variables we can build a matrix for all the scores that would have each element of the needle compared with each element of each iteration of the pool:

Sequence alignment

Authors

License

MIT