import json from .feature_extractor import FeatureExtractor from .recommender import Recommender from .ranking_engine import RankingEngine from .explanation_generator import ExplanationGenerator class ExplainableRecsPipeline: def __init__(self): self.f=FeatureExtractor(); self.r=Recommender() self.k=RankingEngine(); self.e=ExplanationGenerator() def __call__(self,u_path,i_path): u=json.load(open(u_path))[0] items=json.load(open(i_path)) uf=self.f.extract_user_features(u) scored=[] for it in items: itf=self.f.extract_item_features(it) s=self.r.score(uf,itf) exp=self.e.generate(uf,itf) scored.append({'item_id':it['id'],'score':s,'explanation':exp}) return self.k.rank(scored)