from abc import ABC, abstractmethod from pandas import DataFrame import re import pickle class ClassicSearchBackend(ABC): @abstractmethod def submit(self, query:str)->DataFrame: pass @abstractmethod def get_num_items(self)->int: pass class ImplClassicSearchBackend(ClassicSearchBackend): def __init__(self): super().__init__() with open("./himitsudogu_db.pkl", "rb") as file: self.himitsudogu_db: dict = pickle.load(file) def submit(self, query: str) -> DataFrame: pattern = ".*"+query+".*" output = DataFrame(columns=["名前","説明"]) for i,(name,description) in enumerate(zip( self.himitsudogu_db["name_s"],self.himitsudogu_db["description_s"] )): if re.match(pattern,name+description): output.loc[i] = [ name, description ] return output def get_num_items(self)->int: return len(self.himitsudogu_db["name_s"])