---
title: Markdownifier vos documents
author: Frederic AOUSTIN
version: 1.O
---

# Markdownifier vos documents

![category](developpement)
![tag](python)
![tag](ia)

Avec l'IA, le **Markdown** qui est un langage de *balise légère* est devenu très populaire. C'est devenu le format de prélidection pour échanger de la donnée textuelle.

Ceci est plutôt ironique puisque pendant des années, les *geeks* qui utilisait ce langage était perçu comme des personnes ne sachant pas utiliser des outils modernes comme Word et compagnie.

Pour ma part j'ai toujours utilisé des langages de mise en forme (Restruturedtext, Md, Latex, ...) mon idée étant: je me focalise sur le fond, pour la forme je trouverai bien un truc qui le fait tout seul.

Alors il faut être transparent je n'ai jamais trouvé l'outil ultime pour ce dernier point ....

Donc aujourd'hui si on veut échanger avec une IA, pour faire du RAG par exemple, il faut pouvoir convertir de nos données en format **Md**

## le cas html avec markdownify

Quand on souhaite transformer du *html* en *md* il existe une librairie python assez simple pour cela **markdownify**

```bash
pip install markdownify
```

Son usage basique est assez simple: on lui donne un string html et elle génère un string markdown.

Exemple pour extraire une page web en utilisant **bs4** pour récupérer la source

```python
import requests
from bs4 import BeautifulSoup
from markdownify import markdownify as md

url= 'https://mascarille.fr/index.php?/fiche-auteurs-999'

response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
fiche = soup.find("div", class_="fiche")
# clean html
fiche.find("p", class_="ficheLinks").decompose()
# to md
print(md(str(fiche)))
```

Le principe de fonctionnement 

```mermaid
flowchart TD
    STEP1["Extraction de page via bs4"]
    STEP2["Clean de la source"]
    STEP3["Conversion en md"]
    STEP1 --> STEP2
    STEP2 --> STEP3
```

Il ne faut pas négliger la partie clean qui permet d'avoir un rendu avec uniquement les éléments qui nous sont utiles

Cela  fonctionne très bien avec les sites full html n'abusant pas de **Javascript** pour afficher le contenu.

Par exemple le code suivant ne fonctionne pas

```python
import requests
from bs4 import BeautifulSoup
from markdownify import markdownify as md

url= 'https://blog.fraoustin.fr/?md=20260119094900'

response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, "html.parser")
print(soup)
fiche = soup.find("div", id="content")
# to md
print(md(str(fiche)))
```

car la mise en forme du contenu est gérer par un script javascript ... il faudrait alors utiliser des outils dit *navigateur headless*

## markitdown

Microsoft a sorti une libraire gérant beaucoup de transformation de format vers **markdown** nommé **[markdownify](https://github.com/microsoft/markitdown)**

MarkItDown est surtout conçu pour :

- HTML
- DOCX
- PPTX
- Excel
- PDF simple texte

Il peut aussi extraire des info d'un audio ou d'une video

Il peut aussi s'appuyer sur des LLM exterieur pour traiter des fichiers plus complexe.

Son installation est simple et on peut spécifier ce qu'on souhaite faire

```bash
pip install 'markitdown[pdf, docx, pptx, xlsx, xls]'
```

J'ai réalisé des tests sur des fichiers pdfs et je suis assez deçus

```python
from markitdown import MarkItDown

md = MarkItDown(enable_plugins=False) # Set to True to enable plugins
result = md.convert("sample2.pdf")
print(result.text_content)
```

Le problème ne provient pas de la librairie mais du fichier pdf en lui même.
Le fichier pdf est une suite d'indication sur des éléments avec une position x,y , une police et un text. Il ne précise pas si il s'agit d'une liste, un sommaire, .... et conclusion on obtient un fichier **md** avec peut d'information de structure ... on perd le gras, l'italique (qui provient de la police)

On peut activer des plugins pour faire de l'ocr mais je pense que l'utilisation d'un LLM extérieur peut aider dans ces cas là.

## FireCrawl
