Prediction ia

Jeremyprog -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, est-il possible de faire un programme de prediction ou ia sur une série de chiffres,
Je ne sais pas si bash ou python serai le plus approprié pour faire cela.
Bon je m'explique
Je voudrais dire au programme que la série
183638je7 correspond à gz83j4f58 et lui il trouve une logique entre ces 2 séries.
Ensuite quand je lui donne une série comme udg374g29, j'aimerai qu'il se sert de sa logique pour me prédire série qui lui correspond

Je sais que ce n'est pas très claire

Je pense lui faire une base de données de référence et à chaque fois que je lui donne une série lui me prédit la suite qui correspond

1 réponse

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    Bonjour,

    Ce que tu cherches correspond à mon avis à une distance d'édition. Dans l'idée, une distance d'édition compare deux chaînes de caractères (disons x et y) et regarde le nombre d'opération d'éditions nécessaire pour transformer x en y. Le jeu d'opération de coût minimal définit la distance entre x et y.

    Il existe plein de distances d'éditions, chacune étant définie par le jeu d'opération d'éditions qu'elles supportent. En particulier la distance de Levenshtein considère les ajouts, insertions, et remplacement de caractères. Une telle distance est généralement calculée par programmation dynamique. Dans le cas de la distance de Levenshtein, on utilise par exemple l'algorithme de Hunt–Szymanski. C'est cet algorithme qui est au cœur de la commande
    diff
    utilisée pour comparer deux fichiers à l'échelle de la ligne.

    Cela signifie que si tu veux comparer deux chaînes de caractères, une stratégie consiste à les écrire, à raison d'un caractère par ligne, puis utiliser
    diff
    te permet de retrouver leurs points communs et/ou leurs différences.

    echo 183638je7 > fichier1
    echo gz83j4f58 > fichier2
    sed 's/./\0\n/g' -i fichier1
    sed 's/./\0\n/g' -i fichier2
    diff --side-by-side fichier1 fichier2


    Ici
    echo
    et
    sed
    sont utilisés pour créer deux fichiers contenant les deux chaînes à comparer à raison d'un caractère par ligne.
    • fichier1

    1
    8
    3
    6
    3
    8
    j
    e
    7
    • fichier2

    g
    z
    8
    3
    j
    4
    f
    5
    8


    La commande
    diff
    retourne la comparaison entre
    fichier1
    et
    fichier2
    :

    (mando@aldur) (~) $ diff --side-by-side fichier1 fichier2
    1 | g
    > z
    8 8
    3 3
    6 <
    3 <
    8 <
    j j
    e | 4
    7 | f
    > 5
    > 8


    Signification :
    • Chaque ligne contenant un < correspond à une suppression ;
    • Chaque ligne contenant un > correspond à un ajout ;
    • Chaque ligne contenant un | correspond à un remplacement ;


    Un outil comme
    kompare
    , basé sur
    diff
    , permet de mieux comprendre :



    Donc ensuite, en fonction de ce que tu veux faire, tu peux avec
    grep
    ignorer les lignes qui contiennent <, > ou | et garder la première colonne de caractère avec
    cut
    :

    diff --side-by-side fichier1 fichier2 | egrep -v "\||<|>" | cut -d" " -f1


    (attention à bien utiliser à passer dans cut le caractère tabulation). Tu peux aussi utiliser
    awk
    :

    diff --side-by-side fichier1 fichier2 | awk '! /\||<|>/ {print $1}'


    Exemple :

    (mando@aldur) (~) $ diff --side-by-side fichier1 fichier2 | awk '! /\||<|>/ {print $1}'
    8
    3
    j


    Mais bon, à un moment, le shell a ses limites, donc si tu as besoin d'aller plus loin, il faut commencer à envisager des langages plus pratique (par exemple le python).

    Bonne chance
    0