Le texte numérique

Qu’est-ce qu’un texte numérique?

Tout d’abord comprenons la différence entre:

  • plein texte

  • autres formats

Ascii

128 caractères sur 7 bits (le 8e est à 0)

Utf8

mon_texte = "f"
mon_texte = bytes(mon_texte, 'ascii')
for i in mon_texte:
    print(i)
    print(bin(i))
102
0b1100110

Mais si:

mon_texte = "é"
mon_texte = bytes(mon_texte, 'ascii')
for i in mon_texte:
    print(i)
    print(bin(i))
---------------------------------------------------------------------------
UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-3-954f1b27eed8> in <module>
      1 mon_texte = "é"
----> 2 mon_texte = bytes(mon_texte, 'ascii')
      3 for i in mon_texte:
      4     print(i)
      5     print(bin(i))

UnicodeEncodeError: 'ascii' codec can't encode character '\xe9' in position 0: ordinal not in range(128)

iso-8859

256

Mais… pas de Œ, œ, Ÿ, et le signe €

mon_texte = "œ"
mon_texte = bytes(mon_texte, 'iso-8859-1')
---------------------------------------------------------------------------
UnicodeEncodeError                        Traceback (most recent call last)
<ipython-input-10-87108dd06aa8> in <module>
      1 mon_texte = "œ"
----> 2 mon_texte = bytes(mon_texte, 'iso-8859-1')

UnicodeEncodeError: 'latin-1' codec can't encode character '\u0153' in position 0: ordinal not in range(256)
for i in mon_texte:
    print(i)
    print(bin(i))
233
0b11101001

UTF-8

1 à 4 octets

mon_texte = "œ"
mon_texte = bytes(mon_texte, 'utf-8')
for i in mon_texte:
    print(i)
    print(bin(i))
197
0b11000101
147
0b10010011

Traitement de texte

À quoi sert un ordinateur?

  • à calculer

  • à enregistrer?

  • à écrire?

  • documenter le code

Les machines à écrire

Pourquoi ne pas utiliser une machine à écrire?

  • parce qu’on écrit aussi du code

  • pour enregistrer

Avant Word

Écrire du code et de la doc, enregistrer et imprimer.

  • 1976 Electric Pencil (Michael Shrayer)

  • 1979 Easy Writer - John Thomas Draper

  • 1979 WordStar: WYSYWYG - car notion de page

  • L’ordinateur pour tous - 1984

  • 1983 Word

Les principes

  • interface graphique

  • imprimé

  • bureautique

  • format=software

Les effets

  • la “désintermédiation”

    • perte de compétences

  • la perte de contrôle

  • la perte d’utilité (utiliser un ordinateur comme une machine à écrire)

Et si on balisait nous-mêmes?

  • html

  • xml

  • md

  • tex

mon_texte = '''
[TOC]

# Titre

Nous allons faire un *essai*. Par exemple:

Une liste numérottée:

1. une chose
2. deux choses
3. trois _choses_

## Titre 2

## Titre 3

### Titre 3.2

'''
import markdown
mon_texte = markdown.markdown(mon_texte, extensions=['toc'])
print(mon_texte)
<div class="toc">
<ul>
<li><a href="#titre">Titre</a><ul>
<li><a href="#titre-2">Titre 2</a></li>
<li><a href="#titre-3">Titre 3</a><ul>
<li><a href="#titre-32">Titre 3.2</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<h1 id="titre">Titre</h1>
<p>Nous allons faire un <em>essai</em>. Par exemple:</p>
<p>Une liste numérottée:</p>
<ol>
<li>une chose</li>
<li>deux choses</li>
<li>trois <em>choses</em></li>
</ol>
<h2 id="titre-2">Titre 2</h2>
<h2 id="titre-3">Titre 3</h2>
<h3 id="titre-32">Titre 3.2</h3>
import IPython
IPython.display.HTML(mon_texte)

Titre

Nous allons faire un essai. Par exemple:

Une liste numérottée:

  1. une chose
  2. deux choses
  3. trois choses

Titre 2

Titre 3

Titre 3.2

Prendre un texte d’un fichier

Admettons de vouloir ouvrir le fichier qui s,appelle 01numerique.md (!!!ATTENTION AU CHEMIN!!!)

with open('01numerique.md', 'r') as mon_fichier:
    mon_texte = mon_fichier.read()
mon_texte
'# Numérique, modélisation et algorithmes\n\n\n\n## Un mot très utilisé\n\nD\'abord un adjectif, ensuite le mot est substantivé et commence à signifier un ensemble très hétérogène de choses. Il devient finalement une étiquette pour parler de notre époque.\n\n```{admonition} Prudence...\n:class: caution\nSignification floue\n```\n\nOn regroupe sous le chapeau de "numérique" un ensemble de choses, environnements, techniques, pratiques très différentes en les mettant toutes ensemble comme si elles étaient une unité.\n\n```{admonition} Danger\n:class: danger\nEssentialisation\n```\n\n## Le numérique au sens propre du terme\n\n\nReprésentation de la réalité via des éléments discrets et atomiques qui correspondent à des nombres naturels.\n\n::: {attention}\nS’oppose à analogique: représentation du réel via un signal continu, “analogue” au réel.\n:::\n\n![Numérique et analogique](http://www.bedwani.ch/electro/ch23/image88.gif)\n\n\n## La modélisation du monde\n\n### Trois étapes:\n\n\n- modèle représentationnel\n   - donner une description en langage naturel de quelque chose\n- modèle fonctionnel\n   - transformer la représentation en unités atomiques discrètes et définir des fonctions pour les traiter \n    ```{attention}\n    Le "_numérique_" se situe ici!\n    ```\n- modèle physique\n   - implémenter le calcul fonctionnel dans une machine de Turing réelle.\n   - calculable = computable\n\n::: {attention}\nLes trois étapes ne sont pas étanches!\n:::\n\n\n## Les “limites” de la machine?\n\n- une machine ne peut pas…\n- le topos de l’humain qui excède la machine\n- l’angoisse de l’intelligence artificielle\n\n## [Un exemple de modélisation simple](modelisation.ipynb)\n\n\n## Les algorithmes\n\n```{admonition} Définition\n\nEnsemble d’instructions qui respectent deux conditions:\n\n- à chaque instruction il est possible de connaître l’instruction suivante\n- si on suit les étapes on arrive à une instruction qui demande l’arrêt.\n```\n\n## La machine de Turing\n\n[Jouez avec une machine de Turing virtuelle](https://interstices.info/comment-fonctionne-une-machine-de-turing/)\n\n\n## [Modèles et algorithmes](modelisationamour)\n\n'

Manipulons un peu ce texte!

Tout d’abord divisons-le en lignes:

liste_lignes = mon_texte.split('\n')
for ligne in liste_lignes:
    print(ligne)
# Numérique, modélisation et algorithmes



## Un mot très utilisé

D'abord un adjectif, ensuite le mot est substantivé et commence à signifier un ensemble très hétérogène de choses. Il devient finalement une étiquette pour parler de notre époque.

```{admonition} Prudence...
:class: caution
Signification floue
```

On regroupe sous le chapeau de "numérique" un ensemble de choses, environnements, techniques, pratiques très différentes en les mettant toutes ensemble comme si elles étaient une unité.

```{admonition} Danger
:class: danger
Essentialisation
```

## Le numérique au sens propre du terme


Représentation de la réalité via des éléments discrets et atomiques qui correspondent à des nombres naturels.

::: {attention}
S’oppose à analogique: représentation du réel via un signal continu, “analogue” au réel.
:::

![Numérique et analogique](http://www.bedwani.ch/electro/ch23/image88.gif)


## La modélisation du monde

### Trois étapes:


- modèle représentationnel
   - donner une description en langage naturel de quelque chose
- modèle fonctionnel
   - transformer la représentation en unités atomiques discrètes et définir des fonctions pour les traiter 
    ```{attention}
    Le "_numérique_" se situe ici!
    ```
- modèle physique
   - implémenter le calcul fonctionnel dans une machine de Turing réelle.
   - calculable = computable

::: {attention}
Les trois étapes ne sont pas étanches!
:::


## Les “limites” de la machine?

- une machine ne peut pas…
- le topos de l’humain qui excède la machine
- l’angoisse de l’intelligence artificielle

## [Un exemple de modélisation simple](modelisation.ipynb)


## Les algorithmes

```{admonition} Définition

Ensemble d’instructions qui respectent deux conditions:

- à chaque instruction il est possible de connaître l’instruction suivante
- si on suit les étapes on arrive à une instruction qui demande l’arrêt.
```

## La machine de Turing

[Jouez avec une machine de Turing virtuelle](https://interstices.info/comment-fonctionne-une-machine-de-turing/)


## [Modèles et algorithmes](modelisationamour)

Maintenant imprimons toutes les lignes qui contiennent un mot… par exemple “Turing”

for l in mon_texte.split('\n'):
    if 'Turing' in l:
        print(l)
   - implémenter le calcul fonctionnel dans une machine de Turing réelle.
## La machine de Turing
[Jouez avec une machine de Turing virtuelle](https://interstices.info/comment-fonctionne-une-machine-de-turing/)

Et si on veut savoir à quelle ligne se trouve le mot?

for i, l in enumerate(mon_texte.split('\n')):
    if 'Turing' in l:
        print(i)
        print(l)
45
   - implémenter le calcul fonctionnel dans une machine de Turing réelle.
72
## La machine de Turing
74
[Jouez avec une machine de Turing virtuelle](https://interstices.info/comment-fonctionne-une-machine-de-turing/)

On pourrait aussi le transformer en une liste de mots, non?

ma_liste = []
for mot in mon_texte.split(' '):
    ma_liste.append(mot)
ma_liste
['#',
 'Numérique,',
 'modélisation',
 'et',
 'algorithmes\n\n\n\n##',
 'Un',
 'mot',
 'très',
 "utilisé\n\nD'abord",
 'un',
 'adjectif,',
 'ensuite',
 'le',
 'mot',
 'est',
 'substantivé',
 'et',
 'commence',
 'à',
 'signifier',
 'un',
 'ensemble',
 'très',
 'hétérogène',
 'de',
 'choses.',
 'Il',
 'devient',
 'finalement',
 'une',
 'étiquette',
 'pour',
 'parler',
 'de',
 'notre',
 'époque.\n\n```{admonition}',
 'Prudence...\n:class:',
 'caution\nSignification',
 'floue\n```\n\nOn',
 'regroupe',
 'sous',
 'le',
 'chapeau',
 'de',
 '"numérique"',
 'un',
 'ensemble',
 'de',
 'choses,',
 'environnements,',
 'techniques,',
 'pratiques',
 'très',
 'différentes',
 'en',
 'les',
 'mettant',
 'toutes',
 'ensemble',
 'comme',
 'si',
 'elles',
 'étaient',
 'une',
 'unité.\n\n```{admonition}',
 'Danger\n:class:',
 'danger\nEssentialisation\n```\n\n##',
 'Le',
 'numérique',
 'au',
 'sens',
 'propre',
 'du',
 'terme\n\n\nReprésentation',
 'de',
 'la',
 'réalité',
 'via',
 'des',
 'éléments',
 'discrets',
 'et',
 'atomiques',
 'qui',
 'correspondent',
 'à',
 'des',
 'nombres',
 'naturels.\n\n:::',
 '{attention}\nS’oppose',
 'à',
 'analogique:',
 'représentation',
 'du',
 'réel',
 'via',
 'un',
 'signal',
 'continu,',
 '“analogue”',
 'au',
 'réel.\n:::\n\n![Numérique',
 'et',
 'analogique](http://www.bedwani.ch/electro/ch23/image88.gif)\n\n\n##',
 'La',
 'modélisation',
 'du',
 'monde\n\n###',
 'Trois',
 'étapes:\n\n\n-',
 'modèle',
 'représentationnel\n',
 '',
 '',
 '-',
 'donner',
 'une',
 'description',
 'en',
 'langage',
 'naturel',
 'de',
 'quelque',
 'chose\n-',
 'modèle',
 'fonctionnel\n',
 '',
 '',
 '-',
 'transformer',
 'la',
 'représentation',
 'en',
 'unités',
 'atomiques',
 'discrètes',
 'et',
 'définir',
 'des',
 'fonctions',
 'pour',
 'les',
 'traiter',
 '\n',
 '',
 '',
 '',
 '```{attention}\n',
 '',
 '',
 '',
 'Le',
 '"_numérique_"',
 'se',
 'situe',
 'ici!\n',
 '',
 '',
 '',
 '```\n-',
 'modèle',
 'physique\n',
 '',
 '',
 '-',
 'implémenter',
 'le',
 'calcul',
 'fonctionnel',
 'dans',
 'une',
 'machine',
 'de',
 'Turing',
 'réelle.\n',
 '',
 '',
 '-',
 'calculable',
 '=',
 'computable\n\n:::',
 '{attention}\nLes',
 'trois',
 'étapes',
 'ne',
 'sont',
 'pas',
 'étanches!\n:::\n\n\n##',
 'Les',
 '“limites”',
 'de',
 'la',
 'machine?\n\n-',
 'une',
 'machine',
 'ne',
 'peut',
 'pas…\n-',
 'le',
 'topos',
 'de',
 'l’humain',
 'qui',
 'excède',
 'la',
 'machine\n-',
 'l’angoisse',
 'de',
 'l’intelligence',
 'artificielle\n\n##',
 '[Un',
 'exemple',
 'de',
 'modélisation',
 'simple](modelisation.ipynb)\n\n\n##',
 'Les',
 'algorithmes\n\n```{admonition}',
 'Définition\n\nEnsemble',
 'd’instructions',
 'qui',
 'respectent',
 'deux',
 'conditions:\n\n-',
 'à',
 'chaque',
 'instruction',
 'il',
 'est',
 'possible',
 'de',
 'connaître',
 'l’instruction',
 'suivante\n-',
 'si',
 'on',
 'suit',
 'les',
 'étapes',
 'on',
 'arrive',
 'à',
 'une',
 'instruction',
 'qui',
 'demande',
 'l’arrêt.\n```\n\n##',
 'La',
 'machine',
 'de',
 'Turing\n\n[Jouez',
 'avec',
 'une',
 'machine',
 'de',
 'Turing',
 'virtuelle](https://interstices.info/comment-fonctionne-une-machine-de-turing/)\n\n\n##',
 '[Modèles',
 'et',
 'algorithmes](modelisationamour)\n\n']

Regex en python

Tutoriel ici https://www.datacamp.com/community/tutorials/python-regular-expression-tutorial

Et la doc: https://docs.python.org/3/howto/regex.html

import re
print(re.search(r'Numérique', mon_texte).group())
Numérique
mon_dialogue = '''
Pierre: Bonjour!

Marie: Salut!

Pierre: Comment vas-tu?

Marie: Bien! Et toi?
'''
repliques_pierre = re.search(r'(Pierre: )(.*)', mon_dialogue)
repliques_pierre.group(2)
'Bonjour!'
repliques_pierre = re.findall(r'(Pierre: )(.*)', mon_dialogue)
repliques_pierre
[('Pierre: ', 'Bonjour!'), ('Pierre: ', 'Comment vas-tu?')]

Plus intéressant…

repliques = re.findall(r'(.*): (.*)', mon_dialogue)
repliques
[('Pierre', 'Bonjour!'),
 ('Marie', 'Salut!'),
 ('Pierre', 'Comment vas-tu?'),
 ('Marie', 'Bien! Et toi?')]
repliques_pierre=[]
for prenom, replique in repliques:
    if prenom == 'Pierre':
        repliques_pierre.append(replique)
repliques_pierre
['Bonjour!', 'Comment vas-tu?']
# je vais chercher les titres dans mon document
re.findall(r'## (.*)', mon_texte)
['Un mot très utilisé',
 'Le numérique au sens propre du terme',
 'La modélisation du monde',
 'Trois étapes:',
 'Les “limites” de la machine?',
 '[Un exemple de modélisation simple](modelisation.ipynb)',
 'Les algorithmes',
 'La machine de Turing',
 '[Modèles et algorithmes](modelisationamour)']