#!/usr/bin/python3
import sys
import json
from tools_prediction import do_predictions
from models import model_init
import plac
import logging
# parametres cli
@plac.annotations(
profondeur=("profondeur = nombre de code par document" ,"option", "p", int ),
)
def main(profondeur=3):
# test hauteur maxi de l arbo des modeles
hauteur_maxi = 3
if (profondeur not in range(1,hauteur_maxi+1)):
logging.error("Tree model not correct!")
exit(1)
compteur=0
# lecture ligne a ligne sur lentrée standard
# 1 ligne = un json {}
for json_line in sys.stdin:
# deserialisation json
compteur += 1
try:
data = json.loads(json_line)
# trace
#print("******** FORMAT OK : id:{}".format(data["id"]))
except json.decoder.JSONDecodeError:
logging.error("Input format problem line :{} : String could not be converted to JSON".format(compteur))
exit(1)
# execution de la prediction
param = (data["value"], int(profondeur))
result= do_predictions(*param, **model_init)
# Supprimer le code "003" s'il est en debut de code pour les niveaux 2 et 3
for level in result :
if level["code"].startswith("003") :
if level["code"] == "003" :
pass
else :
level["code"] = level["code"][3:]
data["value"]=result
# serialisation json et ecriture sur la sortie standard
sys.stdout.write(json.dumps(data))
sys.stdout.write("\n")
if __name__ == "__main__":
if False:
import cProfile
import pstats
cProfile.runctx("plac.call(main)", globals(), locals(), "Profile.prof")
s = pstats.Stats("Profile.prof")
s.strip_dirs().sort_stats("time").print_stats()
else:
plac.call(main)