Files
cool-domain/cool_domain/word_list.py
T

37 lines
1.0 KiB
Python

import logging
import pathlib
import re
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:
return re.sub(r"[^a-z0-9-]", "", unidecode.unidecode(word.strip()).lower())
def close(self) -> None:
pass
def __enter__(self) -> typing.Self:
self.open()
return self
def __exit__(self, *_: object) -> None:
self.close()