import subprocess import spacy import pyinflect from typing import Tuple, Union class Parser: def __init__( self ) -> None: self.parser = self.__init_parser("en_core_web_md") def __init_parser( self, model: str ) -> spacy.language: parser = None try: parser = spacy.load(model) except: print(f"* Downloading {model} model...") _ = subprocess.Popen( f"python -m spacy download {model}", stdout=subprocess.PIPE, shell=True ).communicate() parser = spacy.load(model) return parser def __v2participle( self, tk_verb: spacy.tokens.token.Token ) -> Union[str, None]: return tk_verb._.inflect('VBN') def __v2past( self, tk_verb: spacy.tokens.token.Token ) -> Union[str, None]: return tk_verb._.inflect('VBD') def __v2infinitive( self, tk_verb: spacy.tokens.token.Token ) -> Union[str, None]: return tk_verb._.inflect('VB') def __tokenizer( self, verb: str ) -> spacy.tokens.token.Token: return self.parser(verb)[0] def ___format_error( self, error: str ) -> str: template = """
""" return template.format(error) def get_verbs( self, verb: str ) -> Tuple[str,str,str]: verb = verb.strip().lower() error, infinitive, past, participle = "", "", "", "" if verb == "": error = self.___format_error( f"Error: The Verb field can not be empty!" ) return error, infinitive, past, participle tk_verb = self.__tokenizer(verb) infinitive = self.__v2infinitive(tk_verb) past = self.__v2past(tk_verb) participle = self.__v2participle(tk_verb) if infinitive is None or past is None or participle is None: error = self.___format_error( f"Error: The verb '{verb}' has not been found or not spelled correctly!" ) return error, infinitive, past, participle return error, infinitive, past, participle