Grammalecte  Check-in [4b57907a81]

Overview
Comment:[core][js] fix spell suggestion engine
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | core
Files: files | file ages | folders
SHA3-256: 4b57907a818e5b677a5550ddf81c7672b47e0b971345bd2763c2cb59a07893d5
User & Date: olr on 2017-09-15 10:01:02
Original Comment: [core][js] fx spell suggestion engine
Other Links: manifest | tags
Context
2017-09-15
13:12
[core][js] fix Damerau-Levenshtein distance check-in: 4486055937 user: olr tags: trunk, core
10:01
[core][js] fix spell suggestion engine check-in: 4b57907a81 user: olr tags: trunk, core
08:16
[core][fx] ibdawg: fix bugs, WebExt: retrieve spelling suggestion check-in: d7eb5a15ee user: olr tags: trunk, core, fx
Changes

Modified gc_core/js/ibdawg.js from [8b27735529] to [da811a4bb4].

37
38
39
40
41
42
43
44

45

46
47
48
49
50
51
52
37
38
39
40
41
42
43

44
45
46
47
48
49
50
51
52
53







-
+

+







        */
        if (!this.sHeader.startsWith("/pyfsa/")) {
            throw TypeError("# Error. Not a pyfsa binary dictionary. Header: " + this.sHeader);
        }
        if (!(this.nVersion == "1" || this.nVersion == "2" || this.nVersion == "3")) {
            throw RangeError("# Error. Unknown dictionary version: " + this.nVersion);
        }

        // <dChar> to get the value of an arc, <dCharVal> to get the char of an arc with its value
        this.dChar = helpers.objectToMap(this.dChar);
        this.dCharVal = this.dChar.gl_reverse();
        //this.byDic = new Uint8Array(this.byDic);  // not quicker, even slower

        if (this.cStemming == "S") {
            this.funcStemming = str_transform.getStemFromSuffixCode;
        } else if (this.cStemming == "A") {
            this.funcStemming = str_transform.getStemFromAffixCode;
        } else {
263
264
265
266
267
268
269
270

271
272
273

274
275
276
277
278
279
280
264
265
266
267
268
269
270

271
272
273

274
275
276
277
278
279
280
281







-
+


-
+








    _getTails (iAddr, sTail="", n=2) {
        // return a list of suffixes ending at a distance of <n> from <iAddr>
        let aTails = new Set();
        for (let [nVal, jAddr] of this._getArcs(iAddr)) {
            if (nVal < this.nChar) {
                if (this._convBytesToInteger(this.byDic.slice(jAddr, jAddr+this.nBytesArc)) & this._finalNodeMask) {
                    aTails.add(sTail + this.dChar.get(nVal));
                    aTails.add(sTail + this.dCharVal.get(nVal));
                }
                if (n && aTails.size == 0) {
                    aTails.gl_update(this._getTails(jAddr, sTail+this.dChar.get(nVal), n-1));
                    aTails.gl_update(this._getTails(jAddr, sTail+this.dCharVal.get(nVal), n-1));
                }
            }
        }
        return aTails;
    }

    _suggestWithCrushedUselessChars (sWord, nDeep=0, iAddr=0, sNewWord="", bAvoidLoop=false) {
293
294
295
296
297
298
299
300
301


302
303
304
305
306
307
308
294
295
296
297
298
299
300


301
302
303
304
305
306
307
308
309







-
-
+
+







        }
        return aSugg;
    }

    * _getSimilarArcsAndCrushedChars (cChar, iAddr) {
        // generator: yield similar char of <cChar> and address of the following node
        for (let [nVal, jAddr] of this._getArcs(iAddr)) {
            if (this.dChar.get(nVal, null) in char_player.aVovels) {
                yield [this.dChar[nVal], jAddr];
            if (this.dCharVal.get(nVal, null) in char_player.aVovels) {
                yield [this.dCharVal[nVal], jAddr];
            }
        }
        yield* this._getSimilarArcs(cChar, iAddr);
    }

    // morph (sWord) {
    //     is defined in constructor

Modified gc_core/js/jsex_map.js from [3dc39be41a] to [640f46f082].

39
40
41
42
43
44
45








46
47
48
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56







+
+
+
+
+
+
+
+



    Map.prototype.gl_updateOnlyExistingKeys = function (dDict) {
        for (let [k, v] of dDict.entries()) {
            if (this.has(k)){
                this.set(k, v);
            }
        }
    };

    Map.prototype.gl_reverse = function () {
        let dNewMap = new Map();
        this.forEach((val, key) => {
            dNewMap.set(val, key);
        });
        return dNewMap;
    };

    Map.prototype.grammalecte = true;
}

Modified gc_lang/fr/webext/gce_worker.js from [5edde2a5fd] to [ad4b1695da].

284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
284
285
286
287
288
289
290

291
292
293
294
295
296
297







-








function getSpellSuggestions (sWord, dInfo) {
    if (!oDict) {
        postMessage(createResponse("getSpellSuggestions", "# Error. Dictionary not loaded.", dInfo, true));
        return;
    }
    let aSugg = oDict.suggest(sWord);
    console.log(aSugg);
    postMessage(createResponse("getSpellSuggestions", {sWord: sWord, aSugg: aSugg}, dInfo, true));
}


// Lexicographer

function getListOfTokens (sText, dInfo={}) {