| 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) | |