Overview
| Comment: | [fx][bug] ibdawg: suggestion mechanism > fix calculation between words in JS |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk | fx |
| Files: | files | file ages | folders |
| SHA3-256: |
5ac4660b3050848f8fbe5cbda1d65a35 |
| User & Date: | olr on 2017-10-28 11:56:22 |
| Other Links: | manifest | tags |
Context
|
2017-10-28
| ||
| 12:04 | [fx] Menu buttons: option true by default for editable nodes check-in: 4dd50863c2 user: olr tags: trunk, fx | |
| 11:56 | [fx][bug] ibdawg: suggestion mechanism > fix calculation between words in JS check-in: 5ac4660b30 user: olr tags: trunk, fx | |
| 11:15 | [fx] Menu buttons: option false by default for editable nodes check-in: 35238657b4 user: olr tags: trunk, fx | |
Changes
Modified gc_core/js/char_player.js from [fa4a550e43] to [f5b2267e7d].
| ︙ | ︙ | |||
19 20 21 22 23 24 25 |
cleanWord: function (sWord) {
// word simplication before calculating distance between words
sWord = sWord.toLowerCase();
let sRes = "";
for (let c of sWord) {
sRes += this._dTransChars.gl_get(c, c);
}
| | | 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
cleanWord: function (sWord) {
// word simplication before calculating distance between words
sWord = sWord.toLowerCase();
let sRes = "";
for (let c of sWord) {
sRes += this._dTransChars.gl_get(c, c);
}
return sRes.replace("eau", "o").replace("au", "o");
},
distanceDamerauLevenshtein: function (s1, s2) {
// distance of Damerau-Levenshtein between <s1> and <s2>
// https://fr.wikipedia.org/wiki/Distance_de_Damerau-Levenshtein
try {
let nLen1 = s1.length;
|
| ︙ | ︙ | |||
59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
return matrix[nLen1][nLen2];
}
catch (e) {
helpers.logerror(e);
}
},
// Method: Remove Useless Chars
aVovels: new Set([
'a', 'e', 'i', 'o', 'u', 'y',
'à', 'é', 'î', 'ô', 'û', 'ÿ',
'â', 'è', 'ï', 'ö', 'ù', 'ŷ',
| > > > > > > | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
return matrix[nLen1][nLen2];
}
catch (e) {
helpers.logerror(e);
}
},
showDistance (s1, s2) {
let s1b = this.cleanWord(s1);
let s2b = this.cleanWord(s2);
console.log(`Distance: ${s1} / ${s2} = ${this.distanceDamerauLevenshtein(s1, s2)})`);
console.log(`Distance: ${s1b} / ${s2b} = ${this.distanceDamerauLevenshtein(s1b, s2b)})`);
},
// Method: Remove Useless Chars
aVovels: new Set([
'a', 'e', 'i', 'o', 'u', 'y',
'à', 'é', 'î', 'ô', 'û', 'ÿ',
'â', 'è', 'ï', 'ö', 'ù', 'ŷ',
|
| ︙ | ︙ |
Modified gc_core/js/ibdawg.js from [d3a144f471] to [c87880e4ad].
| ︙ | ︙ | |||
200 201 202 203 204 205 206 |
aSugg.gl_update(this._suggest(sWord.toLowerCase(), nMaxDel, nMaxHardRepl));
}
else if (sWord.gl_isLowerCase()) {
aSugg.gl_update(this._suggest(sWord.gl_toCapitalize(), nMaxDel, nMaxHardRepl));
}
// Set to Array
aSugg = Array.from(aSugg);
| | | | 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
aSugg.gl_update(this._suggest(sWord.toLowerCase(), nMaxDel, nMaxHardRepl));
}
else if (sWord.gl_isLowerCase()) {
aSugg.gl_update(this._suggest(sWord.gl_toCapitalize(), nMaxDel, nMaxHardRepl));
}
// Set to Array
aSugg = Array.from(aSugg);
aSugg = char_player.filterSugg(aSugg);
if (sWord.gl_isTitle()) {
aSugg = aSugg.map((sSugg) => { return sSugg.gl_toCapitalize(); });
}
let dDistTemp = new Map();
let sCleanWord = char_player.cleanWord(sWord);
aSugg.forEach((sSugg) => { dDistTemp.set(sSugg, char_player.distanceDamerauLevenshtein(sCleanWord, char_player.cleanWord(sSugg))); });
aSugg = aSugg.sort((sA, sB) => { return dDistTemp.get(sA) - dDistTemp.get(sB); }).slice(0, nMaxSugg);
dDistTemp.clear();
if (sSfx || sPfx) {
// we add what we removed
return aSugg.map( (sSugg) => { return sPfx + sSugg + sSfx } );
}
|
| ︙ | ︙ |
Modified gc_core/py/char_player.py from [3de4d3c435] to [97f69bd70d].
| ︙ | ︙ | |||
37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
d[i, j-1] + 1, # Insertion
d[i-1, j-1] + nCost, # Substitution
)
if i and j and s1[i] == s2[j-1] and s1[i-1] == s2[j]:
d[i, j] = min(d[i, j], d[i-2, j-2] + nCost) # Transposition
return d[nLen1-1, nLen2-1]
# Method: Remove Useless Chars
_dVovels = {
'a': '', 'e': '', 'i': '', 'o': '', 'u': '', 'y': '',
'à': '', 'é': '', 'î': '', 'ô': '', 'û': '', 'ÿ': '',
'â': '', 'è': '', 'ï': '', 'ö': '', 'ù': '', 'ŷ': '',
| > > > > > > > | 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
d[i, j-1] + 1, # Insertion
d[i-1, j-1] + nCost, # Substitution
)
if i and j and s1[i] == s2[j-1] and s1[i-1] == s2[j]:
d[i, j] = min(d[i, j], d[i-2, j-2] + nCost) # Transposition
return d[nLen1-1, nLen2-1]
def showDistance (s1, s2):
s1b = cleanWord(s1);
s2b = cleanWord(s2);
print(f"Distance: {s1} / {s2} = {distanceDamerauLevenshtein(s1, s2)}")
print(f"Distance: {s1b} / {s2b} = {distanceDamerauLevenshtein(s1b, s2b)}")
# Method: Remove Useless Chars
_dVovels = {
'a': '', 'e': '', 'i': '', 'o': '', 'u': '', 'y': '',
'à': '', 'é': '', 'î': '', 'ô': '', 'û': '', 'ÿ': '',
'â': '', 'è': '', 'ï': '', 'ö': '', 'ù': '', 'ŷ': '',
|
| ︙ | ︙ |