Index: gc_core/py/char_player.py ================================================================== --- gc_core/py/char_player.py +++ gc_core/py/char_player.py @@ -25,18 +25,19 @@ # Similar chars d1to1 = { "1": "li", - "2": "e", + "2": "z", "3": "e", "4": "aà", "5": "ge", "6": "bd", "7": "lt", "8": "b", "9": "gbd", + "0": "o", "a": "aàâáäæ", "à": "aàâáäæ", "â": "aàâáäæ", "á": "aàâáäæ", @@ -137,16 +138,17 @@ d2toX = { "an": ("en",), "en": ("an",), "ai": ("ei", "é", "è", "ê", "ë"), - "ei": ("ai", "ait", "ais", "é", "è", "ê", "ë"), + "ei": ("ai", "é", "è", "ê", "ë"), "ch": ("sh", "c", "ss"), "ct": ("x", "cc"), "oa": ("oi",), "oi": ("oa", "oie"), "qu": ("q", "cq", "ck", "c", "k"), + "ss": ("c", "ç"), } # End of word Index: gc_core/py/ibdawg.py ================================================================== --- gc_core/py/ibdawg.py +++ gc_core/py/ibdawg.py @@ -152,18 +152,18 @@ if self.lookup(sWord): return True if sWord[0:1].isupper(): if len(sWord) > 1: if sWord.istitle(): - return bool(self.lookup(sWord.lower())) + return self.lookup(sWord.lower()) if sWord.isupper(): if self.bOptNumSigle: return True - return bool(self.lookup(sWord.lower()) or self.lookup(sWord.capitalize())) - return bool(self.lookup(sWord[:1].lower() + sWord[1:])) + return self.lookup(sWord.lower()) or self.lookup(sWord.capitalize()) + return self.lookup(sWord[:1].lower() + sWord[1:]) else: - return bool(self.lookup(sWord.lower())) + return self.lookup(sWord.lower()) return False def lookup (self, sWord): "returns True if in dictionary (strict verification)" iAddr = 0 @@ -171,11 +171,11 @@ if c not in self.dChar: return False iAddr = self._lookupArcNode(self.dChar[c], iAddr) if iAddr == None: return False - return int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask + return bool(int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask) def suggest (self, sWord): "returns a set of similar words" # first, we check for similar words #return set(self._suggestWithCrushedUselessChars(cp.clearWord(sWord))) @@ -190,11 +190,11 @@ def _suggest (self, sWord, nDeep=0, iAddr=0, sNewWord="", bAvoidLoop=False): # RECURSIVE FUNCTION if not sWord: if int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask: - show(nDeep, "!!! " + sNewWord + " !!!") + show(nDeep, "___" + sNewWord + "___") return [sNewWord] return [] #show(nDeep, "<" + sWord + "> ===> " + sNewWord) lSugg = [] cCurrent = sWord[0:1] @@ -207,10 +207,13 @@ # same char, we remove 1 char without adding 1 to lSugg.extend(self._suggest(sWord[1:], nDeep+1, iAddr, sNewWord)) for sRepl in cp.d1toX.get(cCurrent, ()): #show(nDeep, sRepl) lSugg.extend(self._suggest(sRepl + sWord[1:], nDeep+1, iAddr, sNewWord, True)) + for sRepl in cp.d2toX.get(sWord[0:2], ()): + #show(nDeep, sRepl) + lSugg.extend(self._suggest(sRepl + sWord[2:], nDeep+1, iAddr, sNewWord, True)) if len(sWord) == 2: for sRepl in cp.dFinal2.get(sWord, ()): #show(nDeep, sRepl) lSugg.extend(self._suggest(sRepl, nDeep+1, iAddr, sNewWord, True)) elif len(sWord) == 1: