# string-similarity

> Finds degree of similarity between strings, based on Dice's Coefficient, which is mostly better than Levenshtein distance.

Latest version **4.0.4** (published 2021-01-06) · ISC license · 0 weekly downloads

> **Deprecated.** This package is deprecated.

## Install

```sh
npm install string-similarity
pnpm add string-similarity
yarn add string-similarity
bun add string-similarity
```

## Health

**Score 10/100 (F)** — status: deprecated.

Negative: deprecated.

## Facts

| | |
|---|---|
| Version | 4.0.4 |
| Published | 2021-01-06 |
| First published | 2014-11-27 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | separate (@types/string-similarity) |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 10.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 2530 |
| Author | Akash Kurdekar |
| Maintainers | aceakash |
| Keywords | strings, similar, difference, similarity, compare, comparison, degree, match, matching, dice, levenshtein |

## Links

- npm: https://www.npmjs.com/package/string-similarity
- Repository: https://github.com/aceakash/string-similarity
- Homepage: https://github.com/aceakash/string-similarity#readme
- Issues: https://github.com/aceakash/string-similarity/issues
- npm.io page: https://npm.io/package/string-similarity

## Alternatives

- [@mce/gif](https://npm.io/package/@mce/gif.md) — 2.6K weekly downloads
- [cleanse](https://npm.io/package/cleanse.md) — 173 weekly downloads
- [str](https://npm.io/package/str.md) — 127 weekly downloads
- [naming](https://npm.io/package/naming.md) — 95 weekly downloads
- [tap-telco-api](https://npm.io/package/tap-telco-api.md) — 19 weekly downloads

## Recent versions

- 4.0.4 (latest) — 2021-01-06
- 4.0.3 — 2020-11-09
- 4.0.2 — 2020-08-03
- 4.0.1 — 2020-01-02
- 4.0.0 — 2020-01-02
- 3.0.0 — 2018-11-29
- 2.0.0 — 2018-10-02
- 1.2.2 — 2018-09-12
- 1.2.1 — 2018-08-23
- 1.2.0 — 2017-05-22
- 1.1.0 — 2016-06-06
- 1.0.0 — 2014-11-27

## README

# string-similarity

Finds degree of similarity between two strings, based on [Dice's Coefficient](http://en.wikipedia.org/wiki/S%C3%B8rensen%E2%80%93Dice_coefficient), which is mostly better than [Levenshtein distance](http://en.wikipedia.org/wiki/Levenshtein_distance).

## Table of Contents

- [string-similarity](#string-similarity)
  - [Table of Contents](#table-of-contents)
  - [Usage](#usage)
    - [For Node.js](#for-nodejs)
    - [For browser apps](#for-browser-apps)
  - [API](#api)
    - [compareTwoStrings(string1, string2)](#comparetwostringsstring1-string2)
      - [Arguments](#arguments)
      - [Returns](#returns)
      - [Examples](#examples)
    - [findBestMatch(mainString, targetStrings)](#findbestmatchmainstring-targetstrings)
      - [Arguments](#arguments-1)
      - [Returns](#returns-1)
      - [Examples](#examples-1)
  - [Release Notes](#release-notes)
    - [2.0.0](#200)
    - [3.0.0](#300)
    - [3.0.1](#301)
    - [4.0.1](#401)
    - [4.0.2](#402)
    - [4.0.3](#403)

## Usage

#### For Node.js

Install using:

```shell
npm install string-similarity --save
```

In your code:

```javascript
var stringSimilarity = require("string-similarity");

var similarity = stringSimilarity.compareTwoStrings("healed", "sealed");

var matches = stringSimilarity.findBestMatch("healed", [
  "edward",
  "sealed",
  "theatre",
]);
```

#### For browser apps

Include `<script src="//unpkg.com/string-similarity/umd/string-similarity.min.js"></script>` to get the latest version.

Or `<script src="//unpkg.com/string-similarity@4.0.1/umd/string-similarity.min.js"></script>` to get a specific version (4.0.1) in this case.

This exposes a global variable called `stringSimilarity` which you can start using.

```
<script>
  stringSimilarity.compareTwoStrings('what!', 'who?');
</script>
```

(The package is exposed as UMD, so you can consume it as such)

## API

The package contains two methods:

### compareTwoStrings(string1, string2)

Returns a fraction between 0 and 1, which indicates the degree of similarity between the two strings. 0 indicates completely different strings, 1 indicates identical strings. The comparison is case-sensitive.

##### Arguments

1. string1 (string): The first string
2. string2 (string): The second string

Order does not make a difference.

##### Returns

(number): A fraction from 0 to 1, both inclusive. Higher number indicates more similarity.

##### Examples

```javascript
stringSimilarity.compareTwoStrings("healed", "sealed");
// → 0.8

stringSimilarity.compareTwoStrings(
  "Olive-green table for sale, in extremely good condition.",
  "For sale: table in very good  condition, olive green in colour."
);
// → 0.6060606060606061

stringSimilarity.compareTwoStrings(
  "Olive-green table for sale, in extremely good condition.",
  "For sale: green Subaru Impreza, 210,000 miles"
);
// → 0.2558139534883721

stringSimilarity.compareTwoStrings(
  "Olive-green table for sale, in extremely good condition.",
  "Wanted: mountain bike with at least 21 gears."
);
// → 0.1411764705882353
```

### findBestMatch(mainString, targetStrings)

Compares `mainString` against each string in `targetStrings`.

##### Arguments

1. mainString (string): The string to match each target string against.
2. targetStrings (Array): Each string in this array will be matched against the main string.

##### Returns

(Object): An object with a `ratings` property, which gives a similarity rating for each target string, a `bestMatch` property, which specifies which target string was most similar to the main string, and a `bestMatchIndex` property, which specifies the index of the bestMatch in the targetStrings array.

##### Examples

```javascript
stringSimilarity.findBestMatch('Olive-green table for sale, in extremely good condition.', [
  'For sale: green Subaru Impreza, 210,000 miles',
  'For sale: table in very good condition, olive green in colour.',
  'Wanted: mountain bike with at least 21 gears.'
]);
// →
{ ratings:
   [ { target: 'For sale: green Subaru Impreza, 210,000 miles',
       rating: 0.2558139534883721 },
     { target: 'For sale: table in very good condition, olive green in colour.',
       rating: 0.6060606060606061 },
     { target: 'Wanted: mountain bike with at least 21 gears.',
       rating: 0.1411764705882353 } ],
  bestMatch:
   { target: 'For sale: table in very good condition, olive green in colour.',
     rating: 0.6060606060606061 },
  bestMatchIndex: 1
}
```

## Release Notes

### 2.0.0

- Removed production dependencies
- Updated to ES6 (this breaks backward-compatibility for pre-ES6 apps)

### 3.0.0

- Performance improvement for `compareTwoStrings(..)`: now O(n) instead of O(n^2)
- The algorithm has been tweaked slightly to disregard spaces and word boundaries. This will change the rating values slightly but not enough to make a significant difference
- Adding a `bestMatchIndex` to the results for `findBestMatch(..)` to point to the best match in the supplied `targetStrings` array

### 3.0.1

- Refactoring: removed unused functions; used `substring` instead of `substr`
- Updated dependencies

### 4.0.1

- Distributing as an UMD build to be used in browsers.

### 4.0.2

- Update dependencies to latest versions.

### 4.0.3

- Make compatible with IE and ES5. Also, update deps. (see [PR56](https://github.com/aceakash/string-similarity/pull/56))

### 4.0.4

- Simplify some conditional statements. Also, update deps. (see [PR50](https://github.com/aceakash/string-similarity/pull/50))

![Build status](https://codeship.com/projects/2aa453d0-0959-0134-8a76-4abcb29fe9b4/status?branch=master)
[![Known Vulnerabilities](https://snyk.io/test/github/aceakash/string-similarity/badge.svg)](https://snyk.io/test/github/aceakash/string-similarity)

---
_Source: https://npm.io/package/string-similarity · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
