cmpstr 2.0.2 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +75 -499
- package/dist/CmpStr.esm.js +4863 -0
- package/dist/CmpStr.esm.js.map +1 -0
- package/dist/CmpStr.esm.min.js +8 -0
- package/dist/CmpStr.esm.min.js.map +1 -0
- package/dist/CmpStr.umd.js +4875 -0
- package/dist/CmpStr.umd.js.map +1 -0
- package/dist/CmpStr.umd.min.js +8 -0
- package/dist/CmpStr.umd.min.js.map +1 -0
- package/dist/cjs/CmpStr.js +663 -0
- package/dist/cjs/CmpStr.js.map +1 -0
- package/dist/cjs/CmpStrAsync.js +336 -0
- package/dist/cjs/CmpStrAsync.js.map +1 -0
- package/dist/cjs/index.js +15 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/metric/Cosine.js +101 -0
- package/dist/cjs/metric/Cosine.js.map +1 -0
- package/dist/cjs/metric/DamerauLevenshtein.js +110 -0
- package/dist/cjs/metric/DamerauLevenshtein.js.map +1 -0
- package/dist/cjs/metric/DiceSorensen.js +91 -0
- package/dist/cjs/metric/DiceSorensen.js.map +1 -0
- package/dist/cjs/metric/Hamming.js +82 -0
- package/dist/cjs/metric/Hamming.js.map +1 -0
- package/dist/cjs/metric/Jaccard.js +76 -0
- package/dist/cjs/metric/Jaccard.js.map +1 -0
- package/dist/cjs/metric/JaroWinkler.js +114 -0
- package/dist/cjs/metric/JaroWinkler.js.map +1 -0
- package/dist/cjs/metric/LCS.js +89 -0
- package/dist/cjs/metric/LCS.js.map +1 -0
- package/dist/cjs/metric/Levenshtein.js +94 -0
- package/dist/cjs/metric/Levenshtein.js.map +1 -0
- package/dist/cjs/metric/Metric.js +445 -0
- package/dist/cjs/metric/Metric.js.map +1 -0
- package/dist/cjs/metric/NeedlemanWunsch.js +95 -0
- package/dist/cjs/metric/NeedlemanWunsch.js.map +1 -0
- package/dist/cjs/metric/SmithWaterman.js +98 -0
- package/dist/cjs/metric/SmithWaterman.js.map +1 -0
- package/dist/cjs/metric/qGram.js +91 -0
- package/dist/cjs/metric/qGram.js.map +1 -0
- package/dist/cjs/phonetic/Cologne.js +112 -0
- package/dist/cjs/phonetic/Cologne.js.map +1 -0
- package/dist/cjs/phonetic/Metaphone.js +172 -0
- package/dist/cjs/phonetic/Metaphone.js.map +1 -0
- package/dist/cjs/phonetic/Phonetic.js +413 -0
- package/dist/cjs/phonetic/Phonetic.js.map +1 -0
- package/dist/cjs/phonetic/Soundex.js +135 -0
- package/dist/cjs/phonetic/Soundex.js.map +1 -0
- package/dist/cjs/utils/DeepMerge.js +144 -0
- package/dist/cjs/utils/DeepMerge.js.map +1 -0
- package/dist/cjs/utils/DiffChecker.js +500 -0
- package/dist/cjs/utils/DiffChecker.js.map +1 -0
- package/dist/cjs/utils/Filter.js +189 -0
- package/dist/cjs/utils/Filter.js.map +1 -0
- package/dist/cjs/utils/HashTable.js +175 -0
- package/dist/cjs/utils/HashTable.js.map +1 -0
- package/dist/cjs/utils/Normalizer.js +144 -0
- package/dist/cjs/utils/Normalizer.js.map +1 -0
- package/dist/cjs/utils/Pool.js +196 -0
- package/dist/cjs/utils/Pool.js.map +1 -0
- package/dist/cjs/utils/Profiler.js +229 -0
- package/dist/cjs/utils/Profiler.js.map +1 -0
- package/dist/cjs/utils/Registry.js +148 -0
- package/dist/cjs/utils/Registry.js.map +1 -0
- package/dist/cjs/utils/TextAnalyzer.js +358 -0
- package/dist/cjs/utils/TextAnalyzer.js.map +1 -0
- package/dist/esm/CmpStr.js +662 -0
- package/dist/esm/CmpStr.js.map +1 -0
- package/dist/esm/CmpStrAsync.js +331 -0
- package/dist/esm/CmpStrAsync.js.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/metric/Cosine.js +99 -0
- package/dist/esm/metric/Cosine.js.map +1 -0
- package/dist/esm/metric/DamerauLevenshtein.js +108 -0
- package/dist/esm/metric/DamerauLevenshtein.js.map +1 -0
- package/dist/esm/metric/DiceSorensen.js +89 -0
- package/dist/esm/metric/DiceSorensen.js.map +1 -0
- package/dist/esm/metric/Hamming.js +77 -0
- package/dist/esm/metric/Hamming.js.map +1 -0
- package/dist/esm/metric/Jaccard.js +74 -0
- package/dist/esm/metric/Jaccard.js.map +1 -0
- package/dist/esm/metric/JaroWinkler.js +112 -0
- package/dist/esm/metric/JaroWinkler.js.map +1 -0
- package/dist/esm/metric/LCS.js +87 -0
- package/dist/esm/metric/LCS.js.map +1 -0
- package/dist/esm/metric/Levenshtein.js +92 -0
- package/dist/esm/metric/Levenshtein.js.map +1 -0
- package/dist/esm/metric/Metric.js +442 -0
- package/dist/esm/metric/Metric.js.map +1 -0
- package/dist/esm/metric/NeedlemanWunsch.js +93 -0
- package/dist/esm/metric/NeedlemanWunsch.js.map +1 -0
- package/dist/esm/metric/SmithWaterman.js +96 -0
- package/dist/esm/metric/SmithWaterman.js.map +1 -0
- package/dist/esm/metric/qGram.js +89 -0
- package/dist/esm/metric/qGram.js.map +1 -0
- package/dist/esm/phonetic/Cologne.js +114 -0
- package/dist/esm/phonetic/Cologne.js.map +1 -0
- package/dist/esm/phonetic/Metaphone.js +174 -0
- package/dist/esm/phonetic/Metaphone.js.map +1 -0
- package/dist/esm/phonetic/Phonetic.js +409 -0
- package/dist/esm/phonetic/Phonetic.js.map +1 -0
- package/dist/esm/phonetic/Soundex.js +137 -0
- package/dist/esm/phonetic/Soundex.js.map +1 -0
- package/dist/esm/utils/DeepMerge.js +139 -0
- package/dist/esm/utils/DeepMerge.js.map +1 -0
- package/dist/esm/utils/DiffChecker.js +498 -0
- package/dist/esm/utils/DiffChecker.js.map +1 -0
- package/dist/esm/utils/Filter.js +187 -0
- package/dist/esm/utils/Filter.js.map +1 -0
- package/dist/esm/utils/HashTable.js +173 -0
- package/dist/esm/utils/HashTable.js.map +1 -0
- package/dist/esm/utils/Normalizer.js +142 -0
- package/dist/esm/utils/Normalizer.js.map +1 -0
- package/dist/esm/utils/Pool.js +194 -0
- package/dist/esm/utils/Pool.js.map +1 -0
- package/dist/esm/utils/Profiler.js +227 -0
- package/dist/esm/utils/Profiler.js.map +1 -0
- package/dist/esm/utils/Registry.js +142 -0
- package/dist/esm/utils/Registry.js.map +1 -0
- package/dist/esm/utils/TextAnalyzer.js +356 -0
- package/dist/esm/utils/TextAnalyzer.js.map +1 -0
- package/dist/types/CmpStr.d.ts +472 -0
- package/dist/types/CmpStrAsync.d.ts +233 -0
- package/dist/types/index.d.ts +51 -0
- package/dist/types/metric/Cosine.d.ts +57 -0
- package/dist/types/metric/DamerauLevenshtein.d.ts +50 -0
- package/dist/types/metric/DiceSorensen.d.ts +57 -0
- package/dist/types/metric/Hamming.d.ts +49 -0
- package/dist/types/metric/Jaccard.d.ts +48 -0
- package/dist/types/metric/JaroWinkler.d.ts +50 -0
- package/dist/types/metric/LCS.d.ts +50 -0
- package/dist/types/metric/Levenshtein.d.ts +50 -0
- package/dist/types/metric/Metric.d.ts +261 -0
- package/dist/types/metric/NeedlemanWunsch.d.ts +47 -0
- package/dist/types/metric/SmithWaterman.d.ts +48 -0
- package/dist/types/metric/index.d.ts +41 -0
- package/dist/types/metric/qGram.d.ts +56 -0
- package/dist/types/phonetic/Cologne.d.ts +46 -0
- package/dist/types/phonetic/Metaphone.d.ts +50 -0
- package/dist/types/phonetic/Phonetic.d.ts +189 -0
- package/dist/types/phonetic/Soundex.d.ts +49 -0
- package/dist/types/phonetic/index.d.ts +30 -0
- package/dist/types/utils/DeepMerge.d.ts +70 -0
- package/dist/types/utils/DiffChecker.d.ts +137 -0
- package/dist/types/utils/Filter.d.ts +97 -0
- package/dist/types/utils/HashTable.d.ts +86 -0
- package/dist/types/utils/Normalizer.d.ts +76 -0
- package/dist/types/utils/Pool.d.ts +63 -0
- package/dist/types/utils/Profiler.d.ts +129 -0
- package/dist/types/utils/Registry.d.ts +57 -0
- package/dist/types/utils/TextAnalyzer.d.ts +199 -0
- package/dist/types/utils/Types.d.ts +313 -0
- package/package.json +62 -49
- package/src/CmpStr.d.ts +0 -70
- package/src/CmpStr.js +0 -912
- package/src/CmpStrAsync.d.ts +0 -19
- package/src/CmpStrAsync.js +0 -204
- package/src/algorithms/cosine.js +0 -86
- package/src/algorithms/damerau.js +0 -78
- package/src/algorithms/dice.js +0 -65
- package/src/algorithms/hamming.js +0 -44
- package/src/algorithms/jaccard.js +0 -34
- package/src/algorithms/jaroWinkler.js +0 -106
- package/src/algorithms/lcs.js +0 -58
- package/src/algorithms/levenshtein.js +0 -70
- package/src/algorithms/needlemanWunsch.js +0 -72
- package/src/algorithms/qGram.js +0 -63
- package/src/algorithms/smithWaterman.js +0 -78
- package/src/algorithms/soundex.js +0 -152
- package/src/index.d.ts +0 -3
- package/src/index.js +0 -47
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// CmpStr v3.0.0 dev-1a82e20-250612 by Paul Köhler @komed3 / MIT License
|
|
2
|
+
import { MetricRegistry, Metric } from './Metric.js';
|
|
3
|
+
import { Pool } from '../utils/Pool.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Smith-Waterman Algorithm
|
|
7
|
+
* src/metric/SmithWaterman.ts
|
|
8
|
+
*
|
|
9
|
+
* @see https://en.wikipedia.org/wiki/Smith%E2%80%93Waterman_algorithm
|
|
10
|
+
*
|
|
11
|
+
* The Smith-Waterman algorithm performs local alignment, finding the best matching
|
|
12
|
+
* subsequence between two strings. It is commonly used in bioinformatics for local
|
|
13
|
+
* sequence alignment. Instead of looking at the entire sequence, the Smith–Waterman
|
|
14
|
+
* algorithm compares segments of all possible lengths and optimizes the similarity
|
|
15
|
+
* measure.
|
|
16
|
+
*
|
|
17
|
+
* @module Metric/SmithWatermanDistance
|
|
18
|
+
* @author Paul Köhler (komed3)
|
|
19
|
+
* @license MIT
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* SmithWatermanDistance class extends the Metric class to implement the Smith-Waterman algorithm.
|
|
23
|
+
*/
|
|
24
|
+
class SmithWatermanDistance extends Metric {
|
|
25
|
+
/**
|
|
26
|
+
* Constructor for the SmithWaterman class.
|
|
27
|
+
*
|
|
28
|
+
* Initializes the Smith-Waterman metric with two input strings or
|
|
29
|
+
* arrays of strings and optional options.
|
|
30
|
+
*
|
|
31
|
+
* @param {MetricInput} a - First input string or array of strings
|
|
32
|
+
* @param {MetricInput} b - Second input string or array of strings
|
|
33
|
+
* @param {MetricOptions} [opt] - Options for the metric computation
|
|
34
|
+
*/
|
|
35
|
+
constructor(a, b, opt = {}) {
|
|
36
|
+
// Call the parent Metric constructor with the metric name and inputs
|
|
37
|
+
// Metric is symmetrical
|
|
38
|
+
super('smithWaterman', a, b, opt, true);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Calculates the Smith-Waterman local alignment score between two strings.
|
|
42
|
+
*
|
|
43
|
+
* @param {string} a - First string
|
|
44
|
+
* @param {string} b - Second string
|
|
45
|
+
* @param {number} m - Length of the first string
|
|
46
|
+
* @param {number} n - Length of the second string
|
|
47
|
+
* @return {MetricCompute<SmithWatermanRaw>} - Object containing the similarity result and raw score
|
|
48
|
+
*/
|
|
49
|
+
compute(a, b, m, n) {
|
|
50
|
+
// Scoring parameters (can be customized via options if needed)
|
|
51
|
+
const { match = 2, mismatch = -1, gap = -2 } = this.options;
|
|
52
|
+
// Get two reusable arrays from the Pool for the DP rows
|
|
53
|
+
const len = m + 1;
|
|
54
|
+
const [prev, curr] = Pool.acquireMany('uint16', [len, len]);
|
|
55
|
+
// Initialize the first row to zeros (Smith-Waterman local alignment)
|
|
56
|
+
for (let i = 0; i <= m; i++) prev[i] = 0;
|
|
57
|
+
let maxScore = 0;
|
|
58
|
+
// Fill the DP matrix row by row (over the longer string)
|
|
59
|
+
for (let j = 1; j <= n; j++) {
|
|
60
|
+
// First column always zero
|
|
61
|
+
curr[0] = 0;
|
|
62
|
+
// Get the character code of the current character in b
|
|
63
|
+
const cb = b.charCodeAt(j - 1);
|
|
64
|
+
for (let i = 1; i <= m; i++) {
|
|
65
|
+
// Score for match / mismatch
|
|
66
|
+
const score = a.charCodeAt(i - 1) === cb ? match : mismatch;
|
|
67
|
+
// Calculate the maximum score for current cell
|
|
68
|
+
curr[i] = Math.max(
|
|
69
|
+
0,
|
|
70
|
+
prev[i - 1] + score, // Diagonal (match/mismatch)
|
|
71
|
+
prev[i] + gap, // Up (gap)
|
|
72
|
+
curr[i - 1] + gap // Left (gap)
|
|
73
|
+
);
|
|
74
|
+
// Track the maximum score in the matrix
|
|
75
|
+
if (curr[i] > maxScore) maxScore = curr[i];
|
|
76
|
+
}
|
|
77
|
+
// Copy current row to previous for next iteration
|
|
78
|
+
prev.set(curr);
|
|
79
|
+
}
|
|
80
|
+
// Release arrays back to the pool
|
|
81
|
+
Pool.release('uint16', prev, len);
|
|
82
|
+
Pool.release('uint16', curr, len);
|
|
83
|
+
// Use the maximum possible score for the shorter string (local alignment)
|
|
84
|
+
const denum = Math.min(m * match, n * match);
|
|
85
|
+
// Return the result as a MetricCompute object
|
|
86
|
+
return {
|
|
87
|
+
res: denum === 0 ? 0 : Metric.clamp(maxScore / denum),
|
|
88
|
+
raw: { score: maxScore, denum }
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Register the Smith-Waterman algorithm in the metric registry
|
|
93
|
+
MetricRegistry.add('smithWaterman', SmithWatermanDistance);
|
|
94
|
+
|
|
95
|
+
export { SmithWatermanDistance };
|
|
96
|
+
//# sourceMappingURL=SmithWaterman.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SmithWaterman.js","sources":["../../../src/metric/SmithWaterman.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAAA,CAAA,CAAA;;;;;;;;;;;;;;;AAeG,CAAA,CAAA;AAaH,CAAA,CAAA;;AAEG,CAAA,CAAA;AACG,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAwB,CAAA;AAE/D,CAAA,CAAA,CAAA,CAAA;;;;;;;;;AASG,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAc,CAAA,CAAE,CAAc,CAAE,CAAA,CAAA,CAAA,EAAqB,CAAA,CAAA,CAAA,CAAE,CAAA,CAAA;;;CAIjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAE,CAAA,CAAC,CAAE,CAAA,CAAC,CAAE,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE;;AAI9C,CAAA,CAAA,CAAA,CAAA;;;;;;;;AAQG,CAAA,CAAA,CAAA,CAAA;AACgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAG,CAAS,CAAA,CAAE,CAAS,CAAE,CAAA,CAAS,CAAE,CAAA,CAAS,CAAA,CAAA;;AAGnE,CAAA,CAAA,CAAA,CAAA,MAAM,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAC,EAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAE,CAAA,CAAA,CAAE,GAAG,CAAG,CAAA,CAAA,CAAA,CAAE,EAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAG3D,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAW,CAAA,CAAA,CAAC,GAAG,CAAC;AACzB,CAAA,CAAA,CAAA,CAAA,MAAM,CAAE,CAAA,CAAA,CAAA,CAAI,EAAE,CAAI,CAAA,CAAA,CAAA,CAAE,GAAG,CAAI,CAAA,CAAA,CAAA,CAAC,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,QAAQ,CAAE,CAAA,CAAE,GAAG,CAAE,CAAA,CAAA,CAAA,CAAG,CAAE,CAAE;;CAGjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAI,CAAA,CAAA,CAAA,CAAC,CAAE,CAAA,CAAC,CAAE,CAAA,CAAG,CAAA,CAAI,CAAA,CAAA,CAAA,CAAE,CAAC,CAAE,GAAG,CAAC;CAE5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC;;AAGxB,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAG,CAAA;;AAG3B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAE,CAAC,CAAE,GAAG,CAAC;;CAGb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAE,CAAA,CAAA,CAAA,CAAW,CAAC,CAAC,UAAU,CAAE,CAAC,CAAG,CAAA,CAAA,CAAC,CAAE;AAExC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAG,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA,CAAA,CAAI,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAG,CAAA;;QAG3B,MAAM,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAC,CAAC,UAAU,CAAE,CAAC,CAAG,CAAA,CAAA,CAAC,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,GAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGrE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAI,CAAE,CAAC,CAAE,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAG,CAAA,CAAA;UAAE,CAAC;AAAA,UACnB,IAAI,CAAE,CAAC,GAAG,CAAC,CAAE,GAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAE,CAAC,CAAE,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;UACf,IAAI,CAAE,CAAC,GAAG,CAAC,CAAE,GAAG,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;CACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;AAGD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAK,CAAI,CAAA,CAAA,CAAA,CAAE,CAAC,CAAE,GAAG,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAI,CAAA,CAAA,CAAA,CAAE,CAAC,CAAE;;;AAKpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAE,IAAI,CAAE;;;CAKpB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,QAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA,CAAG,CAAE;CACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,QAAQ,CAAE,CAAA,CAAA,CAAA,CAAA,CAAI,CAAE,CAAA,CAAA,CAAA,CAAG,CAAE;;AAGnC,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,CAAC,CAAG,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAG,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,CAAC,CAAA,CAAA,CAAG,KAAK,CAAE;;IAG9C,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACH,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAK,CAAC,CAAG,CAAA,CAAA,CAAC,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAK,CAAA,CAAA,CAAA,CAAA,CAAE,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAG,KAAK,CAAE;AACvD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAG,CAAE,CAAA,CAAA,CAAE,KAAK,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,EAAE,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA;CAChC,CAAA,CAAA,CAAA,CAAA;;AAIR;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,CAAG,CAAA,CAAA,CAAE,CAAe,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAE,qBAAqB,CAAE;;;"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
// CmpStr v3.0.0 dev-1a82e20-250612 by Paul Köhler @komed3 / MIT License
|
|
2
|
+
import { MetricRegistry, Metric } from './Metric.js';
|
|
3
|
+
import { Pool } from '../utils/Pool.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* q-Gram Similarity
|
|
7
|
+
* src/metric/QGram.ts
|
|
8
|
+
*
|
|
9
|
+
* @see https://en.wikipedia.org/wiki/Q-gram
|
|
10
|
+
*
|
|
11
|
+
* Q-gram similarity is a string-matching algorithm that compares two strings by
|
|
12
|
+
* breaking them into substrings (q-grams) of length Q. The similarity is computed
|
|
13
|
+
* as the size of the intersection of q-gram sets divided by the size of the larger
|
|
14
|
+
* set.
|
|
15
|
+
*
|
|
16
|
+
* This metric is widely used in approximate string matching, information retrieval,
|
|
17
|
+
* and computational linguistics.
|
|
18
|
+
*
|
|
19
|
+
* @module Metric/QGramSimilarity
|
|
20
|
+
* @author Paul Köhler (komed3)
|
|
21
|
+
* @license MIT
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* QGramSimilarity class extends the Metric class to implement the q-Gram similarity algorithm.
|
|
25
|
+
*/
|
|
26
|
+
class QGramSimilarity extends Metric {
|
|
27
|
+
/**
|
|
28
|
+
* Constructor for the QGramSimilarity class.
|
|
29
|
+
*
|
|
30
|
+
* Initializes the q-Gram similarity metric with two input strings or
|
|
31
|
+
* arrays of strings and optional options.
|
|
32
|
+
*
|
|
33
|
+
* @param {MetricInput} a - First input string or array of strings
|
|
34
|
+
* @param {MetricInput} b - Second input string or array of strings
|
|
35
|
+
* @param {MetricOptions} [opt] - Options for the metric computation
|
|
36
|
+
*/
|
|
37
|
+
constructor(a, b, opt = {}) {
|
|
38
|
+
// Call the parent Metric constructor with the metric name and inputs
|
|
39
|
+
// Metric is symmetrical
|
|
40
|
+
super('qgram', a, b, opt, true);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Converts a string into a set of q-grams (substrings of length q).
|
|
44
|
+
*
|
|
45
|
+
* @param {string} str - The input string
|
|
46
|
+
* @param {number} q - The length of each q-gram
|
|
47
|
+
* @return {Set<string>} - Set of q-grams
|
|
48
|
+
*/
|
|
49
|
+
_qGrams(str, q) {
|
|
50
|
+
const len = Math.max(0, str.length - q + 1);
|
|
51
|
+
const grams = Pool.acquire('set', len);
|
|
52
|
+
for (let i = 0; i < len; i++) grams.add(str.slice(i, i + q));
|
|
53
|
+
return grams;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Calculates the q-Gram similarity between two strings.
|
|
57
|
+
*
|
|
58
|
+
* @param {string} a - First string
|
|
59
|
+
* @param {string} b - Second string
|
|
60
|
+
* @return {MetricCompute<QGramRaw>} - Object containing the similarity result and raw values
|
|
61
|
+
*/
|
|
62
|
+
compute(a, b) {
|
|
63
|
+
// Get q from options or use default "2"
|
|
64
|
+
const { q = 2 } = this.options;
|
|
65
|
+
// Generate q-gram sets for both strings
|
|
66
|
+
const setA = this._qGrams(a, q);
|
|
67
|
+
const setB = this._qGrams(b, q);
|
|
68
|
+
// Calculate intersection size
|
|
69
|
+
let intersection = 0;
|
|
70
|
+
for (const gram of setA) if (setB.has(gram)) intersection++;
|
|
71
|
+
// Calculate the size of the larger set
|
|
72
|
+
const sizeA = setA.size,
|
|
73
|
+
sizeB = setB.size;
|
|
74
|
+
const size = Math.max(sizeA, sizeB);
|
|
75
|
+
// Release sets back to the pool
|
|
76
|
+
Pool.release('set', setA, sizeA);
|
|
77
|
+
Pool.release('set', setB, sizeB);
|
|
78
|
+
// Return the result as a MetricCompute object
|
|
79
|
+
return {
|
|
80
|
+
res: size === 0 ? 1 : Metric.clamp(intersection / size),
|
|
81
|
+
raw: { intersection, size }
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Register the q-Gram similariry in the metric registry
|
|
86
|
+
MetricRegistry.add('qGram', QGramSimilarity);
|
|
87
|
+
|
|
88
|
+
export { QGramSimilarity };
|
|
89
|
+
//# sourceMappingURL=qGram.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qGram.js","sources":["../../../src/metric/qGram.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
// CmpStr v3.0.0 dev-1a82e20-250612 by Paul Köhler @komed3 / MIT License
|
|
2
|
+
import {
|
|
3
|
+
PhoneticRegistry,
|
|
4
|
+
PhoneticMappingRegistry,
|
|
5
|
+
Phonetic
|
|
6
|
+
} from './Phonetic.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Cologne Phonetic Algorithm
|
|
10
|
+
* src/phonetic/Cologne.ts
|
|
11
|
+
*
|
|
12
|
+
* @see https://en.wikipedia.org/wiki/Cologne_phonetics
|
|
13
|
+
*
|
|
14
|
+
* Cologne phonetics, also known as `Kölner Phonetik` or the `Cologne process`,
|
|
15
|
+
* is a phonetic algorithm that assigns a sequence of digits, referred to as the
|
|
16
|
+
* phonetic code, to words. The purpose of this method is to ensure that words
|
|
17
|
+
* with identical sounds receive the same code. This algorithm can facilitate a
|
|
18
|
+
* similarity search among words.
|
|
19
|
+
*
|
|
20
|
+
* Cologne phonetics is associated with the well-known Soundex phonetic algorithm,
|
|
21
|
+
* yet it is specifically optimized for the German language. This algorithm was
|
|
22
|
+
* introduced by Hans Joachim Postel in 1969.
|
|
23
|
+
*
|
|
24
|
+
* The Cologne phonetic algorithm works by mapping letters to digits, ignoring
|
|
25
|
+
* certain letters, and applying specific rules to handle character combinations.
|
|
26
|
+
*
|
|
27
|
+
* @module Phonetic/Cologne
|
|
28
|
+
* @author Paul Köhler (komed3)
|
|
29
|
+
* @license MIT
|
|
30
|
+
*/
|
|
31
|
+
/**
|
|
32
|
+
* Cologne class extends the Phonetic class to implement the Cologne phonetic algorithm.
|
|
33
|
+
*/
|
|
34
|
+
class Cologne extends Phonetic {
|
|
35
|
+
// Default options for the Cologne phonetic algorithm
|
|
36
|
+
static default = { map: 'default', delimiter: ' ', length: -1, dedupe: true };
|
|
37
|
+
/**
|
|
38
|
+
* Constructor for the Cologne class.
|
|
39
|
+
*
|
|
40
|
+
* Initializes the Cologne phonetic algorithm with the mapping and options.
|
|
41
|
+
*
|
|
42
|
+
* @param {PhoneticOptions} [opt] - Options for the Cologne phonetic algorithm
|
|
43
|
+
*/
|
|
44
|
+
constructor(opt = {}) {
|
|
45
|
+
super('cologne', opt);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Adjusts the phonetic code by removing all '0's except the first character.
|
|
49
|
+
*
|
|
50
|
+
* @param {string} code - The phonetic code to adjust
|
|
51
|
+
* @returns {string} - The adjusted phonetic code
|
|
52
|
+
*/
|
|
53
|
+
adjustCode(code) {
|
|
54
|
+
return code.slice(0, 1) + code.slice(1).replaceAll('0', '');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Register the Cologne algorithm in the phonetic registry
|
|
58
|
+
PhoneticRegistry.add('cologne', Cologne);
|
|
59
|
+
// Register the Cologne phonetic mapping
|
|
60
|
+
PhoneticMappingRegistry.add('cologne', 'default', {
|
|
61
|
+
map: {
|
|
62
|
+
a: '0',
|
|
63
|
+
ä: '0',
|
|
64
|
+
e: '0',
|
|
65
|
+
i: '0',
|
|
66
|
+
j: '0',
|
|
67
|
+
o: '0',
|
|
68
|
+
ö: '0',
|
|
69
|
+
u: '0',
|
|
70
|
+
ü: '0',
|
|
71
|
+
y: '0',
|
|
72
|
+
b: '1',
|
|
73
|
+
p: '1',
|
|
74
|
+
d: '2',
|
|
75
|
+
t: '2',
|
|
76
|
+
f: '3',
|
|
77
|
+
v: '3',
|
|
78
|
+
w: '3',
|
|
79
|
+
g: '4',
|
|
80
|
+
k: '4',
|
|
81
|
+
q: '4',
|
|
82
|
+
l: '5',
|
|
83
|
+
m: '6',
|
|
84
|
+
n: '6',
|
|
85
|
+
r: '7',
|
|
86
|
+
c: '8',
|
|
87
|
+
s: '8',
|
|
88
|
+
ß: '8',
|
|
89
|
+
z: '8',
|
|
90
|
+
x: '48'
|
|
91
|
+
},
|
|
92
|
+
ignore: ['h'],
|
|
93
|
+
ruleset: [
|
|
94
|
+
{ char: 'p', next: ['h'], code: '3' },
|
|
95
|
+
{
|
|
96
|
+
char: 'c',
|
|
97
|
+
position: 'start',
|
|
98
|
+
next: ['a', 'h', 'k', 'l', 'o', 'q', 'r', 'u', 'x'],
|
|
99
|
+
code: '4'
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
char: 'c',
|
|
103
|
+
next: ['a', 'h', 'k', 'o', 'q', 'u', 'x'],
|
|
104
|
+
prevNot: ['s', 'z'],
|
|
105
|
+
code: '4'
|
|
106
|
+
},
|
|
107
|
+
{ char: 'd', next: ['c', 's', 'z'], code: '8' },
|
|
108
|
+
{ char: 't', next: ['c', 's', 'z'], code: '8' },
|
|
109
|
+
{ char: 'x', prev: ['c', 'k', 'q'], code: '8' }
|
|
110
|
+
]
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
export { Cologne };
|
|
114
|
+
//# sourceMappingURL=Cologne.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cologne.js","sources":["../../../src/phonetic/Cologne.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// CmpStr v3.0.0 dev-1a82e20-250612 by Paul Köhler @komed3 / MIT License
|
|
2
|
+
import {
|
|
3
|
+
PhoneticRegistry,
|
|
4
|
+
PhoneticMappingRegistry,
|
|
5
|
+
Phonetic
|
|
6
|
+
} from './Phonetic.js';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Metaphone Phonetic Algorithm
|
|
10
|
+
* src/phonetic/Metaphone.ts
|
|
11
|
+
*
|
|
12
|
+
* @see https://en.wikipedia.org/wiki/Metaphone
|
|
13
|
+
*
|
|
14
|
+
* Metaphone is a phonetic algorithm for indexing words by their English pronunciation.
|
|
15
|
+
* It encodes words into a string of consonant symbols, allowing for the comparison of
|
|
16
|
+
* words based on their pronunciation rather than their spelling. Metaphone is more
|
|
17
|
+
* accurate than Soundex for English and is widely used in search, spell-checking,
|
|
18
|
+
* and fuzzy matching.
|
|
19
|
+
*
|
|
20
|
+
* This implementation uses a mapping and a comprehensive ruleset to efficiently
|
|
21
|
+
* transform input words into their Metaphone code. The algorithm drops or transforms
|
|
22
|
+
* letters according to context-sensitive rules, and only retains vowels at the start.
|
|
23
|
+
*
|
|
24
|
+
* @module Phonetic/Metaphone
|
|
25
|
+
* @author Paul Köhler (komed3)
|
|
26
|
+
* @license MIT
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Metaphone class extends the Phonetic class to implement the Metaphone phonetic algorithm.
|
|
30
|
+
*/
|
|
31
|
+
class Metaphone extends Phonetic {
|
|
32
|
+
// Default options for the Metaphone phonetic algorithm
|
|
33
|
+
static default = {
|
|
34
|
+
map: 'en90',
|
|
35
|
+
delimiter: ' ',
|
|
36
|
+
length: -1,
|
|
37
|
+
pad: '',
|
|
38
|
+
dedupe: false
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Constructor for the Metaphone class.
|
|
42
|
+
*
|
|
43
|
+
* Initializes the Metaphone phonetic algorithm with the mapping and options.
|
|
44
|
+
*
|
|
45
|
+
* @param {PhoneticOptions} [opt] - Options for the Metaphone phonetic algorithm
|
|
46
|
+
*/
|
|
47
|
+
constructor(opt = {}) {
|
|
48
|
+
super('metaphone', opt);
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Generates the Metaphone code for a given word.
|
|
52
|
+
*
|
|
53
|
+
* @param {string} word - The input word to be converted into a Metaphone code
|
|
54
|
+
* @returns {string} - The generated Metaphone code
|
|
55
|
+
*/
|
|
56
|
+
encode(word) {
|
|
57
|
+
// Remove duplicate adjacent letters except for C
|
|
58
|
+
word = word.replace(/([A-BD-Z])\1+/gi, (m, c) => (c === 'C' ? m : c));
|
|
59
|
+
// Use the base implementation for rule/mapping application
|
|
60
|
+
return super.encode(word);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Adjusts the Metaphone code by removing vowels except for the first letter.
|
|
64
|
+
*
|
|
65
|
+
* @param {string} code - The Metaphone code to be adjusted
|
|
66
|
+
* @returns {string} - The adjusted Metaphone code
|
|
67
|
+
*/
|
|
68
|
+
adjustCode(code) {
|
|
69
|
+
// Remove vowels except for the first letter
|
|
70
|
+
return code.slice(0, 1) + code.slice(1).replace(/[AEIOU]/g, '');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Register the Metaphone algorithm in the phonetic registry
|
|
74
|
+
PhoneticRegistry.add('metaphone', Metaphone);
|
|
75
|
+
/**
|
|
76
|
+
* Register the Metaphone phonetic mapping for English.
|
|
77
|
+
*
|
|
78
|
+
* This version is based on the original BASIC implementation from 1990,
|
|
79
|
+
* written by Lawrence Philips.
|
|
80
|
+
*
|
|
81
|
+
* @see https://gist.github.com/Rostepher/b688f709587ac145a0b3
|
|
82
|
+
*/
|
|
83
|
+
PhoneticMappingRegistry.add('metaphone', 'en90', {
|
|
84
|
+
map: {
|
|
85
|
+
a: 'A',
|
|
86
|
+
b: 'B',
|
|
87
|
+
c: 'K',
|
|
88
|
+
d: 'T',
|
|
89
|
+
e: 'E',
|
|
90
|
+
f: 'F',
|
|
91
|
+
g: 'K',
|
|
92
|
+
h: 'H',
|
|
93
|
+
i: 'I',
|
|
94
|
+
j: 'J',
|
|
95
|
+
k: 'K',
|
|
96
|
+
l: 'L',
|
|
97
|
+
m: 'M',
|
|
98
|
+
n: 'N',
|
|
99
|
+
o: 'O',
|
|
100
|
+
p: 'P',
|
|
101
|
+
q: 'K',
|
|
102
|
+
r: 'R',
|
|
103
|
+
s: 'S',
|
|
104
|
+
t: 'T',
|
|
105
|
+
u: 'U',
|
|
106
|
+
v: 'F',
|
|
107
|
+
w: 'W',
|
|
108
|
+
x: 'KS',
|
|
109
|
+
y: 'Y',
|
|
110
|
+
z: 'S'
|
|
111
|
+
},
|
|
112
|
+
ruleset: [
|
|
113
|
+
// Drop the first letter if the string begins with `AE`, `GN`, `KN`, `PN` or `WR`
|
|
114
|
+
{ char: 'a', position: 'start', next: ['e'], code: '' },
|
|
115
|
+
{ char: 'g', position: 'start', next: ['n'], code: '' },
|
|
116
|
+
{ char: 'k', position: 'start', next: ['n'], code: '' },
|
|
117
|
+
{ char: 'p', position: 'start', next: ['n'], code: '' },
|
|
118
|
+
{ char: 'w', position: 'start', next: ['r'], code: '' },
|
|
119
|
+
// Drop `B` if after `M` at the end of the string
|
|
120
|
+
{ char: 'b', position: 'end', prev: ['m'], code: '' },
|
|
121
|
+
// `C` transforms into `X` if followed by `H` or `IA`
|
|
122
|
+
{ char: 'c', next: ['h'], prevNot: ['s'], code: 'X' },
|
|
123
|
+
{ char: 'c', next: ['i'], next2: ['a'], code: 'X' },
|
|
124
|
+
// `C` transforms into `S` if followed by `E`, `I` or `Y`
|
|
125
|
+
{ char: 'c', next: ['e', 'i', 'y'], code: 'S' },
|
|
126
|
+
// `D` transforms into `J` if followed by `GE`, `GI` or `GY`
|
|
127
|
+
{ char: 'd', next: ['g'], next2: ['e', 'i', 'y'], code: 'J' },
|
|
128
|
+
// Drop `G` if followed by `H` and `H` is not at the end or before a vowel
|
|
129
|
+
{
|
|
130
|
+
char: 'g',
|
|
131
|
+
next: ['h'],
|
|
132
|
+
next2Not: ['', 'a', 'e', 'i', 'o', 'u'],
|
|
133
|
+
code: ''
|
|
134
|
+
},
|
|
135
|
+
// Drop `G` if followed by `N` or `NED` and is at the end of the string
|
|
136
|
+
{ char: 'g', trailing: 'n', code: '' },
|
|
137
|
+
{ char: 'g', trailing: 'ned', code: '' },
|
|
138
|
+
// `G` transforms into `J` if before `E`, `I` or `Y` and is not a `GG`
|
|
139
|
+
{ char: 'g', next: ['e', 'i', 'y'], prevNot: ['g'], code: 'J' },
|
|
140
|
+
// Drop `H` if after a vowel and not before a vowel
|
|
141
|
+
{
|
|
142
|
+
char: 'h',
|
|
143
|
+
prev: ['a', 'e', 'i', 'o', 'u'],
|
|
144
|
+
nextNot: ['a', 'e', 'i', 'o', 'u'],
|
|
145
|
+
code: ''
|
|
146
|
+
},
|
|
147
|
+
// Drop `H` if after `C`, `G`, `P`, `S` or `T`
|
|
148
|
+
{ char: 'h', prev: ['c', 'g', 'p', 's', 't'], code: '' },
|
|
149
|
+
// Drop `K` if after `C`
|
|
150
|
+
{ char: 'k', prev: ['c'], code: '' },
|
|
151
|
+
// `PH` transforms into `F`
|
|
152
|
+
{ char: 'p', next: ['h'], code: 'F' },
|
|
153
|
+
// `S` transforms into `X` if followed by `H`, `IA` or `IO`
|
|
154
|
+
{ char: 's', next: ['h'], code: 'X' },
|
|
155
|
+
{ char: 's', next: ['i'], next2: ['a', 'o'], code: 'X' },
|
|
156
|
+
// `T` transforms into `X` if followed by `IA` or `IO`
|
|
157
|
+
{ char: 't', next: ['i'], next2: ['a', 'o'], code: 'X' },
|
|
158
|
+
// `TH` transforms into `0` (zero)
|
|
159
|
+
{ char: 't', next: ['h'], code: '0' },
|
|
160
|
+
// Drop `T` if followed by `CH`
|
|
161
|
+
{ char: 't', next: ['c'], next2: ['h'], code: '' },
|
|
162
|
+
// Drop `W` if not followed by a vowel
|
|
163
|
+
{ char: 'w', nextNot: ['a', 'e', 'i', 'o', 'u'], code: '' },
|
|
164
|
+
// `WH` transforms into `W` if at the beginning of the string
|
|
165
|
+
{ char: 'h', leading: 'w', code: '' },
|
|
166
|
+
// `X` transforms into `S` if at the beginning
|
|
167
|
+
{ char: 'x', position: 'start', code: 'S' },
|
|
168
|
+
// Drop `Y` if not followed by a vowel
|
|
169
|
+
{ char: 'y', nextNot: ['a', 'e', 'i', 'o', 'u'], code: '' }
|
|
170
|
+
]
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
export { Metaphone };
|
|
174
|
+
//# sourceMappingURL=Metaphone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Metaphone.js","sources":["../../../src/phonetic/Metaphone.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|