Make the simple spell checker use a set instead of a list

This commit is contained in:
Veronica K. B. Olsen
2021-02-12 20:15:28 +01:00
parent 14d205f845
commit a3b46581b0
+12 -11
View File
@@ -238,7 +238,7 @@ class NWSpellSimple(NWSpellCheck):
when no other is available. This method is fairly slow compared to
other implementations.
"""
WORDS = []
theWords = set()
def __init__(self):
NWSpellCheck.__init__(self)
@@ -250,17 +250,19 @@ class NWSpellSimple(NWSpellCheck):
"""Load a dictionary as a list from the app assets folder.
"""
self.theLang = theLang
self.WORDS = []
self.theWords = set()
dictFile = os.path.join(self.mainConf.dictPath, theLang+".dict")
try:
with open(dictFile, mode="r", encoding="utf-8") as wordsFile:
for theLine in wordsFile:
if len(theLine) == 0 or theLine.startswith("#"):
continue
self.WORDS.append(theLine.strip().lower())
logger.debug("Spell check word list for language %s loaded" % theLang)
logger.debug("Word list contains %d words" % len(self.WORDS))
self.theWords.add(theLine.strip().lower())
logger.debug("Spell check dictionary for language %s loaded" % theLang)
logger.debug("Dictionary contains %d words" % len(self.theWords))
self.spellLanguage = theLang
except Exception as e:
logger.error("Failed to load spell check word list for language %s" % theLang)
logger.error(str(e))
@@ -268,8 +270,7 @@ class NWSpellSimple(NWSpellCheck):
self._readProjectDictionary(projectDict)
for pWord in self.projDict:
if pWord not in self.WORDS:
self.WORDS.append(pWord)
self.theWords.add(pWord)
return
@@ -279,7 +280,7 @@ class NWSpellSimple(NWSpellCheck):
word by the syntax highlighter.
"""
theWord = theWord.replace(self.mainConf.fmtApostrophe, "'").lower()
return theWord in self.WORDS
return theWord in self.theWords
def suggestWords(self, theWord):
"""Get suggestions for correct word from difflib, and make sure
@@ -292,7 +293,7 @@ class NWSpellSimple(NWSpellCheck):
if len(theWord) == 0:
return []
theMatches = difflib.get_close_matches(theWord.lower(), self.WORDS, n=10, cutoff=0.75)
theMatches = difflib.get_close_matches(theWord.lower(), self.theWords, n=10, cutoff=0.75)
theOptions = []
for aWord in theMatches:
if len(aWord) == 0:
@@ -308,8 +309,8 @@ class NWSpellSimple(NWSpellCheck):
"""Wrapper for the internal project dictionary feature.
"""
newWord = newWord.strip().lower()
if newWord not in self.WORDS:
self.WORDS.append(newWord)
if newWord not in self.theWords:
self.theWords.add(newWord)
NWSpellCheck.addWord(self, newWord)
return