@@ -189,17 +189,16 @@ # first, we check for similar words #return self._suggestWithCrushedUselessChars(cp.clearWord(sWord)) aSugg = self._suggest(sWord) if not aSugg: aSugg.update(self._suggest(sWord[1:])) - aSugg.update(self._suggest(sWord[:-1])) - aSugg.update(self._suggest(sWord[1:-1])) if not aSugg: aSugg.update(self._suggestWithCrushedUselessChars(cp.clearWord(sWord))) return aSugg def _suggest (self, sWord, nDeep=0, iAddr=0, sNewWord="", bAvoidLoop=False): + "returns a set of suggestions for " # recursive function aSugg = set() if not sWord: if int.from_bytes(self.byDic[iAddr:iAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask: #show(nDeep, "___" + sNewWord + "___") @@ -228,10 +227,11 @@ #show(nDeep, sRepl) aSugg.update(self._suggest(sRepl, nDeep+1, iAddr, sNewWord, True)) elif len(sWord) == 1: #show(nDeep, ":end of word:") # end of word + aSugg.update(self._suggest("", nDeep+1, iAddr, sNewWord, True)) for sRepl in cp.dFinal1.get(sWord, ()): #show(nDeep, sRepl) aSugg.update(self._suggest(sRepl, nDeep+1, iAddr, sNewWord, True)) return aSugg @@ -248,11 +248,11 @@ aTails = set() for nVal, jAddr in self._getArcs(iAddr): if nVal < self.nChar: if int.from_bytes(self.byDic[jAddr:jAddr+self.nBytesArc], byteorder='big') & self._finalNodeMask: aTails.add(sTail + self.dCharVal[nVal]) - if n: + if n and not aTails: aTails.update(self._getTails(jAddr, sTail+self.dCharVal[nVal], n-1)) return aTails def _suggestWithCrushedUselessChars (self, sWord, nDeep=0, iAddr=0, sNewWord="", bAvoidLoop=False): aSugg = set() @@ -270,15 +270,11 @@ def _getSimilarArcsAndCrushedChars (self, cChar, iAddr): "generator: yield similar char of and address of the following node" for nVal, jAddr in self._getArcs(iAddr): if self.dCharVal.get(nVal, None) in cp.aUselessChar: yield (self.dCharVal[nVal], jAddr) - for c in cp.d1to1.get(cChar, [cChar]): - if c in self.dChar: - jAddr = self._lookupArcNode(self.dChar[c], iAddr) - if jAddr: - yield (c, jAddr) + yield from self._getSimilarArcs(cChar, iAddr) def drawPath (self, sWord, iAddr=0): cChar = sWord[0:1] if sWord else " " iPos = -1 n = 0