# Service de classification automatique générique permettant de construire des modèles à partir
# de corpus d'apprentissage et de les exploiter ensuite pour la prédiction
# Deux modes sont disponibles, mode docker et mode en ligne de commande

##############################
## Mode docker ###############
##############################

$ docker-compose up -d --build
Autre alternative
$ ./rebuild.sh

##############################
## Mode ligne de commande ####
##############################

=> PREREQUIS: Python 3.7

1- Lancer le Service
$ python clfServer.py -p 8087  (defaults)

2- Construire un modèle
$ /opt/albert/bin/albScript -f test.js 
    +m mymodel                                                       # Nom du modèle
    +i ~/Projets/R-D/TopicLive/data/scenarios/full_sc1_81/train.json # Corpus d'apprentissage
    +e ~/Projets/R-D/TopicLive/data/scenarios/full_sc1_81/test.json  # Corpus de test (optionnel)
    +n 100                                                           # Nombre de documents utilisés
    +t title,desc                                                    # Liste des champs textuels à utiliser
    +f domain,aut                                                    # Liste de metadonnées à utiliser
    +l statut                                                        # Nom du champ portant la catégorie du document

- Le script test.js envoie des requêtes au Web Service via son API REST (voir guide de référence AmiTMGuide.pdf pour
les détails de l'API). Les corpus d'apprentissage et de test fournissent une liste de documents définis chacun par
une liste de champs textuels et métadonnées, au format JSON. Un exemple est fourni par le fichier sample.json
- La tâche est asynchrone et retourre avant la fin de la construction du modèle.

3- Vérifier si un modèle est prêt
$ /opt/albert/bin/albScript -f test.js 
    +m mymodel    # Nom du modèle

Renvoie le statut du modèle au fomart JSON, en particulier les champs 'statut' et 'scode' fournissent cette
information.

{
    "modelname": "mymodel",
    ...
    "fscore": 0.68,
    "scode": 0,
    "status": "The model is ready to use"
}

scode = 0 # Le modèle est prêt
scode = 1 # Le modèle est en cours de construction
scode = 2 # Aucun modèle trouvé
scode = 3 # Une erreur est survenue durant la construction du modèle

4- Exploiter un modèle
/opt/albert/bin/albScript -f test.js 
    +m mymodel                                                       # Nom du modèle
    +e ~/Projets/R-D/TopicLive/data/scenarios/full_sc1_81/test.json  # Corpus de documents à traiter

Fournit pour chacun des documents listé dans le corpus de documents à traiter, une catégorie prédite
 {
    "total": 379,
    "cats": [
        "publie",
        "publie",
        "refuse",
        ...
    ]
}


############################################################
## Application à la validation automatique de documents ####
############################################################

Pour construire ou mettre à jour des modèles correspondants à chacun des scénarios:

1) Fournir l'adresse du clasifieur à utiliser (AMI_CLASSIFIER_URL) ainsi que le dossier à utiliser pour stocker
les données d'apprentissage collectées (AMI_CLASSIFIER_CACHE).
Pour ce faire, définir dans le fichier de configuration global (Ami/conf/ami_config.js):
    _Cf('AMI_CLASSIFIER_URL', 'http://localhost:8087/');
    _Cf('AMI_CLASSIFIER_CACHE', '/opt/albert/classifier/');

2) Déclarer la liste des identifiants de scénarios concernés par la construction de modèle (dans le fichier spécifique
 à chaque compte client Ami/conf/??_configuration.json)
    _Cf("AMI_AUTO_VALIDATION_SCENARIOS", "4501,4844,4640,3918");

3) Lancer la construction de modèles:
cd /opt/albert/;
// Pour tous les sujets/scénarios indiqués dans AMI_AUTO_VALIDATION_SCENARIOS
./bin/albScript -f scripts/coll/auto_validate.js +v +a 206

Si on souhaite utiliser le cache pour sauvegarder les données collectées, faire:
./bin/albScript -f scripts/coll/auto_validate.js +v +a 206 +c

// Pour un scénario spécifique
./bin/albScript -f scripts/coll/auto_validate.js +v +a 206 +c +s 3918

// Vérifier le statut du modèle
./bin/albScript -f scripts/coll/auto_validate.js +v +a 206 +c +s 3918 status

4) Utiliser les modèles pour la prédiction (AMIEI <= 9.0)
Utiliser le mécanisme de personnalisation via  AMI_SUBJECT_POST_PROCESS_SCRIPT
Dans ??_configuration.json,
"GLOBAL": {
    "AMI_SUBJECT_POST_PROCESS_SCRIPT" : "conf/auto_validate_process.js"
}
cp scripts/auto_validate_process.js ??/Ami/conf/

Vérifier ensuite que les logs de la collecte contiennent bien les deux métadonnées supplémentaires:
<p_statut> et <mood>. Elles contiennet toutes les deux la même valeur du statut prédit (publie/refuse)
mais seul <mood> pourrait être altérée par l'utilisateur lorqu'elle sera affichée.

5) Afficher le statut prédit via la colonne <mood>
Dans ??_configuration.json,
"GLOBAL": {
    "AMI_DOC_MOOD" : true,
    "AMI_COLL_CUSTOM_KEYS" : "mood,p_statut"
}

Puis aller dans AMIEI, Organiser, Edition des préférences, Colonnes pour la vue par titres, Ajouter => Tonalité
