Un exemple de modèlisation très simple

Admettons de vouloir savoir si deux textes sont identiques.

Le modèle représentationnel

La première chose qu’il sera nécessaire de faire c’est de définir l’ensemble des mots qui composent cette phrase: “deux textes sont identiques”.

Il faudra donc d’abord définir ce que nous entendons par “texte” et ensuite ce que nous entendons par “identique”, mais aussi, si nous voulons être précis, ce que le mot “deux” signifie.

Ces définitions seront données en language naturel - dans notre cas en français - et devront être le plus explicites et le moins ambigües possible. Ce travail de définition et désambiguation est ce qu’on appelle modèle représentationnel. Il s’agit de donner une représentation du monde, de le décrire précisement.

Bien évidemment on peut donner des définitions très différentes de chaque terme. C’est là l’intérêt de cette première phase.

Commençons donc:

  • Nous dirons d’abord que le mot “deux” correspond au nombre naturel 2. Cela est assez évident, mais ce n’est pas neutre. En affirmant que “deux” est égal à 2, par exemple, nous affirmons que dans notre modèle nous allons mettre entre parenthèses les langues. “Two”, “due”, “zwei”… nous considérerons qu’il n’y a aucune différence entre ces mots.

  • Nous définirons ensuite le mot “texte” comme correspondant à une chaîne de caractères. Une série de lettres et d’autres types de caractères mis l’un après l’autre dans un ordre défini. Cette définition est utile à nos objectifs, mais pas du tout neutre: par exemple dans cette définition nous avons complètement ignoré le fait qu’un texte puisse avoir un sens. Selon notre définition “sakjh?5$ds kjdsy dsyte 22/@” est un texte tout comme “Ce toit tranquille, où marchent des colombes”. Évidemment il s’agit d’une définition très minimaliste du texte…

  • Nous diront ensuite que deux textes sont identiques si et seulement si chaque caractère d’un texte correspond à un caractère de l’autre texte qui se trouve dans la même position.

Le modèle fonctionnel

Il nous faut maintenant identifier les unités atomiques que nous allons traiter et définir aussi les fonctions qui permettront ce traitement.

Pour notre définition de “deux” nous utiliseront tout simplement les nombres naturels, qui sont déjà des unités discrètes et atomiques

Pour notre définition de texte, l’unité atomique sera le caractère. Nous avons aussi besoin du concept de position qui nous permet de savoir où se trouve chaque caractère. La position sera aussi un nombre naturel - par exemple 1, 2, 3 etc.

Nous avons ensuite besoin d’une fonction pour comparer deux textes et savoir s’ils sont identiques. Cette fonction aura comme entrant les deux textes et comme sortant un booleén (vrai ou faux).

Pour chaque caractère du texte 1 la fonction regardera les caractères à partir de la position 0 jusqu’à la fin et le comparera au caractère dans la même position du texte 2. Si le caractère est le même elle aura comme valeur “vrai”, autrement “faux”. Si toutes les itération donnent la valeur “vrai” la fonction aura comme résultat “vrai” autrement, s’il y a un ou plusieurs “faux” la foinction donnera comme sortant “faux”.

Le modèle physique

Maintenant il s’agit d’implémenter le modèle fonctionnel dans une machine de Turing. Dans notre cas nous le feront ici, dans ce jupyter-notebook. Notre modèle physique sera donc un ordinateur et le langage de programmation python.

Bon… cela implique une série de choses que nous n’allons pas traiter…

Regardons ce que cela donne.

Tout d’abord nous avons besoin de deux textes que nous appelerons texte_1 et texte_2

texte_1 = 'Bonjour!'
texte_2 = 'Bonjour!'

Avec cette syntaxe nous avons donné à la machine deux variables, nous avons déclaré qu’il s’agit de chaînes de caractères (car nous avons utilisé des guillemets pour délimiter nos caractères) et nous avons dit de quelle chaîne de caractères il s’agit.

Nous pouvons maintenant demander à la machine de les afficher:

print(texte_1)
print(texte_2)
Bonjour!
Bonjour!

Maintenant nous voulons savoir si les deux textes sont “identiques”. Nous allons donc implémenter notre fonction.

for letter in texte_1:
    print(letter)
B
o
n
j
o
u
r
!
def comparateur_textes(texte1,texte2):
    identique = True
    counter = 0
    for letter in texte1:
        if texte2[counter]==letter:
            counter+=1
        else:
            identique = False

    if identique == True:        
        print("Les deux textes sont identiques")
    else:
        print('Les deux textes ne sont pas identiques.')
    
comparateur_textes(texte_1,texte_2)
Les deux textes sont identiques

Il se trouve qu’en python une fonction de ce type existe déjà… on aurait pu se passer de la construire…

if texte_1 == texte_2:
    print('Les textes sont identiques')
else: 
    print('Les textes ne sont pas identiques')
Les textes sont identiques

Un cas plus complexe

Admettons d’avoir deux textes:

texte_1 = 'Ce toit tranquille où marchent des colombes'
texte_2 = 'Ce toit tranquille, où marchent des colombes'

Admettons de donner une nouvelle définition d‘“identique” selon laquelle la ponctuation ne compte pas. Ces deux textes sont donc identiques pour nous. Il nous faudra une fonction qui ignore la ponctuation et qui réorganise donc la position de chaque texte sans ponctuation. On pourra ensuite comparer les deux textes

liste_ponctuation = [',', ';', ':', '.','!','?' ] #faisons simple et ignoront les espaces insécables
def sans_ponctuation(texte):
    for caractere in liste_ponctuation:
        texte = texte.replace(caractere, '')
    return texte
texte_1_sp=sans_ponctuation(texte_1)
texte_2_sp=sans_ponctuation(texte_2)
print(texte_1_sp)
print(texte_2_sp)
Ce toit tranquille où marchent des colombes
Ce toit tranquille où marchent des colombes
comparateur_textes(texte_1_sp,texte_2_sp)
Les deux textes sont identiques

Mais…

comparateur_textes(texte_1,texte_2)
Les deux textes ne sont pas identiques.

Nous avons donc deux résultats différents selon… notre modèle représentationnel. À savoir sur la base de notre définition d‘“identique”.