Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

57 строки
1.6 KiB
Python

import logging
import pandas as pd
from fastapi import FastAPI
PATH_TO_SIMILAR_ITEMS = '../../recommendations/similar_items.parquet'
logger = logging.getLogger("uvicorn.error")
class SimilarItems:
def __init__(self, path, **kwargs):
"""
Загружаем данные из файла
"""
logger.info(f"Loading data")
self._similar_items = pd.read_parquet(path)
self._similar_items = self._similar_items[kwargs['columns']]
self._similar_items = self._similar_items.set_index('item_id')
logger.info(f"Loaded")
def get(self, item_id: int, k: int = 10):
"""
Возвращает список k похожих объектов
"""
try:
i2i = self._similar_items.loc[item_id].head(k)
i2i = {"item_id_2": i2i["sim_item_id"].tolist(), "score": i2i['score'].tolist()}
except KeyError:
logger.error("No recommendations found")
i2i = {"item_id_2": [], "score": []}
except:
logger.error("problem with similar recomendations")
return i2i
sim_items_store = SimilarItems(
PATH_TO_SIMILAR_ITEMS,
columns=["item_id", "sim_item_id", "score"])
logger.info("Ready!")
# создаём приложение FastAPI
app = FastAPI(title="features")
@app.get("/similar_items")
async def recommendations(item_id: int, k: int = 10):
"""
Возвращает список похожих объектов длиной k для item_id
"""
i2i = sim_items_store.get(item_id, k)
return i2i