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': '', 'à': '', 'é': '', 'î': '', 'ô': '', 'û': '', 'ÿ': '', 'â': '', 'è': '', 'ï': '', 'ö': '', 'ù': '', 'ŷ': '', |
︙ | ︙ |