[READ-ONLY] Mirror of https://github.com/FoxxMD/string-sameness. Compare the sameness of two strings foxxmd.github.io/string-sameness/
compare cosine-similarity dice-coefficient levenshtein-distance sameness string text typescript
0

Configure Feed

Select the types of activity you want to include in your feed.

feat: Narrow typing of strategy object

Usage for options is the same but included strategies have narrower type

FoxxMD (Oct 26, 2023, 12:47 PM EDT) 43a609ac e1f95c87

+14 -14
+4 -4
src/atomic.ts
··· 1 1 export interface StringComparisonOptions { 2 2 transforms?: ((str: string) => string)[] 3 - strategies?: ComparisonStrategy[] 3 + strategies?: ComparisonStrategy<ComparisonStrategyResultValue>[] 4 4 } 5 5 6 6 export interface StringSamenessResult { ··· 35 35 36 36 export type ComparisonStrategyResultValue = number | ComparisonStrategyResultObject; 37 37 38 - export type StrategyFunc = (strA: string, strB: string) => ComparisonStrategyResultValue; 38 + export type StrategyFunc<T extends ComparisonStrategyResultValue> = (strA: string, strB: string) => T; 39 39 40 - export interface ComparisonStrategy { 40 + export interface ComparisonStrategy<T extends ComparisonStrategyResultValue> { 41 41 /** 42 42 * The name of this strategy 43 43 * */ ··· 45 45 /** 46 46 * A function that accepts two string arguments and returns a number 47 47 * */ 48 - strategy: StrategyFunc 48 + strategy: StrategyFunc<T> 49 49 50 50 /** 51 51 * An optional function that accepts two string arguments and returns whether this strategy should be used
+2 -2
src/matchingStrategies/cosineSimilarity.d.ts
··· 1 - import { ComparisonStrategy } from "../atomic.js"; 1 + import { ComparisonStrategy, ComparisonStrategyResultObject } from "../atomic.js"; 2 2 export declare const calculateCosineSimilarity: (strA: string, strB: string) => number; 3 - export declare const cosineStrategy: ComparisonStrategy; 3 + export declare const cosineStrategy: ComparisonStrategy<ComparisonStrategyResultObject>;
+2 -2
src/matchingStrategies/cosineSimilarity.ts
··· 1 1 // reproduced from https://github.com/sumn2u/string-comparison/blob/master/jscosine.js 2 2 // https://sumn2u.medium.com/string-similarity-comparision-in-js-with-examples-4bae35f13968 3 3 4 - import {ComparisonStrategy} from "../atomic.js"; 4 + import {ComparisonStrategy, ComparisonStrategyResultObject} from "../atomic.js"; 5 5 6 6 interface StrMap { 7 7 [key: string]: number ··· 69 69 return cosineSimilarity(termFreqVecA, termFreqVecB); 70 70 } 71 71 72 - export const cosineStrategy: ComparisonStrategy = { 72 + export const cosineStrategy: ComparisonStrategy<ComparisonStrategyResultObject> = { 73 73 name: 'cosine', 74 74 strategy: (valA: string, valB: string) => { 75 75 const res = calculateCosineSimilarity(valA, valB);
+2 -2
src/matchingStrategies/diceSimilarity.ts
··· 1 1 import stringSimilarity from 'string-similarity'; 2 - import {ComparisonStrategy} from "../atomic.js"; 2 + import {ComparisonStrategy, ComparisonStrategyResultObject} from "../atomic.js"; 3 3 4 4 export const calculateDiceSimilarity = (valA: string, valB: string) => stringSimilarity.compareTwoStrings(valA, valB); 5 - export const diceStrategy: ComparisonStrategy = { 5 + export const diceStrategy: ComparisonStrategy<ComparisonStrategyResultObject> = { 6 6 name: 'dice', 7 7 strategy: (valA: string, valB: string) => { 8 8 const res = calculateDiceSimilarity(valA, valB);
+2 -2
src/matchingStrategies/levenSimilarity.d.ts
··· 1 - import { ComparisonStrategy } from "../atomic.js"; 1 + import { ComparisonStrategy, ComparisonStrategyResultObject } from "../atomic.js"; 2 2 export declare const calculateLevenSimilarity: (valA: string, valB: string) => number[]; 3 - export declare const levenStrategy: ComparisonStrategy; 3 + export declare const levenStrategy: ComparisonStrategy<ComparisonStrategyResultObject>;
+2 -2
src/matchingStrategies/levenSimilarity.ts
··· 1 1 import leven from "leven"; 2 - import {ComparisonStrategy} from "../atomic.js"; 2 + import {ComparisonStrategy, ComparisonStrategyResultObject} from "../atomic.js"; 3 3 4 4 export const calculateLevenSimilarity = (valA: string, valB: string) => { 5 5 let longer: string; ··· 26 26 }; 27 27 } 28 28 29 - export const levenStrategy: ComparisonStrategy = { 29 + export const levenStrategy: ComparisonStrategy<ComparisonStrategyResultObject> = { 30 30 name: 'leven', 31 31 strategy: stratFunc 32 32 }