Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
44 строки
1.3 KiB
Python
44 строки
1.3 KiB
Python
import logging as logger
|
|
import pandas as pd
|
|
|
|
class Recommendations:
|
|
|
|
def __init__(self):
|
|
|
|
self._recs = {"personal": None, "default": None}
|
|
|
|
def load(self, rec_type, path, **kwargs):
|
|
"""
|
|
Загружает рекомендации из файла
|
|
"""
|
|
|
|
logger.info(f"Loading recommendations, type: {rec_type}")
|
|
self._recs[rec_type] = pd.read_parquet(path, **kwargs)
|
|
if rec_type == "personal":
|
|
self._recs[rec_type] = self._recs[rec_type].set_index("user_id")
|
|
logger.info(f"Loaded")
|
|
|
|
def get(self, user_id: int, k: int=100):
|
|
"""
|
|
Возвращает список рекомендаций для пользователя
|
|
"""
|
|
try:
|
|
recs = self._recs["personal"].loc[user_id]
|
|
recs = recs["item_id"].to_list()[:k]
|
|
except KeyError:
|
|
recs = self._recs["default"]
|
|
recs = recs["item_id"].to_list()[:k]
|
|
except:
|
|
logger.error("No recommendations found")
|
|
recs = []
|
|
|
|
if not recs:
|
|
logger.warning(f"No default recommendations available for user {user_id}")
|
|
recs = []
|
|
else:
|
|
logger.info(f'recs: {recs}')
|
|
|
|
return recs
|
|
|
|
|