import typing from .Dictionary import Dictionary from ..Enums import Dictionaries, NoteTones, NoteMoods, NoteTypes class DictionaryParser(Dictionary): def __init__(self, note: dict): super().__init__() # Split note text by spaces and coerce into a set self.tokens = self._parse_tokens_from_note(note) # Parse tokens from text in note @staticmethod def _parse_tokens_from_note(note: dict) -> set: tokens = [token.lower() for token in note["text"].split(" ")] return set(tokens) def get_tone(self) -> NoteTones | None: words = self.get_words(Dictionaries.CONTROL)["tone"] if (self.tokens & set(words[NoteTones.INFORMAL.value])): return NoteTones.INFORMAL elif (self.tokens & set(words[NoteTones.FORMAL.value])): return NoteTones.FORMAL return None def get_mood(self) -> NoteMoods | None: words = self.get_words(Dictionaries.CONTROL)["mood"] if (self.tokens & set(words[NoteMoods.FUNNY.value])): return NoteMoods.FUNNY elif (self.tokens & set(words[NoteMoods.DECENT.value])): return NoteMoods.DECENT elif (self.tokens & set(words[NoteMoods.ANNOYED.value])): return NoteMoods.ANNOYED return None def get_type(self) -> NoteTypes | None: words = self.get_words(Dictionaries.CONTROL)["type"] if (self.tokens & set(words[NoteTypes.QUESTION.value])): return NoteTypes.QUESTION elif (self.tokens & set(words[NoteTypes.EXAGGERATED.value])): return NoteTypes.EXAGGERATED elif (self.tokens & set(words[NoteTypes.STATEMENT.value])): return NoteTypes.STATEMENT return None