cmpstr
Version:
CmpStr is a lightweight, fast and well performing package for calculating string similarity
119 lines (115 loc) • 4.08 kB
JavaScript
// CmpStr v3.2.2 build-bb61120-260311 by Paul Köhler @komed3 / MIT License
;
var Phonetic = require('./Phonetic.cjs');
class Caverphone extends Phonetic.Phonetic {
static REGEX = { uppercase: /[^A-Z]/gi };
static default = {
map: 'en2',
delimiter: ' ',
length: -1,
pad: '',
dedupe: false
};
constructor(opt = {}) {
super('caverphone', opt);
}
encode(word) {
word = word.replace(Caverphone.REGEX.uppercase, '').toLowerCase();
return super.encode(word);
}
mapChar = (char) => char;
adjustCode = (code) => code.toUpperCase();
}
Phonetic.PhoneticRegistry.add('caverphone', Caverphone);
Phonetic.PhoneticMappingRegistry.add('caverphone', 'en1', {
options: { length: 6, pad: '1' },
map: {},
patterns: [
{ pattern: /^(c|r|t|en)ough/, replace: '$1ou2f' },
{ pattern: /^gn/, replace: '2n' },
{ pattern: /mb$/, replace: 'm2' },
{ pattern: /cq/g, replace: '2q' },
{ pattern: /c(e|i|y)/g, replace: 's$1' },
{ pattern: /tch/g, replace: '2ch' },
{ pattern: /[cqx]/g, replace: 'k' },
{ pattern: /v/g, replace: 'f' },
{ pattern: /dg/g, replace: '2g' },
{ pattern: /ti(a|o)/g, replace: 'si$1' },
{ pattern: /d/g, replace: 't' },
{ pattern: /ph/g, replace: 'fh' },
{ pattern: /b/g, replace: 'p' },
{ pattern: /sh/g, replace: 's2' },
{ pattern: /z/g, replace: 's' },
{ pattern: /^[aeiou]/, replace: 'A' },
{ pattern: /[aeiou]/g, replace: '3' },
{ pattern: /3gh3/g, replace: '3kh3' },
{ pattern: /gh/g, replace: '22' },
{ pattern: /g/g, replace: 'k' },
{ pattern: /s+/g, replace: 'S' },
{ pattern: /t+/g, replace: 'T' },
{ pattern: /p+/g, replace: 'P' },
{ pattern: /k+/g, replace: 'K' },
{ pattern: /f+/g, replace: 'F' },
{ pattern: /m+/g, replace: 'M' },
{ pattern: /n+/g, replace: 'N' },
{ pattern: /j/g, replace: 'y' },
{ pattern: /l3/g, replace: 'L3' },
{ pattern: /r3/g, replace: 'R3' },
{ pattern: /w3/g, replace: 'W3' },
{ pattern: /y3/g, replace: 'Y3' },
{ pattern: /ly/g, replace: 'Ly' },
{ pattern: /ry/g, replace: 'Ry' },
{ pattern: /wy/g, replace: 'Wy' },
{ pattern: /wh3/g, replace: 'Wh3' },
{ pattern: /why/g, replace: 'Why' },
{ pattern: /^h/, replace: 'A' },
{ pattern: /[hlrwy23]/g, replace: '' }
]
});
Phonetic.PhoneticMappingRegistry.add('caverphone', 'en2', {
options: { length: 10, pad: '1' },
map: {},
patterns: [
{ pattern: /e$/, replace: '' },
{ pattern: /^(c|r|t|en|tr)ough/, replace: '$1ou2f' },
{ pattern: /^gn/, replace: '2n' },
{ pattern: /mb$/, replace: 'm2' },
{ pattern: /cq/g, replace: '2q' },
{ pattern: /c(e|i|y)/g, replace: 's$1' },
{ pattern: /tch/g, replace: '2ch' },
{ pattern: /[cqx]/g, replace: 'k' },
{ pattern: /v/g, replace: 'f' },
{ pattern: /dg/g, replace: '2g' },
{ pattern: /ti(a|o)/g, replace: 'si$1' },
{ pattern: /d/g, replace: 't' },
{ pattern: /ph/g, replace: 'fh' },
{ pattern: /b/g, replace: 'p' },
{ pattern: /sh/g, replace: 's2' },
{ pattern: /z/g, replace: 's' },
{ pattern: /^[aeiou]/, replace: 'A' },
{ pattern: /[aeiou]/g, replace: '3' },
{ pattern: /j/g, replace: 'y' },
{ pattern: /^y3/, replace: 'Y3' },
{ pattern: /^y/, replace: 'A' },
{ pattern: /y/g, replace: '3' },
{ pattern: /3gh3/g, replace: '3kh3' },
{ pattern: /gh/g, replace: '22' },
{ pattern: /g/g, replace: 'k' },
{ pattern: /s+/g, replace: 'S' },
{ pattern: /t+/g, replace: 'T' },
{ pattern: /p+/g, replace: 'P' },
{ pattern: /k+/g, replace: 'K' },
{ pattern: /f+/g, replace: 'F' },
{ pattern: /m+/g, replace: 'M' },
{ pattern: /n+/g, replace: 'N' },
{ pattern: /l3/g, replace: 'L3' },
{ pattern: /r3/g, replace: 'R3' },
{ pattern: /w3/g, replace: 'W3' },
{ pattern: /wh3/g, replace: 'Wh3' },
{ pattern: /[lrw]$/, replace: '3' },
{ pattern: /^h/, replace: 'A' },
{ pattern: /3$/, replace: 'A' },
{ pattern: /[hlrw23]/g, replace: '' }
]
});
exports.Caverphone = Caverphone;