nanom's picture
First commit
703bf01
raw
history blame
2.46 kB
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 = """
<center>
<div class="alert alert-warning" role="alert">
<h6><b>{}</b></h6>
</div>
</center>
"""
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 '<b>{verb}</b>' has not been found or not spelled correctly!"
)
return error, infinitive, past, participle
return error, infinitive, past, participle