consolidator
/
NeuroConsolidator.py
52 строки · 2.3 Кб
1import os2from typing import Any3import requests4import pandas as pd5
6class NeuroConsolidator(object):7"""Класс для укрупнения через нейоросеть8"""
9version = "1.0"10def __init__(self,api_url:str):11"""Конструктор класса12
13Args:
14api_url (str): API Url
15"""
16self.api_url=api_url17
18def send_single_request(self,rec:pd.Series,mat_type_col:str,nomeclature_col:str,mat_type_descr_col:str=None,mat_type_sep:str=",",n_predictions:int=1)->list[tuple[str,float]]:19"""Послать запрос по единичной номенклатуре20
21Args:
22rec (pd.Series): Запись из dataframe
23mat_type_col (str): Колонка Вида материала (сложный или простой)
24nomeclature_col (str): Колонка номенклатуры
25mat_type_descr_col (str, optional): Колонка описания вида метариала. Defaults to None.
26mat_type_sep (str, optional): Разделитель сложного вида материала. Defaults to ",".
27n_predictions (int, optional): Количество вариантов. Defaults to 1.
28
29Returns:
30list[tuple[str,float]]: Набор результатов
31"""
32try:33nomeclature=str(rec[nomeclature_col])34mat_type_code=None35mat_type_descr=None36if mat_type_descr_col is None:37mat_type_splt = str(rec[mat_type_col]).split(mat_type_sep)38mat_type_code = mat_type_splt[0].strip()39mat_type_descr = mat_type_splt[1].strip()40else:41mat_type_code = str(rec[mat_type_col])42mat_type_descr = str(rec[mat_type_descr_col])43request_data = {"data":[{"type_code":mat_type_code,"material_type":mat_type_descr,"name":nomeclature}], "n_predictions":n_predictions}44response = requests.post(self.api_url,json=request_data)45rjson = response.json()46result_dict:dict = rjson["predictions"][0]47result = []48for key in result_dict.keys():49prc = round(float(result_dict[key])*100,1)50result.append((key,prc))51return result52except: raise