import logging import pathlib import typing import unidecode class WordList: __slots__ = ["__filepath", "__name", "logger", "words"] def __init__(self, name: str, path: str) -> None: self.logger: logging.Logger = logging.getLogger(self.__class__.__name__) self.__name = name self.__filepath = pathlib.Path(__file__).parent / ".." / path self.words: list[str] = [] def open(self) -> None: with self.__filepath.open(encoding="utf-8") as file: self.words = list( filter(lambda v: len(v) > 0, map(self.__escape_word, file.readlines())) ) self.logger.info("[%s] Loaded %d words", self.__name, len(self.words)) def __escape_word(self, word: str) -> str: word = unidecode.unidecode(word.strip()).lower() if " " in word: return "" return word def close(self) -> None: pass def __enter__(self) -> typing.Self: self.open() return self def __exit__(self, *_: object) -> None: self.close()