You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					185 lines
				
				5.6 KiB
			
		
		
			
		
	
	
					185 lines
				
				5.6 KiB
			| 
											3 years ago
										 | # 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)) | ||
|  | 
 | ||
|  |  | ||
|  | [](https://snyk.io/test/github/aceakash/string-similarity) |