feat: Add main analysis script and Excel metadata reader

- Implemented main.py to orchestrate the analysis of Jules Berton's letters collection.
- Added read_excel_metadata.py to read and analyze the Excel file containing letter metadata.
- Included functions for reading Excel files, analyzing structure, extracting letter information, and saving data to JSON.
- Added error handling and user feedback for file operations and analysis steps.
- Provided a summary of the analysis results and instructions for further usage.
This commit is contained in:
2025-09-04 08:54:05 +02:00
parent 0202966bd9
commit 3af796f9c4
6 changed files with 7393 additions and 132 deletions

BIN
.DS_Store vendored

Binary file not shown.

372
README.md
View File

@@ -2,18 +2,69 @@
## Description du projet ## Description du projet
Cette collection présente la correspondance de Jules Berton et de sa famille, comprenant des lettres datées de 1875 à 1895. La collection comprend : Cette collection présente la correspondance de Jules Berton et de sa famille,
comprenant **132 lettres** datées de 1875 à 1895,
représentant un total de **427 pages**.
La collection comprend :
- **Images scannées** : Les pages originales des lettres manuscrites (dossier `lettres_scannees/`) - **Images scannées** : Les pages originales des lettres manuscrites (dossier `lettres_scannees/`)
- **Transcriptions** : Les transcriptions complètes des lettres en format Markdown (dossier `transcriptions/`) - **Transcriptions** : Les transcriptions complètes des lettres en format Markdown (dossier `transcriptions/`)
- **Métadonnées** : Informations sur les dates, lieux et contexte des lettres (fichier Excel) - **Métadonnées** : Informations détaillées sur les dates, lieux et contexte (fichier Excel)
## Statistiques de la collection
- **Total des lettres** : 132
- **Total des pages** : 427
- **Lettres avec transcription** : 132 (100.0%)
- **Lettres avec images** : 132 (100.0%)
### Répartition par année
- **1875** : 3 lettres
- **1876** : 3 lettres
- **1877** : 2 lettres
- **1879** : 2 lettres
- **1882** : 2 lettres
- **1883** : 6 lettres
- **1884** : 9 lettres
- **1885** : 6 lettres
- **1886** : 7 lettres
- **1887** : 5 lettres
- **1888** : 1 lettres
- **1889** : 15 lettres
- **1890** : 10 lettres
- **1891** : 28 lettres
- **1892** : 20 lettres
- **1893** : 9 lettres
- **1894** : 3 lettres
- **1895** : 1 lettres
### Lieux principaux mentionnés
- **Paris** : 23 lettres
- **Libreville** : 19 lettres
- **Mayumba** : 10 lettres
- **Draguignan** : 9 lettres
- **Brest** : 8 lettres
- **Toulon** : 8 lettres
- **Lorient** : 5 lettres
- **La Bourboule les Bains** : 4 lettres
- **Poitiers** : 3 lettres
- **Niort** : 3 lettres
### Navires mentionnés
- **Albatros** : 8 lettres
- **Ducouëdie** : 6 lettres
- **Tibet** : 4 lettres
- **Armorique** : 1 lettres
## Organisation des données ## Organisation des données
### Structure des fichiers ### Structure des fichiers
``` ```
├── Jules Berton - lettres, dates et lieux.xlsx # Métadonnées ├── Jules Berton - lettres, dates et lieux.xlsx # Métadonnées détaillées
├── lettres_scannees/ # Images originales ├── lettres_scannees/ # Images originales
│ ├── YYYY-MM-DD a.jpg # Page 1 de la lettre │ ├── YYYY-MM-DD a.jpg # Page 1 de la lettre
│ ├── YYYY-MM-DD b.jpg # Page 2 de la lettre │ ├── YYYY-MM-DD b.jpg # Page 2 de la lettre
@@ -24,174 +75,229 @@ Cette collection présente la correspondance de Jules Berton et de sa famille, c
└── README.md # Ce fichier └── README.md # Ce fichier
``` ```
### Convention de nommage
- **Format des dates** : `YYYY-MM-DD` (année-mois-jour)
- **Images** : Les lettres de plusieurs pages sont suffixées par `a`, `b`, `c`, etc.
- **Transcriptions** : Un fichier `.md` par lettre
## Catalogue des lettres ## Catalogue des lettres
### Année 1875 ### Année 1875
| Date | Lieu | Transcription | Images | Notes | | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|------|---------------|---------|-------| |------|---------------|-------------|---------|---------------|---------|-------|
| [1875-01-21](transcriptions/1875-01-21.md) | - | ✓ | [a](lettres_scannees/1875-01-21%20a.jpg), [b](lettres_scannees/1875-01-21%20b.jpg), [c](lettres_scannees/1875-01-21%20c.jpg) | Correspondance familiale | | 1875-01-21 | - | - | - | [📝](transcriptions/1875-01-21.md) | [a](lettres_scannees/1875-01-21%20a.jpg), [b](lettres_scannees/1875-01-21%20b.jpg), [c](lettres_scannees/1875-01-21%20c.jpg) | 3 |
| [1875-11-09](transcriptions/1875-11-09.md) | - | ✓ | [a](lettres_scannees/1875-11-09%20a.jpg), [b](lettres_scannees/1875-11-09%20b.jpg), [c](lettres_scannees/1875-11-09%20c.jpg), [d](lettres_scannees/1875-11-09%20d.jpg), [e](lettres_scannees/1875-11-09%20e.jpg), [f](lettres_scannees/1875-11-09%20f.jpg), [g](lettres_scannees/1875-11-09%20g.jpg) | - | | 1875-11-09 | - | - | - | [📝](transcriptions/1875-11-09.md) | [a](lettres_scannees/1875-11-09%20a.jpg), [b](lettres_scannees/1875-11-09%20b.jpg), [c](lettres_scannees/1875-11-09%20c.jpg), [d](lettres_scannees/1875-11-09%20d.jpg), [e](lettres_scannees/1875-11-09%20e.jpg), [f](lettres_scannees/1875-11-09%20f.jpg), [g](lettres_scannees/1875-11-09%20g.jpg) | 7 |
| [1875-12-16](transcriptions/1875-12-16.md) | - | ✓ | [a](lettres_scannees/1875-12-16%20a.jpg), [b](lettres_scannees/1875-12-16%20b.jpg), [c](lettres_scannees/1875-12-16%20c.jpg) | - | | 1875-12-16 | - | - | - | [📝](transcriptions/1875-12-16.md) | [a](lettres_scannees/1875-12-16%20a.jpg), [b](lettres_scannees/1875-12-16%20b.jpg), [c](lettres_scannees/1875-12-16%20c.jpg) | 3 |
### Année 1876 ### Année 1876
| Date | Lieu | Transcription | Images | Notes | | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|------|---------------|---------|-------| |------|---------------|-------------|---------|---------------|---------|-------|
| [1876-02-11](transcriptions/1876-02-11.md) | - | ✓ | [a](lettres_scannees/1876-02-11%20a.jpg), [b](lettres_scannees/1876-02-11%20b.jpg) | - | | 1876-02-11 | - | - | - | [📝](transcriptions/1876-02-11.md) | [a](lettres_scannees/1876-02-11%20a.jpg), [b](lettres_scannees/1876-02-11%20b.jpg) | 2 |
| [1876-07-15](transcriptions/1876-07-15.md) | - | ✓ | [a](lettres_scannees/1876-07-15%20a.jpg), [b](lettres_scannees/1876-07-15%20b.jpg) | - | | 1876-07-15 | - | - | - | [📝](transcriptions/1876-07-15.md) | [a](lettres_scannees/1876-07-15%20a.jpg), [b](lettres_scannees/1876-07-15%20b.jpg) | 2 |
| [1876-12-13](transcriptions/1876-12-13.md) | - | ✓ | [a](lettres_scannees/1876-12-13%20a.jpg), [b](lettres_scannees/1876-12-13%20b.jpg), [c](lettres_scannees/1876-12-13%20c.jpg) | - | | 1876-12-13 | Le Mans, (France) | - | - | [📝](transcriptions/1876-12-13.md) | [a](lettres_scannees/1876-12-13%20a.jpg), [b](lettres_scannees/1876-12-13%20b.jpg), [c](lettres_scannees/1876-12-13%20c.jpg) | 3 |
### Année 1877 ### Année 1877
| Date | Lieu | Transcription | Images | Notes | | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|------|---------------|---------|-------| |------|---------------|-------------|---------|---------------|---------|-------|
| [1877-06-01](transcriptions/1877-06-01.md) | - | ✓ | [a](lettres_scannees/1877-06-01%20a.jpg), [b](lettres_scannees/1877-06-01%20b.jpg) | - | | 1877-06-01 | Le Mans, (France) | - | - | [📝](transcriptions/1877-06-01.md) | [a](lettres_scannees/1877-06-01%20a.jpg), [b](lettres_scannees/1877-06-01%20b.jpg) | 2 |
| [1877-11-26](transcriptions/1877-11-26.md) | - | ✓ | [a](lettres_scannees/1877-11-26%20a.jpg), [b](lettres_scannees/1877-11-26%20b.jpg) | - | | 1877-11-26 | Poitiers, (France) | - | - | [📝](transcriptions/1877-11-26.md) | [a](lettres_scannees/1877-11-26%20a.jpg), [b](lettres_scannees/1877-11-26%20b.jpg) | 2 |
### Année 1879 ### Année 1879
| Date | Lieu | Transcription | Images | Notes | | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|------|---------------|---------|-------| |------|---------------|-------------|---------|---------------|---------|-------|
| [1879-03-21](transcriptions/1879-03-21.md) | - | ✓ | [a](lettres_scannees/1879-03-21%20a.jpg), [b](lettres_scannees/1879-03-21%20b.jpg) | - | | 1879-03-21 | Poitiers, (France) | - | - | [📝](transcriptions/1879-03-21.md) | [a](lettres_scannees/1879-03-21%20a.jpg), [b](lettres_scannees/1879-03-21%20b.jpg) | 2 |
| [1879-05-25](transcriptions/1879-05-25.md) | - | ✓ | [a](lettres_scannees/1879-05-25%20a.jpg), [b](lettres_scannees/1879-05-25%20b.jpg) | - | | 1879-05-25 | Poitiers, (France) | - | - | [📝](transcriptions/1879-05-25.md) | [a](lettres_scannees/1879-05-25%20a.jpg), [b](lettres_scannees/1879-05-25%20b.jpg) | 2 |
### Année 1882 ### Année 1882
| Date | Lieu | Transcription | Images | Notes | | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|------|---------------|---------|-------| |------|---------------|-------------|---------|---------------|---------|-------|
| [1882-02-20](transcriptions/1882-02-20.md) | - | ✓ | [a](lettres_scannees/1882-02-20%20a.jpg), [b](lettres_scannees/1882-02-20%20b.jpg), [c](lettres_scannees/1882-02-20%20c.jpg) | - | | 1882-02-20 | Brest, (France) | - | - | [📝](transcriptions/1882-02-20.md) | [a](lettres_scannees/1882-02-20%20a.jpg), [b](lettres_scannees/1882-02-20%20b.jpg), [c](lettres_scannees/1882-02-20%20c.jpg) | 3 |
| [1882-12-14](transcriptions/1882-12-14.md) | Brest | ✓ | [a](lettres_scannees/1882-12-14%20a.jpg), [b](lettres_scannees/1882-12-14%20b.jpg), [c](lettres_scannees/1882-12-14%20c.jpg) | Mentions de Toulon, Marseille | | 1882-12-14 | Lorient, (France) | - | - | [📝](transcriptions/1882-12-14.md) | [a](lettres_scannees/1882-12-14%20a.jpg), [b](lettres_scannees/1882-12-14%20b.jpg), [c](lettres_scannees/1882-12-14%20c.jpg) | 3 |
### Année 1883 ### Année 1883
| Date | Lieu | Transcription | Images | Notes | | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|------|---------------|---------|-------| |------|---------------|-------------|---------|---------------|---------|-------|
| [1883-02-10](transcriptions/1883-02-10.md) | - | ✓ | [a](lettres_scannees/1883-02-10%20a.jpg), [b](lettres_scannees/1883-02-10%20b.jpg), [c](lettres_scannees/1883-02-10%20c.jpg) | Mention d'accidents maritimes | | 1883-02-10 | Lorient, (France) | - | - | [📝](transcriptions/1883-02-10.md) | [a](lettres_scannees/1883-02-10%20a.jpg), [b](lettres_scannees/1883-02-10%20b.jpg), [c](lettres_scannees/1883-02-10%20c.jpg) | 3 |
| [1883-10-09](transcriptions/1883-10-09.md) | - | ✓ | [a](lettres_scannees/1883-10-09%20a.jpg), [b](lettres_scannees/1883-10-09%20b.jpg) | - | | 1883-10-09 | Lorient, (France) | - | - | [📝](transcriptions/1883-10-09.md) | [a](lettres_scannees/1883-10-09%20a.jpg), [b](lettres_scannees/1883-10-09%20b.jpg) | 2 |
| [1883-11-05](transcriptions/1883-11-05.md) | - | ✓ | [a](lettres_scannees/1883-11-05%20a.jpg), [b](lettres_scannees/1883-11-05%20b.jpg) | - | | 1883-11-05 | Niort, (France) | - | - | [📝](transcriptions/1883-11-05.md) | [a](lettres_scannees/1883-11-05%20a.jpg), [b](lettres_scannees/1883-11-05%20b.jpg) | 2 |
| [1883-12-12](transcriptions/1883-12-12.md) | - | ✓ | [a](lettres_scannees/1883-12-12%20a.jpg), [b](lettres_scannees/1883-12-12%20b.jpg), [c](lettres_scannees/1883-12-12%20c.jpg) | - | | 1883-12-12 | Brest, (France) | - | - | [📝](transcriptions/1883-12-12.md) | [a](lettres_scannees/1883-12-12%20a.jpg), [b](lettres_scannees/1883-12-12%20b.jpg), [c](lettres_scannees/1883-12-12%20c.jpg) | 3 |
| [1883-12-21](transcriptions/1883-12-21.md) | - | ✓ | [a](lettres_scannees/1883-12-21%20a.jpg), [b](lettres_scannees/1883-12-21%20b.jpg), [c](lettres_scannees/1883-12-21%20c.jpg) | - | | 1883-12-21 | - | - | Armorique | [📝](transcriptions/1883-12-21.md) | [a](lettres_scannees/1883-12-21%20a.jpg), [b](lettres_scannees/1883-12-21%20b.jpg), [c](lettres_scannees/1883-12-21%20c.jpg) | 3 |
| [1883-12-28](transcriptions/1883-12-28.md) | - | ✓ | [a](lettres_scannees/1883-12-28%20a.jpg) | - | | 1883-12-28 | Brest, (France) | - | - | [📝](transcriptions/1883-12-28.md) | [a](lettres_scannees/1883-12-28%20a.jpg) | 1 |
### Année 1884 ### Année 1884
| Date | Lieu | Transcription | Images | Notes | | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|------|---------------|---------|-------| |------|---------------|-------------|---------|---------------|---------|-------|
| [1884-01-19](transcriptions/1884-01-19.md) | - | ✓ | [a](lettres_scannees/1884-01-19%20a.jpg), [b](lettres_scannees/1884-01-19%20b.jpg) | - | | 1884-01-19 | Brest, (France) | - | - | [📝](transcriptions/1884-01-19.md) | [a](lettres_scannees/1884-01-19%20a.jpg), [b](lettres_scannees/1884-01-19%20b.jpg) | 2 |
| [1884-02-11](transcriptions/1884-02-11.md) | - | ✓ | [a](lettres_scannees/1884-02-11%20a.jpg), [b](lettres_scannees/1884-02-11%20b.jpg) | - | | 1884-02-11 | Niort, (France) | - | - | [📝](transcriptions/1884-02-11.md) | [a](lettres_scannees/1884-02-11%20a.jpg), [b](lettres_scannees/1884-02-11%20b.jpg) | 2 |
| [1884-02-22](transcriptions/1884-02-22.md) | - | ✓ | [a](lettres_scannees/1884-02-22%20a.jpg), [b](lettres_scannees/1884-02-22%20b.jpg) | - | | 1884-02-22 | Brest, (France) | - | - | [📝](transcriptions/1884-02-22.md) | [a](lettres_scannees/1884-02-22%20a.jpg), [b](lettres_scannees/1884-02-22%20b.jpg) | 2 |
| [1884-04-19](transcriptions/1884-04-19.md) | Rade de Brest | ✓ | [a](lettres_scannees/1884-04-19%20a.jpg), [b](lettres_scannees/1884-04-19%20b.jpg) | Voyage vers Toulon, Méditerranée | | 1884-04-19 | Brest, (France) | - | - | [📝](transcriptions/1884-04-19.md) | [a](lettres_scannees/1884-04-19%20a.jpg), [b](lettres_scannees/1884-04-19%20b.jpg) | 2 |
| [1884-05-01](transcriptions/1884-05-01.md) | - | ✓ | [a](lettres_scannees/1884-05-01%20a.jpg), [b](lettres_scannees/1884-05-01%20b.jpg) | - | | 1884-05-01 | Toulon, (France) | - | Albatros | [📝](transcriptions/1884-05-01.md) | [a](lettres_scannees/1884-05-01%20a.jpg), [b](lettres_scannees/1884-05-01%20b.jpg) | 2 |
| [1884-06-09](transcriptions/1884-06-09.md) | Rade de Toulon | ✓ | [a](lettres_scannees/1884-06-09%20a.jpg), [b](lettres_scannees/1884-06-09%20b.jpg), [c](lettres_scannees/1884-06-09%20c.jpg) | Navire "Albatros" | | 1884-06-09 | Toulon, (France) | - | - | [📝](transcriptions/1884-06-09.md) | [a](lettres_scannees/1884-06-09%20a.jpg), [b](lettres_scannees/1884-06-09%20b.jpg), [c](lettres_scannees/1884-06-09%20c.jpg) | 3 |
| [1884-07-25](transcriptions/1884-07-25.md) | - | ✓ | [a](lettres_scannees/1884-07-25%20a.jpg), [b](lettres_scannees/1884-07-25%20b.jpg) | - | | 1884-07-25 | Agde, (France) | - | - | [📝](transcriptions/1884-07-25.md) | [a](lettres_scannees/1884-07-25%20a.jpg), [b](lettres_scannees/1884-07-25%20b.jpg) | 2 |
| [1884-10-12](transcriptions/1884-10-12.md) | - | ✓ | [a](lettres_scannees/1884-10-12%20a.jpg), [b](lettres_scannees/1884-10-12%20b.jpg), [c](lettres_scannees/1884-10-12%20c.jpg) | - | | 1884-10-12 | La Ciotat, (France) | - | - | [📝](transcriptions/1884-10-12.md) | [a](lettres_scannees/1884-10-12%20a.jpg), [b](lettres_scannees/1884-10-12%20b.jpg), [c](lettres_scannees/1884-10-12%20c.jpg) | 3 |
| [1884-12-29](transcriptions/1884-12-29.md) | - | ✓ | [a](lettres_scannees/1884-12-29%20a.jpg), [b](lettres_scannees/1884-12-29%20b.jpg) | - | | 1884-12-29 | Rosas, (Espagne) | - | Albatros | [📝](transcriptions/1884-12-29.md) | [a](lettres_scannees/1884-12-29%20a.jpg), [b](lettres_scannees/1884-12-29%20b.jpg) | 2 |
### Année 1885 ### Année 1885
| Date | Lieu | Transcription | Images | Notes | | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|------|---------------|---------|-------| |------|---------------|-------------|---------|---------------|---------|-------|
| [1885-01-16](transcriptions/1885-01-16.md) | - | ✓ | [a](lettres_scannees/1885-01-16%20a.jpg), [b](lettres_scannees/1885-01-16%20b.jpg), [c](lettres_scannees/1885-01-16%20c.jpg) | - | | 1885-01-16 | Toulon, (France) | - | - | [📝](transcriptions/1885-01-16.md) | [a](lettres_scannees/1885-01-16%20a.jpg), [b](lettres_scannees/1885-01-16%20b.jpg), [c](lettres_scannees/1885-01-16%20c.jpg) | 3 |
| [1885-02-20](transcriptions/1885-02-20.md) | - | ✓ | [a](lettres_scannees/1885-02-20%20a.jpg), [b](lettres_scannees/1885-02-20%20b.jpg), [c](lettres_scannees/1885-02-20%20c.jpg) | - | | 1885-02-20 | Antibes, (France) | - | Albatros | [📝](transcriptions/1885-02-20.md) | [a](lettres_scannees/1885-02-20%20a.jpg), [b](lettres_scannees/1885-02-20%20b.jpg), [c](lettres_scannees/1885-02-20%20c.jpg) | 3 |
| [1885-04-07](transcriptions/1885-04-07.md) | - | ✓ | [a](lettres_scannees/1885-04-07%20a.jpg), [b](lettres_scannees/1885-04-07%20b.jpg), [c](lettres_scannees/1885-04-07%20c.jpg) | - | | 1885-04-07 | Nice, (France) | - | Albatros | [📝](transcriptions/1885-04-07.md) | [a](lettres_scannees/1885-04-07%20a.jpg), [b](lettres_scannees/1885-04-07%20b.jpg), [c](lettres_scannees/1885-04-07%20c.jpg) | 3 |
| [1885-05-29](transcriptions/1885-05-29.md) | - | ✓ | [a](lettres_scannees/1885-05-29%20a.jpg), [b](lettres_scannees/1885-05-29%20b.jpg), [c](lettres_scannees/1885-05-29%20c.jpg) | - | | 1885-05-29 | Toulon, (France) | - | Albatros | [📝](transcriptions/1885-05-29.md) | [a](lettres_scannees/1885-05-29%20a.jpg), [b](lettres_scannees/1885-05-29%20b.jpg), [c](lettres_scannees/1885-05-29%20c.jpg) | 3 |
| [1885-06-28](transcriptions/1885-06-28.md) | Rade de Toulon | ✓ | [a](lettres_scannees/1885-06-28%20a.jpg), [b](lettres_scannees/1885-06-28%20b.jpg) | Navire "Albatros", départ pour le Gabon | | 1885-06-28 | Toulon, (France) | - | Albatros | [📝](transcriptions/1885-06-28.md) | [a](lettres_scannees/1885-06-28%20a.jpg), [b](lettres_scannees/1885-06-28%20b.jpg) | 2 |
| [1885-09-01](transcriptions/1885-09-01.md) | - | ✓ | [a](lettres_scannees/1885-09-01%20a.jpg), [b](lettres_scannees/1885-09-01%20b.jpg), [c](lettres_scannees/1885-09-01%20c.jpg) | - | | 1885-09-01 | Libreville, (Congo Français) | Libreville (Gabon) | Albatros | [📝](transcriptions/1885-09-01.md) | [a](lettres_scannees/1885-09-01%20a.jpg), [b](lettres_scannees/1885-09-01%20b.jpg), [c](lettres_scannees/1885-09-01%20c.jpg) | 3 |
### Année 1886 ### Année 1886
| Date | Lieu | Transcription | Images | Notes | | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|------|---------------|---------|-------| |------|---------------|-------------|---------|---------------|---------|-------|
| [1886-05-03](transcriptions/1886-05-03.md) | Lorient, 109 rue du Port | ✓ | [a](lettres_scannees/1886-05-03%20a.jpg), [b](lettres_scannees/1886-05-03%20b.jpg), [c](lettres_scannees/1886-05-03%20c.jpg), [d](lettres_scannees/1886-05-03%20d.jpg), [e](lettres_scannees/1886-05-03%20e.jpg), [f](lettres_scannees/1886-05-03%20f.jpg) | Retour de Libreville après 49 jours, navire "Albatros" | | 1886-05-03 | Lorient, (France) | - | - | [📝](transcriptions/1886-05-03.md) | [a](lettres_scannees/1886-05-03%20a.jpg), [b](lettres_scannees/1886-05-03%20b.jpg), [c](lettres_scannees/1886-05-03%20c.jpg), [d](lettres_scannees/1886-05-03%20d.jpg), [e](lettres_scannees/1886-05-03%20e.jpg), [f](lettres_scannees/1886-05-03%20f.jpg) | 6 |
| [1886-05-15](transcriptions/1886-05-15.md) | Lorient, 109 rue du Port | ✓ | [a](lettres_scannees/1886-05-15%20a.jpg), [b](lettres_scannees/1886-05-15%20b.jpg) | Navire "Albatros" devenu ponton | | 1886-05-15 | Lorient, (France) | - | - | [📝](transcriptions/1886-05-15.md) | [a](lettres_scannees/1886-05-15%20a.jpg), [b](lettres_scannees/1886-05-15%20b.jpg) | 2 |
| [1886-06-05](transcriptions/1886-06-05.md) | - | ✓ | [a](lettres_scannees/1886-06-05%20a.jpg), [b](lettres_scannees/1886-06-05%20b.jpg), [c](lettres_scannees/1886-06-05%20c.jpg) | - | | 1886-06-05 | Niort, (France) | - | - | [📝](transcriptions/1886-06-05.md) | [a](lettres_scannees/1886-06-05%20a.jpg), [b](lettres_scannees/1886-06-05%20b.jpg), [c](lettres_scannees/1886-06-05%20c.jpg) | 3 |
| [1886-07-28](transcriptions/1886-07-28.md) | - | ✓ | [a](lettres_scannees/1886-07-28%20a.jpg), [b](lettres_scannees/1886-07-28%20b.jpg), [c](lettres_scannees/1886-07-28%20c.jpg) | - | | 1886-07-28 | Brest, (France) | - | - | [📝](transcriptions/1886-07-28.md) | [a](lettres_scannees/1886-07-28%20a.jpg), [b](lettres_scannees/1886-07-28%20b.jpg), [c](lettres_scannees/1886-07-28%20c.jpg) | 3 |
| [1886-08-06](transcriptions/1886-08-06.md) | - | ✓ | [a](lettres_scannees/1886-08-06%20a.jpg), [b](lettres_scannees/1886-08-06%20b.jpg), [c](lettres_scannees/1886-08-06%20c.jpg) | - | | 1886-08-06 | Brest, (France) | - | - | [📝](transcriptions/1886-08-06.md) | [a](lettres_scannees/1886-08-06%20a.jpg), [b](lettres_scannees/1886-08-06%20b.jpg), [c](lettres_scannees/1886-08-06%20c.jpg) | 3 |
| [1886-08-27](transcriptions/1886-08-27.md) | - | ✓ | [a](lettres_scannees/1886-08-27%20a.jpg), [b](lettres_scannees/1886-08-27%20b.jpg) | - | | 1886-08-27 | Toulon, (France) | - | Ducouëdie | [📝](transcriptions/1886-08-27.md) | [a](lettres_scannees/1886-08-27%20a.jpg), [b](lettres_scannees/1886-08-27%20b.jpg) | 2 |
| [1886-09-25](transcriptions/1886-09-25.md) | - | ✓ | [a](lettres_scannees/1886-09-25%20a.jpg), [b](lettres_scannees/1886-09-25%20b.jpg) | - | | 1886-09-25 | Toulon, (France) | - | Ducouëdie | [📝](transcriptions/1886-09-25.md) | [a](lettres_scannees/1886-09-25%20a.jpg), [b](lettres_scannees/1886-09-25%20b.jpg), [c](lettres_scannees/1886-09-25%20c.jpg), [d](lettres_scannees/1886-09-25%20d.jpg), [e](lettres_scannees/1886-09-25%20e.jpg), [f](lettres_scannees/1886-09-25%20f.jpg), [g](lettres_scannees/1886-09-25%20g.jpg) | 7 |
### Lettres supplémentaires (transcriptions uniquement) ### Année 1887
Les lettres suivantes disposent de transcriptions mais n'ont pas d'images scannées correspondantes dans la collection actuelle : | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|---------------|-------------|---------|---------------|---------|-------|
| 1887-03-12 | - | - | - | [📝](transcriptions/1887-03-12.md) | [a](lettres_scannees/1887-03-12%20a.jpg), [b](lettres_scannees/1887-03-12%20b.jpg) | 2 |
| 1887-03-28 | La Havane, (Cuba) | - | Ducouëdie | [📝](transcriptions/1887-03-28.md) | [a](lettres_scannees/1887-03-28%20a.jpg), [b](lettres_scannees/1887-03-28%20b.jpg), [c](lettres_scannees/1887-03-28%20c.jpg), [d](lettres_scannees/1887-03-28%20d.jpg), [e](lettres_scannees/1887-03-28%20e.jpg) | 5 |
| 1887-04-15 | Savannah, (Géorgie) | - | Ducouëdie | [📝](transcriptions/1887-04-15.md) | [a](lettres_scannees/1887-04-15%20a.jpg), [b](lettres_scannees/1887-04-15%20b.jpg), [c](lettres_scannees/1887-04-15%20c.jpg) | 3 |
| 1887-04-17 | Savannah, (Géorgie) | - | Ducouëdie | [📝](transcriptions/1887-04-17.md) | [a](lettres_scannees/1887-04-17%20a.jpg), [b](lettres_scannees/1887-04-17%20b.jpg), [c](lettres_scannees/1887-04-17%20c.jpg) | 3 |
| 1887-05-15 | Fort de France, (France) | - | Ducouëdie | [📝](transcriptions/1887-05-15.md) | [a](lettres_scannees/1887-05-15%20a.jpg), [b](lettres_scannees/1887-05-15%20b.jpg), [c](lettres_scannees/1887-05-15%20c.jpg), [d](lettres_scannees/1887-05-15%20d.jpg), [e](lettres_scannees/1887-05-15%20e.jpg) | 5 |
#### 1887 ### Année 1888
- [1887-03-12](transcriptions/1887-03-12.md)
- [1887-03-28](transcriptions/1887-03-28.md)
- [1887-04-15](transcriptions/1887-04-15.md) - Voyage maritime vers les Antilles
- [1887-04-17](transcriptions/1887-04-17.md)
- [1887-05-15](transcriptions/1887-05-15.md)
#### 1888 | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
- [1888-07-30](transcriptions/1888-07-30.md) |------|---------------|-------------|---------|---------------|---------|-------|
| 1888-07-30 | Paris, (France) | - | - | [📝](transcriptions/1888-07-30.md) | [a](lettres_scannees/1888-07-30%20a.jpg), [b](lettres_scannees/1888-07-30%20b.jpg), [c](lettres_scannees/1888-07-30%20c.jpg), [d](lettres_scannees/1888-07-30%20d.jpg), [e](lettres_scannees/1888-07-30%20e.jpg), [f](lettres_scannees/1888-07-30%20f.jpg) | 6 |
#### 1889 ### Année 1889
- [1889-06-20](transcriptions/1889-06-20.md) - Port de Toulon, navire "Albatros", départ pour le Gabon
- [1889-07-04](transcriptions/1889-07-04.md) - Paris, 9 rue Monsigny, navire "Ville-de-Maranhão"
- [1889-07-12](transcriptions/1889-07-12.md)
- [1889-08-17](transcriptions/1889-08-17.md)
- [1889-08-27](transcriptions/1889-08-27.md)
- [1889-08-27-2](transcriptions/1889-08-27-2.md)
- [1889-09-06](transcriptions/1889-09-06.md)
- [1889-09-15](transcriptions/1889-09-15.md)
- [1889-09-15-2](transcriptions/1889-09-15-2.md)
- [1889-09-27](transcriptions/1889-09-27.md)
- [1889-10-10](transcriptions/1889-10-10.md)
- [1889-10-18](transcriptions/1889-10-18.md)
- [1889-11-15](transcriptions/1889-11-15.md)
- [1889-11-28](transcriptions/1889-11-28.md)
- [1889-12-03](transcriptions/1889-12-03.md)
- [1889-12-16](transcriptions/1889-12-16.md)
- [1889-12-29](transcriptions/1889-12-29.md)
#### 1890 | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
- [1890-01-14](transcriptions/1890-01-14.md) |------|---------------|-------------|---------|---------------|---------|-------|
- [1890-02-05](transcriptions/1890-02-05.md) | 1889-06-20 | Toulon, (France) | - | Albatros | [📝](transcriptions/1889-06-20.md) | [a](lettres_scannees/1889-06-20%20a.jpg), [b](lettres_scannees/1889-06-20%20b.jpg) | 2 |
- [1890-02-22](transcriptions/1890-02-22.md) | 1889-07-04 | Paris, (France) | - | - | [📝](transcriptions/1889-07-04.md) | [a](lettres_scannees/1889-07-04%20a.jpg), [b](lettres_scannees/1889-07-04%20b.jpg), [c](lettres_scannees/1889-07-04%20c.jpg) | 3 |
- [1890-03-01](transcriptions/1890-03-01.md) | 1889-07-12 | (Portugal) | - | - | [📝](transcriptions/1889-07-12.md) | [a](lettres_scannees/1889-07-12%20a.jpg), [b](lettres_scannees/1889-07-12%20b.jpg), [c](lettres_scannees/1889-07-12%20c.jpg) | 3 |
- [1890-03-23](transcriptions/1890-03-23.md) | 1889-08-17 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-08-17.md) | [a](lettres_scannees/1889-08-17%20a.jpg), [b](lettres_scannees/1889-08-17%20b.jpg), [c](lettres_scannees/1889-08-17%20c.jpg) | 3 |
- [1890-04-01](transcriptions/1890-04-01.md) | 1889-08-27 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-08-27.md) | [a](lettres_scannees/1889-08-27%20a.jpg), [b](lettres_scannees/1889-08-27%20b.jpg), [c](lettres_scannees/1889-08-27%20c.jpg) | 9 |
- [1890-05-08](transcriptions/1890-05-08.md) - Lirianja (Oubanghi), navire "Léon XIII" | 1889-09-06 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-09-06.md) | [a](lettres_scannees/1889-09-06%20a.jpg), [b](lettres_scannees/1889-09-06%20b.jpg), [c](lettres_scannees/1889-09-06%20c.jpg) | 3 |
- [1890-05-21](transcriptions/1890-05-21.md) | 1889-09-15 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-09-15.md) | [a](lettres_scannees/1889-09-15%20a.jpg), [b](lettres_scannees/1889-09-15%20b.jpg), [c](lettres_scannees/1889-09-15%20c.jpg), [d](lettres_scannees/1889-09-15%20d.jpg), [e](lettres_scannees/1889-09-15%20e.jpg), [f](lettres_scannees/1889-09-15%20f.jpg) | 9 |
- [1890-09-01](transcriptions/1890-09-01.md) | 1889-09-27 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-09-27.md) | [a](lettres_scannees/1889-09-27%20a.jpg), [b](lettres_scannees/1889-09-27%20b.jpg), [c](lettres_scannees/1889-09-27%20c.jpg), [d](lettres_scannees/1889-09-27%20d.jpg), [e](lettres_scannees/1889-09-27%20e.jpg) | 5 |
- [1890-11-20](transcriptions/1890-11-20.md) | 1889-10-10 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-10-10.md) | [a](lettres_scannees/1889-10-10%20a.jpg), [b](lettres_scannees/1889-10-10%20b.jpg), [c](lettres_scannees/1889-10-10%20c.jpg), [d](lettres_scannees/1889-10-10%20d.jpg), [e](lettres_scannees/1889-10-10%20e.jpg), [f](lettres_scannees/1889-10-10%20f.jpg), [g](lettres_scannees/1889-10-10%20g.jpg), [h](lettres_scannees/1889-10-10%20h.jpg), [i](lettres_scannees/1889-10-10%20i.jpg) | 9 |
| 1889-10-18 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-10-18.md) | [a](lettres_scannees/1889-10-18%20a.jpg), [b](lettres_scannees/1889-10-18%20b.jpg), [c](lettres_scannees/1889-10-18%20c.jpg), [d](lettres_scannees/1889-10-18%20d.jpg), [e](lettres_scannees/1889-10-18%20e.jpg) | 5 |
| 1889-11-15 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-11-15.md) | [a](lettres_scannees/1889-11-15%20a.jpg), [b](lettres_scannees/1889-11-15%20b.jpg), [c](lettres_scannees/1889-11-15%20c.jpg), [d](lettres_scannees/1889-11-15%20d.jpg), [e](lettres_scannees/1889-11-15%20e.jpg), [f](lettres_scannees/1889-11-15%20f.jpg) | 6 |
| 1889-11-28 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-11-28.md) | [a](lettres_scannees/1889-11-28%20a.jpg), [b](lettres_scannees/1889-11-28%20b.jpg), [c](lettres_scannees/1889-11-28%20c.jpg), [d](lettres_scannees/1889-11-28%20d.jpg), [e](lettres_scannees/1889-11-28%20e.jpg), [f](lettres_scannees/1889-11-28%20f.jpg), [g](lettres_scannees/1889-11-28%20g.jpg), [h](lettres_scannees/1889-11-28%20h.jpg), [i](lettres_scannees/1889-11-28%20i.jpg) | 9 |
| 1889-12-03 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-12-03.md) | [a](lettres_scannees/1889-12-03%20a.jpg), [b](lettres_scannees/1889-12-03%20b.jpg) | 2 |
| 1889-12-16 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-12-16.md) | [a](lettres_scannees/1889-12-16%20a.jpg), [b](lettres_scannees/1889-12-16%20b.jpg), [c](lettres_scannees/1889-12-16%20c.jpg), [d](lettres_scannees/1889-12-16%20d.jpg), [e](lettres_scannees/1889-12-16%20e.jpg), [f](lettres_scannees/1889-12-16%20f.jpg), [g](lettres_scannees/1889-12-16%20g.jpg), [h](lettres_scannees/1889-12-16%20h.jpg), [i](lettres_scannees/1889-12-16%20i.jpg) | 9 |
| 1889-12-29 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1889-12-29.md) | [a](lettres_scannees/1889-12-29%20a.jpg), [b](lettres_scannees/1889-12-29%20b.jpg), [c](lettres_scannees/1889-12-29%20c.jpg), [d](lettres_scannees/1889-12-29%20d.jpg), [e](lettres_scannees/1889-12-29%20e.jpg), [f](lettres_scannees/1889-12-29%20f.jpg) | 6 |
#### 1891-1895 ### Année 1890
*[Liste détaillée de toutes les transcriptions disponibles pour ces années]*
## Informations géographiques et navales | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|---------------|-------------|---------|---------------|---------|-------|
| 1890-01-14 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1890-01-14.md) | [a](lettres_scannees/1890-01-14%20a.jpg), [b](lettres_scannees/1890-01-14%20b.jpg) | 2 |
| 1890-02-05 | Loango, (Congo Français) | - | - | [📝](transcriptions/1890-02-05.md) | [a](lettres_scannees/1890-02-05%20a.jpg), [b](lettres_scannees/1890-02-05%20b.jpg) | 2 |
| 1890-02-22 | Loudima, (Congo Français) | - | - | [📝](transcriptions/1890-02-22.md) | [a](lettres_scannees/1890-02-22%20a.jpg), [b](lettres_scannees/1890-02-22%20b.jpg), [c](lettres_scannees/1890-02-22%20c.jpg) | 3 |
| 1890-03-01 | Bonenza, (Cameroun) | - | - | [📝](transcriptions/1890-03-01.md) | [a](lettres_scannees/1890-03-01%20a.jpg), [b](lettres_scannees/1890-03-01%20b.jpg) | 2 |
| 1890-03-23 | Comtier ? | - | - | [📝](transcriptions/1890-03-23.md) | [a](lettres_scannees/1890-03-23%20a.jpg), [b](lettres_scannees/1890-03-23%20b.jpg) | 2 |
| 1890-04-01 | Manyanga, (Congo Français) | - | - | [📝](transcriptions/1890-04-01.md) | [a](lettres_scannees/1890-04-01%20a.jpg), [b](lettres_scannees/1890-04-01%20b.jpg) | 2 |
| 1890-05-08 | Liranga, (Oubanghi) | - | - | [📝](transcriptions/1890-05-08.md) | [a](lettres_scannees/1890-05-08%20a.jpg), [b](lettres_scannees/1890-05-08%20b.jpg) | 2 |
| 1890-05-21 | Moozaka, (Oubanghi) | - | - | [📝](transcriptions/1890-05-21.md) | [a](lettres_scannees/1890-05-21%20a.jpg), [b](lettres_scannees/1890-05-21%20b.jpg) | 2 |
| 1890-09-01 | Lastoursville, (Congo Français) | - | - | [📝](transcriptions/1890-09-01.md) | [a](lettres_scannees/1890-09-01%20a.jpg), [b](lettres_scannees/1890-09-01%20b.jpg), [c](lettres_scannees/1890-09-01%20c.jpg) | 3 |
| 1890-11-20 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1890-11-20.md) | [a](lettres_scannees/1890-11-20%20a.jpg), [b](lettres_scannees/1890-11-20%20b.jpg) | 2 |
### Ports et lieux mentionnés ### Année 1891
**Ports français :** | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
- **Toulon** - Port d'attache principal, rade de Toulon |------|---------------|-------------|---------|---------------|---------|-------|
- **Brest** - Rade de Brest | 1891-01-19 | Draguignan, (France) | - | - | [📝](transcriptions/1891-01-19.md) | [a](lettres_scannees/1891-01-19%20a.jpg), [b](lettres_scannees/1891-01-19%20b.jpg) | 2 |
- **Lorient** - Port de retour, 109 rue du Port | 1891-01-30 | Draguignan, (France) | - | - | [📝](transcriptions/1891-01-30.md) | [a](lettres_scannees/1891-01-30%20a.jpg), [b](lettres_scannees/1891-01-30%20b.jpg), [c](lettres_scannees/1891-01-30%20c.jpg) | 3 |
- **Bordeaux** - Port de départ pour les colonies | 1891-02-17 | Draguignan, (France) | - | - | [📝](transcriptions/1891-02-17.md) | [a](lettres_scannees/1891-02-17%20a.jpg), [b](lettres_scannees/1891-02-17%20b.jpg), [c](lettres_scannees/1891-02-17%20c.jpg), [d](lettres_scannees/1891-02-17%20d.jpg), [e](lettres_scannees/1891-02-17%20e.jpg), [f](lettres_scannees/1891-02-17%20f.jpg), [g](lettres_scannees/1891-02-17%20g.jpg), [h](lettres_scannees/1891-02-17%20h.jpg), [i](lettres_scannees/1891-02-17%20i.jpg), [j](lettres_scannees/1891-02-17%20j.jpg), [k](lettres_scannees/1891-02-17%20k.jpg), [l](lettres_scannees/1891-02-17%20l.jpg) | 12 |
| 1891-02-24 | Draguignan, (France) | - | - | [📝](transcriptions/1891-02-24.md) | [a](lettres_scannees/1891-02-24%20a.jpg), [b](lettres_scannees/1891-02-24%20b.jpg), [c](lettres_scannees/1891-02-24%20c.jpg), [d](lettres_scannees/1891-02-24%20d.jpg), [e](lettres_scannees/1891-02-24%20e.jpg) | 5 |
| 1891-02-25 | Draguignan, (France) | - | - | [📝](transcriptions/1891-02-25.md) | [a](lettres_scannees/1891-02-25%20a.jpg), [b](lettres_scannees/1891-02-25%20b.jpg), [c](lettres_scannees/1891-02-25%20c.jpg) | 3 |
| 1891-03-19 | Draguignan, (France) | - | - | [📝](transcriptions/1891-03-19.md) | [a](lettres_scannees/1891-03-19%20a.jpg), [b](lettres_scannees/1891-03-19%20b.jpg) | 2 |
| 1891-04-28 | Paris, (France) | - | - | [📝](transcriptions/1891-04-28.md) | [a](lettres_scannees/1891-04-28%20a.jpg), [b](lettres_scannees/1891-04-28%20b.jpg), [c](lettres_scannees/1891-04-28%20c.jpg) | 3 |
| 1891-05-02 | Paris, (France) | - | - | [📝](transcriptions/1891-05-02.md) | [a](lettres_scannees/1891-05-02%20a.jpg), [b](lettres_scannees/1891-05-02%20b.jpg), [c](lettres_scannees/1891-05-02%20c.jpg), [d](lettres_scannees/1891-05-02%20d.jpg) | 4 |
| 1891-05-07 | Paris, (France) | - | - | [📝](transcriptions/1891-05-07.md) | [a](lettres_scannees/1891-05-07%20a.jpg), [b](lettres_scannees/1891-05-07%20b.jpg), [c](lettres_scannees/1891-05-07%20c.jpg) | 3 |
| 1891-05-18 | Lusignan, (France) | - | - | [📝](transcriptions/1891-05-18.md) | [a](lettres_scannees/1891-05-18%20a.jpg), [b](lettres_scannees/1891-05-18%20b.jpg), [c](lettres_scannees/1891-05-18%20c.jpg) | 3 |
| 1891-05-25 | Chateauroux, (France) | - | - | [📝](transcriptions/1891-05-25.md) | [a](lettres_scannees/1891-05-25%20a.jpg), [b](lettres_scannees/1891-05-25%20b.jpg), [c](lettres_scannees/1891-05-25%20c.jpg), [d](lettres_scannees/1891-05-25%20d.jpg), [e](lettres_scannees/1891-05-25%20e.jpg) | 5 |
| 1891-05-29 | Chateauroux, (France) | - | - | [📝](transcriptions/1891-05-29.md) | [a](lettres_scannees/1891-05-29%20a.jpg), [b](lettres_scannees/1891-05-29%20b.jpg), [c](lettres_scannees/1891-05-29%20c.jpg) | 3 |
| 1891-06-01 | La Bourboule les Bains, (France) | - | - | [📝](transcriptions/1891-06-01.md) | [a](lettres_scannees/1891-06-01%20a.jpg), [b](lettres_scannees/1891-06-01%20b.jpg), [c](lettres_scannees/1891-06-01%20c.jpg), [d](lettres_scannees/1891-06-01%20d.jpg), [e](lettres_scannees/1891-06-01%20e.jpg) | 5 |
| 1891-06-08 | La Bourboule les Bains, (France) | - | - | [📝](transcriptions/1891-06-08.md) | [a](lettres_scannees/1891-06-08%20a.jpg), [b](lettres_scannees/1891-06-08%20b.jpg), [c](lettres_scannees/1891-06-08%20c.jpg), [d](lettres_scannees/1891-06-08%20d.jpg), [e](lettres_scannees/1891-06-08%20e.jpg) | 5 |
| 1891-06-11 | La Bourboule les Bains, (France) | - | - | [📝](transcriptions/1891-06-11.md) | [a](lettres_scannees/1891-06-11%20a.jpg), [b](lettres_scannees/1891-06-11%20b.jpg), [c](lettres_scannees/1891-06-11%20c.jpg), [d](lettres_scannees/1891-06-11%20d.jpg), [e](lettres_scannees/1891-06-11%20e.jpg) | 5 |
| 1891-06-16 | La Bourboule les Bains, (France) | - | - | [📝](transcriptions/1891-06-16.md) | [a](lettres_scannees/1891-06-16%20a.jpg), [b](lettres_scannees/1891-06-16%20b.jpg), [c](lettres_scannees/1891-06-16%20c.jpg) | 3 |
| 1891-06-20 | Draguignan, (France) | - | - | [📝](transcriptions/1891-06-20.md) | [a](lettres_scannees/1891-06-20%20a.jpg), [b](lettres_scannees/1891-06-20%20b.jpg), [c](lettres_scannees/1891-06-20%20c.jpg), [d](lettres_scannees/1891-06-20%20d.jpg) | 4 |
| 1891-08-14 | Draguignan, (France) | - | - | [📝](transcriptions/1891-08-14.md) | [a](lettres_scannees/1891-08-14%20a.jpg), [b](lettres_scannees/1891-08-14%20b.jpg) | 2 |
| 1891-08-21 | Draguignan, (France) | - | - | [📝](transcriptions/1891-08-21.md) | [a](lettres_scannees/1891-08-21%20a.jpg), [b](lettres_scannees/1891-08-21%20b.jpg), [c](lettres_scannees/1891-08-21%20c.jpg) | 3 |
| 1891-08-27 | - | - | Tibet | [📝](transcriptions/1891-08-27.md) | [a](lettres_scannees/1891-08-27%20a.jpg), [b](lettres_scannees/1891-08-27%20b.jpg), [c](lettres_scannees/1891-08-27%20c.jpg) | 3 |
| 1891-09-01 | - | - | Tibet | [📝](transcriptions/1891-09-01.md) | [a](lettres_scannees/1891-09-01%20a.jpg), [b](lettres_scannees/1891-09-01%20b.jpg), [c](lettres_scannees/1891-09-01%20c.jpg) | 3 |
| 1891-09-03 | - | - | Tibet | [📝](transcriptions/1891-09-03.md) | [a](lettres_scannees/1891-09-03%20a.jpg) | 1 |
| 1891-09-10 | - | - | Tibet | [📝](transcriptions/1891-09-10.md) | [a](lettres_scannees/1891-09-10%20a.jpg), [b](lettres_scannees/1891-09-10%20b.jpg) | 2 |
| 1891-09-20 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1891-09-20.md) | [a](lettres_scannees/1891-09-20%20a.jpg), [b](lettres_scannees/1891-09-20%20b.jpg) | 2 |
| 1891-11-17 | Fernan-Vaz, (Congo Français) | - | - | [📝](transcriptions/1891-11-17.md) | [a](lettres_scannees/1891-11-17%20a.jpg), [b](lettres_scannees/1891-11-17%20b.jpg) | 2 |
| 1891-12-03 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1891-12-03.md) | [a](lettres_scannees/1891-12-03%20a.jpg), [b](lettres_scannees/1891-12-03%20b.jpg), [c](lettres_scannees/1891-12-03%20c.jpg) | 3 |
| 1891-12-08 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1891-12-08.md) | [a](lettres_scannees/1891-12-08%20a.jpg), [b](lettres_scannees/1891-12-08%20b.jpg), [c](lettres_scannees/1891-12-08%20c.jpg) | 3 |
| 1891-12-15 | Libreville, (Congo Français) | - | - | [📝](transcriptions/1891-12-15.md) | [a](lettres_scannees/1891-12-15%20a.jpg), [b](lettres_scannees/1891-12-15%20b.jpg), [c](lettres_scannees/1891-12-15%20c.jpg), [d](lettres_scannees/1891-12-15%20d.jpg) | 4 |
**Destinations coloniales :** ### Année 1892
- **Gabon** - Libreville
- **Côte de Guinée**
- **Dakar**
- **Oubanghi** - Lirianja
**Autres lieux :** | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
- **Paris** - 9 rue Monsigny |------|---------------|-------------|---------|---------------|---------|-------|
- **Las Palmas** (Canaries) | 1892-01-07 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-01-07.md) | [a](lettres_scannees/1892-01-07%20a.jpg), [b](lettres_scannees/1892-01-07%20b.jpg), [c](lettres_scannees/1892-01-07%20c.jpg) | 3 |
- **Méditerranée** - Marseille, Nice, Monaco, etc. | 1892-01-27 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-01-27.md) | [a](lettres_scannees/1892-01-27%20a.jpg), [b](lettres_scannees/1892-01-27%20b.jpg), [c](lettres_scannees/1892-01-27%20c.jpg) | 3 |
| 1892-02-01 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-02-01.md) | [a](lettres_scannees/1892-02-01%20a.jpg) | 1 |
| 1892-02-11 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-02-11.md) | [a](lettres_scannees/1892-02-11%20a.jpg), [b](lettres_scannees/1892-02-11%20b.jpg), [c](lettres_scannees/1892-02-11%20c.jpg) | 3 |
| 1892-02-19 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-02-19.md) | [a](lettres_scannees/1892-02-19%20a.jpg), [b](lettres_scannees/1892-02-19%20b.jpg) | 2 |
| 1892-03-14 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-03-14.md) | [a](lettres_scannees/1892-03-14%20a.jpg), [b](lettres_scannees/1892-03-14%20b.jpg), [c](lettres_scannees/1892-03-14%20c.jpg), [d](lettres_scannees/1892-03-14%20d.jpg), [e](lettres_scannees/1892-03-14%20e.jpg), [f](lettres_scannees/1892-03-14%20f.jpg) | 6 |
| 1892-03-31 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-03-31.md) | [a](lettres_scannees/1892-03-31%20a.jpg), [b](lettres_scannees/1892-03-31%20b.jpg), [c](lettres_scannees/1892-03-31%20c.jpg) | 3 |
| 1892-04-15 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-04-15.md) | [a](lettres_scannees/1892-04-15%20a.jpg), [b](lettres_scannees/1892-04-15%20b.jpg) | 2 |
| 1892-04-22 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-04-22.md) | [a](lettres_scannees/1892-04-22%20a.jpg), [b](lettres_scannees/1892-04-22%20b.jpg), [c](lettres_scannees/1892-04-22%20c.jpg) | 3 |
| 1892-05-31 | Mayumba, (Congo Français) | - | - | [📝](transcriptions/1892-05-31.md) | [a](lettres_scannees/1892-05-31%20a.jpg), [b](lettres_scannees/1892-05-31%20b.jpg) | 2 |
| 1892-10-23 | Paris, (France) | - | - | [📝](transcriptions/1892-10-23.md) | [a](lettres_scannees/1892-10-23%20a.jpg), [b](lettres_scannees/1892-10-23%20b.jpg), [c](lettres_scannees/1892-10-23%20c.jpg) | 3 |
| 1892-11-03 | Paris, (France) | - | - | [📝](transcriptions/1892-11-03.md) | [a](lettres_scannees/1892-11-03%20a.jpg), [b](lettres_scannees/1892-11-03%20b.jpg), [c](lettres_scannees/1892-11-03%20c.jpg) | 3 |
| 1892-11-15 | Paris, (France) | - | - | [📝](transcriptions/1892-11-15.md) | [a](lettres_scannees/1892-11-15%20a.jpg), [b](lettres_scannees/1892-11-15%20b.jpg), [c](lettres_scannees/1892-11-15%20c.jpg) | 3 |
| 1892-11-22 | Paris, (France) | - | - | [📝](transcriptions/1892-11-22.md) | [a](lettres_scannees/1892-11-22%20a.jpg), [b](lettres_scannees/1892-11-22%20b.jpg), [c](lettres_scannees/1892-11-22%20c.jpg) | 3 |
| 1892-12-06 | Paris, (France) | - | - | [📝](transcriptions/1892-12-06.md) | [a](lettres_scannees/1892-12-06%20a.jpg), [b](lettres_scannees/1892-12-06%20b.jpg), [c](lettres_scannees/1892-12-06%20c.jpg) | 3 |
| 1892-12-12 | Paris, (France) | - | - | [📝](transcriptions/1892-12-12.md) | [a](lettres_scannees/1892-12-12%20a.jpg), [b](lettres_scannees/1892-12-12%20b.jpg), [c](lettres_scannees/1892-12-12%20c.jpg) | 3 |
| 1892-12-14 | Paris, (France) | - | - | [📝](transcriptions/1892-12-14.md) | [a](lettres_scannees/1892-12-14%20a.jpg) | 1 |
| 1892-12-17 | Paris, (France) | - | - | [📝](transcriptions/1892-12-17.md) | [a](lettres_scannees/1892-12-17%20a.jpg), [b](lettres_scannees/1892-12-17%20b.jpg) | 2 |
| 1892-12-20 | Paris, (France) | - | - | [📝](transcriptions/1892-12-20.md) | [a](lettres_scannees/1892-12-20%20a.jpg), [b](lettres_scannees/1892-12-20%20b.jpg), [c](lettres_scannees/1892-12-20%20c.jpg) | 3 |
| 1892-12-24 | Paris, (France) | - | - | [📝](transcriptions/1892-12-24.md) | [a](lettres_scannees/1892-12-24%20a.jpg), [b](lettres_scannees/1892-12-24%20b.jpg) | 2 |
### Navires mentionnés ### Année 1893
- **"Albatros"** - Navire principal de Jules Berton, devenu ponton à Lorient en 1886 | Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
- **"Ville-de-Maranhão"** - Navire des Chargeurs Réunis (1889) |------|---------------|-------------|---------|---------------|---------|-------|
- **"Gilbet"** - Navire de transport (1891) | 1893-01-10 | Paris, (France) | - | - | [📝](transcriptions/1893-01-10.md) | [a](lettres_scannees/1893-01-10%20a.jpg), [b](lettres_scannees/1893-01-10%20b.jpg) | 2 |
- **"Léon XIII"** - Petit vapeur de la mission catholique (1890) | 1893-01-19 | Paris, (France) | - | - | [📝](transcriptions/1893-01-19.md) | [a](lettres_scannees/1893-01-19%20a.jpg), [b](lettres_scannees/1893-01-19%20b.jpg) | 2 |
| 1893-01-27 | Paris, (France) | - | - | [📝](transcriptions/1893-01-27.md) | [a](lettres_scannees/1893-01-27%20a.jpg), [b](lettres_scannees/1893-01-27%20b.jpg), [c](lettres_scannees/1893-01-27%20c.jpg) | 3 |
| 1893-02-04 | Paris, (France) | - | - | [📝](transcriptions/1893-02-04.md) | [a](lettres_scannees/1893-02-04%20a.jpg), [b](lettres_scannees/1893-02-04%20b.jpg), [c](lettres_scannees/1893-02-04%20c.jpg) | 3 |
| 1893-02-16 | Paris, (France) | - | - | [📝](transcriptions/1893-02-16.md) | [a](lettres_scannees/1893-02-16%20a.jpg), [b](lettres_scannees/1893-02-16%20b.jpg), [c](lettres_scannees/1893-02-16%20c.jpg), [d](lettres_scannees/1893-02-16%20d.jpg), [e](lettres_scannees/1893-02-16%20e.jpg), [f](lettres_scannees/1893-02-16%20f.jpg) | 6 |
| 1893-02-27 | Paris, (France) | - | - | [📝](transcriptions/1893-02-27.md) | [a](lettres_scannees/1893-02-27%20a.jpg), [b](lettres_scannees/1893-02-27%20b.jpg) | 2 |
| 1893-03-05 | Paris, (France) | - | - | [📝](transcriptions/1893-03-05.md) | [a](lettres_scannees/1893-03-05%20a.jpg), [b](lettres_scannees/1893-03-05%20b.jpg), [c](lettres_scannees/1893-03-05%20c.jpg) | 3 |
| 1893-04-03 | Bordeaux, (France) | - | - | [📝](transcriptions/1893-04-03.md) | [a](lettres_scannees/1893-04-03%20a.jpg), [b](lettres_scannees/1893-04-03%20b.jpg), [c](lettres_scannees/1893-04-03%20c.jpg) | 3 |
| 1893-04-16 | Paris, (France) | - | - | [📝](transcriptions/1893-04-16.md) | [a](lettres_scannees/1893-04-16%20a.jpg), [b](lettres_scannees/1893-04-16%20b.jpg) | 2 |
### Année 1894
| Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|---------------|-------------|---------|---------------|---------|-------|
| 1894-04-04 | Bordeaux, (France) | - | - | [📝](transcriptions/1894-04-04.md) | [a](lettres_scannees/1894-04-04%20a.jpg), [b](lettres_scannees/1894-04-04%20b.jpg) | 2 |
| 1894-05-24 | Saint-Louis, (Sénégal) | - | - | [📝](transcriptions/1894-05-24.md) | [a](lettres_scannees/1894-05-24%20a.jpg), [b](lettres_scannees/1894-05-24%20b.jpg) | 2 |
| 1894-09-25 | Dagoua, (Sénégal) | - | - | [📝](transcriptions/1894-09-25.md) | [a](lettres_scannees/1894-09-25%20a.jpg), [b](lettres_scannees/1894-09-25%20b.jpg), [c](lettres_scannees/1894-09-25%20c.jpg) | 3 |
### Année 1895
| Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |
|------|---------------|-------------|---------|---------------|---------|-------|
| 1895-01-19 | Dagoua, (Sénégal) | - | - | [📝](transcriptions/1895-01-19.md) | [a](lettres_scannees/1895-01-19%20a.jpg), [b](lettres_scannees/1895-01-19%20b.jpg) | 2 |
## Personnages principaux ## Personnages principaux
@@ -207,15 +313,17 @@ Les lettres suivantes disposent de transcriptions mais n'ont pas d'images scann
- **Carrière navale** - Vie d'officier de marine, embarquements, navigations - **Carrière navale** - Vie d'officier de marine, embarquements, navigations
- **Missions coloniales** - Service au Gabon, en Afrique équatoriale - **Missions coloniales** - Service au Gabon, en Afrique équatoriale
- **Deuil familial** - Mort du père en 1886 - **Deuil familial** - Mort du père en 1886
- **Vie sociale** - Relations avec les familles Fruteau, Revel, etc. - **Vie sociale** - Relations avec les familles et amis
## Notes techniques ## Notes techniques
- Les transcriptions respectent l'orthographe et la ponctuation originales - Les transcriptions respectent l'orthographe et la ponctuation originales
- Les lettres sont organisées par ordre chronologique - Les lettres sont organisées par ordre chronologique
- Certaines lettres peuvent avoir plusieurs versions (suffixe -2) - Les métadonnées incluent les lieux d'époque et actuels quand disponibles
- Les images sont numérisées en haute résolution au format JPG - Les images sont numérisées en haute résolution au format JPG
- Certaines lettres peuvent avoir plusieurs versions (suffixe -2)
--- ---
*Dernière mise à jour : Septembre 2025* *Dernière mise à jour : 04 September 2025*
*Généré automatiquement à partir des métadonnées Excel*

371
generate_readme.py Normal file
View File

@@ -0,0 +1,371 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script pour générer un README.md complet en utilisant les métadonnées
des lettres de Jules Berton.
Auteur: Assistant IA
Date: Septembre 2025
"""
import json
import os
from pathlib import Path
from collections import defaultdict, Counter
from datetime import datetime
def load_metadata(json_path):
"""
Charge les métadonnées depuis le fichier JSON.
Args:
json_path (str): Chemin vers le fichier JSON
Returns:
list: Liste des métadonnées des lettres
"""
try:
with open(json_path, 'r', encoding='utf-8') as f:
return json.load(f)
except FileNotFoundError:
print(f"❌ Erreur: Le fichier '{json_path}' n'a pas été trouvé.")
return []
except Exception as e:
print(f"❌ Erreur lors de la lecture du fichier JSON: {e}")
return []
def group_letters_by_date(metadata):
"""
Groupe les lettres par date (chaque ligne du Excel représente une page).
Args:
metadata (list): Liste des métadonnées
Returns:
dict: Dictionnaire groupé par date
"""
letters_by_date = defaultdict(list)
for entry in metadata:
date = entry.get('Date')
if date:
letters_by_date[date].append(entry)
return dict(letters_by_date)
def get_letter_info(date_entries):
"""
Extrait les informations principales d'une lettre à partir de ses pages.
Args:
date_entries (list): Liste des entrées pour une même date
Returns:
dict: Informations consolidées de la lettre
"""
# Prendre les informations de la première page (elles sont identiques pour toutes les pages)
first_entry = date_entries[0]
return {
'date': first_entry.get('Date'),
'lieu_epoque': first_entry.get('Lieu d\'époque'),
'pays_epoque': first_entry.get('Pays d\'époque'),
'bateau': first_entry.get('Bateau'),
'lieu_actuel': first_entry.get('Lieu actuel'),
'pays_actuel': first_entry.get('Pays actuel'),
'has_transcription': first_entry.get('has_transcription', False),
'has_images': first_entry.get('has_images', False),
'image_count': len(date_entries), # Nombre de pages
'pages': [entry.get('Page') for entry in date_entries]
}
def generate_statistics(letters_data):
"""
Génère des statistiques sur la collection.
Args:
letters_data (dict): Données des lettres groupées par date
Returns:
dict: Statistiques de la collection
"""
stats = {
'total_letters': len(letters_data),
'total_pages': sum(info['image_count'] for info in letters_data.values()),
'with_transcription': sum(1 for info in letters_data.values() if info['has_transcription']),
'with_images': sum(1 for info in letters_data.values() if info['has_images']),
'years': defaultdict(int),
'locations': Counter(),
'countries': Counter(),
'boats': Counter()
}
for date, info in letters_data.items():
# Statistiques par année
year = date[:4]
stats['years'][year] += 1
# Lieux et pays
if info['lieu_epoque']:
stats['locations'][info['lieu_epoque']] += 1
if info['pays_epoque']:
stats['countries'][info['pays_epoque']] += 1
if info['bateau']:
stats['boats'][info['bateau']] += 1
return stats
def format_location_info(info):
"""
Formate les informations de lieu pour l'affichage.
Args:
info (dict): Informations de la lettre
Returns:
str: Lieu formaté
"""
lieu_parts = []
if info['lieu_epoque']:
lieu_parts.append(info['lieu_epoque'])
if info['pays_epoque'] and info['pays_epoque'] != info['lieu_epoque']:
lieu_parts.append(f"({info['pays_epoque']})")
return ", ".join(lieu_parts) if lieu_parts else "-"
def format_current_location(info):
"""
Formate les informations de lieu actuel.
Args:
info (dict): Informations de la lettre
Returns:
str: Lieu actuel formaté
"""
if info['lieu_actuel']:
if info['pays_actuel'] and info['pays_actuel'] != info['lieu_actuel']:
return f"{info['lieu_actuel']} ({info['pays_actuel']})"
return info['lieu_actuel']
return "-"
def generate_image_links(info):
"""
Génère les liens vers les images.
Args:
info (dict): Informations de la lettre
Returns:
str: Liens formatés
"""
if not info['has_images']:
return ""
links = []
for i, page in enumerate(info['pages']):
# Convertir en string et nettoyer
page_str = str(page) if page else ""
if page_str.endswith('.jpg'):
page_letter = page_str.replace('.jpg', '')
links.append(f"[{page_letter}](lettres_scannees/{info['date']}%20{page_str})")
else:
# Si ce n'est pas un nom de fichier, ignorer
continue
return ", ".join(links) if links else ""
def generate_readme_content(letters_data, stats):
"""
Génère le contenu complet du README.md.
Args:
letters_data (dict): Données des lettres
stats (dict): Statistiques
Returns:
str: Contenu du README
"""
content = []
# En-tête
content.append("# Correspondance de Jules Berton")
content.append("")
content.append("## Description du projet")
content.append("")
content.append("Cette collection présente la correspondance de Jules Berton et de sa famille, ")
content.append(f"comprenant **{stats['total_letters']} lettres** datées de 1875 à 1895, ")
content.append(f"représentant un total de **{stats['total_pages']} pages**.")
content.append("")
content.append("La collection comprend :")
content.append("- **Images scannées** : Les pages originales des lettres manuscrites (dossier `lettres_scannees/`)")
content.append("- **Transcriptions** : Les transcriptions complètes des lettres en format Markdown (dossier `transcriptions/`)")
content.append("- **Métadonnées** : Informations détaillées sur les dates, lieux et contexte (fichier Excel)")
content.append("")
# Statistiques
content.append("## Statistiques de la collection")
content.append("")
content.append(f"- **Total des lettres** : {stats['total_letters']}")
content.append(f"- **Total des pages** : {stats['total_pages']}")
content.append(f"- **Lettres avec transcription** : {stats['with_transcription']} ({stats['with_transcription']/stats['total_letters']*100:.1f}%)")
content.append(f"- **Lettres avec images** : {stats['with_images']} ({stats['with_images']/stats['total_letters']*100:.1f}%)")
content.append("")
# Répartition par année
content.append("### Répartition par année")
content.append("")
for year in sorted(stats['years'].keys()):
count = stats['years'][year]
content.append(f"- **{year}** : {count} lettres")
content.append("")
# Lieux principaux
if stats['locations']:
content.append("### Lieux principaux mentionnés")
content.append("")
for lieu, count in stats['locations'].most_common(10):
content.append(f"- **{lieu}** : {count} lettres")
content.append("")
# Navires
if stats['boats']:
content.append("### Navires mentionnés")
content.append("")
for bateau, count in stats['boats'].most_common():
content.append(f"- **{bateau}** : {count} lettres")
content.append("")
# Structure des fichiers
content.append("## Organisation des données")
content.append("")
content.append("### Structure des fichiers")
content.append("")
content.append("```")
content.append("├── Jules Berton - lettres, dates et lieux.xlsx # Métadonnées détaillées")
content.append("├── lettres_scannees/ # Images originales")
content.append("│ ├── YYYY-MM-DD a.jpg # Page 1 de la lettre")
content.append("│ ├── YYYY-MM-DD b.jpg # Page 2 de la lettre")
content.append("│ └── ...")
content.append("├── transcriptions/ # Transcriptions textuelles")
content.append("│ ├── YYYY-MM-DD.md # Transcription complète")
content.append("│ └── ...")
content.append("└── README.md # Ce fichier")
content.append("```")
content.append("")
# Catalogue des lettres par année
content.append("## Catalogue des lettres")
content.append("")
# Grouper par année
letters_by_year = defaultdict(list)
for date, info in sorted(letters_data.items()):
year = date[:4]
letters_by_year[year].append((date, info))
for year in sorted(letters_by_year.keys()):
content.append(f"### Année {year}")
content.append("")
content.append("| Date | Lieu d'époque | Lieu actuel | Bateau | Transcription | Images | Pages |")
content.append("|------|---------------|-------------|---------|---------------|---------|-------|")
for date, info in letters_by_year[year]:
transcription_link = f"[📝](transcriptions/{date}.md)" if info['has_transcription'] else ""
images_link = generate_image_links(info)
lieu_epoque = format_location_info(info)
lieu_actuel = format_current_location(info)
bateau = info['bateau'] if info['bateau'] else "-"
content.append(f"| {date} | {lieu_epoque} | {lieu_actuel} | {bateau} | {transcription_link} | {images_link} | {info['image_count']} |")
content.append("")
# Informations sur les personnages
content.append("## Personnages principaux")
content.append("")
content.append("- **Jules Berton** - Officier de marine, auteur principal des lettres")
content.append("- **Marie** - Sœur de Jules, destinataire fréquente")
content.append("- **Henriette** - Sœur")
content.append("- **Camille** - Beau-frère")
content.append("- **M. de Brazza** - Administrateur colonial mentionné")
content.append("")
# Thèmes
content.append("## Thèmes récurrents")
content.append("")
content.append("- **Correspondance familiale** - Échanges entre frères et sœurs")
content.append("- **Carrière navale** - Vie d'officier de marine, embarquements, navigations")
content.append("- **Missions coloniales** - Service au Gabon, en Afrique équatoriale")
content.append("- **Deuil familial** - Mort du père en 1886")
content.append("- **Vie sociale** - Relations avec les familles et amis")
content.append("")
# Notes techniques
content.append("## Notes techniques")
content.append("")
content.append("- Les transcriptions respectent l'orthographe et la ponctuation originales")
content.append("- Les lettres sont organisées par ordre chronologique")
content.append("- Les métadonnées incluent les lieux d'époque et actuels quand disponibles")
content.append("- Les images sont numérisées en haute résolution au format JPG")
content.append("- Certaines lettres peuvent avoir plusieurs versions (suffixe -2)")
content.append("")
content.append("---")
content.append("")
content.append(f"*Dernière mise à jour : {datetime.now().strftime('%d %B %Y')}*")
content.append(f"*Généré automatiquement à partir des métadonnées Excel*")
return "\n".join(content)
def main():
"""Fonction principale."""
base_path = Path(__file__).parent
json_path = base_path / "lettres_metadata.json"
readme_path = base_path / "README.md"
print("📚 GÉNÉRATION DU README.MD AVEC MÉTADONNÉES")
print("=" * 50)
# Charger les métadonnées
metadata = load_metadata(json_path)
if not metadata:
return
print(f"{len(metadata)} entrées chargées depuis le JSON")
# Grouper par date
letters_by_date = group_letters_by_date(metadata)
# Consolider les informations par lettre
letters_data = {}
for date, entries in letters_by_date.items():
letters_data[date] = get_letter_info(entries)
print(f"{len(letters_data)} lettres consolidées")
# Générer les statistiques
stats = generate_statistics(letters_data)
print(f"✓ Statistiques générées")
print(f" - {stats['total_letters']} lettres")
print(f" - {stats['total_pages']} pages")
print(f" - {len(stats['years'])} années couvertes")
print(f" - {len(stats['locations'])} lieux différents")
print(f" - {len(stats['boats'])} navires mentionnés")
# Générer le contenu du README
readme_content = generate_readme_content(letters_data, stats)
# Écrire le fichier
try:
with open(readme_path, 'w', encoding='utf-8') as f:
f.write(readme_content)
print(f"✓ README.md généré avec succès : {readme_path}")
except Exception as e:
print(f"❌ Erreur lors de l'écriture : {e}")
if __name__ == "__main__":
main()

6407
lettres_metadata.json Normal file

File diff suppressed because it is too large Load Diff

122
main.py Normal file
View File

@@ -0,0 +1,122 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script principal pour analyser la collection des lettres de Jules Berton.
Ce script orchestre l'ensemble du processus d'analyse et de génération de documentation.
Auteur: Assistant IA
Date: Septembre 2025
"""
import subprocess
import sys
from pathlib import Path
def run_script(script_name, description):
"""
Exécute un script Python et affiche les résultats.
Args:
script_name (str): Nom du script à exécuter
description (str): Description de l'action
"""
print(f"\n🔄 {description}")
print("=" * 60)
try:
# Utiliser l'interpréteur Python de l'environnement virtuel
python_path = Path(__file__).parent / ".venv" / "bin" / "python"
script_path = Path(__file__).parent / script_name
result = subprocess.run(
[str(python_path), str(script_path)],
capture_output=True,
text=True,
cwd=Path(__file__).parent
)
if result.returncode == 0:
print(result.stdout)
print(f"{description} terminé avec succès")
else:
print(f"❌ Erreur lors de l'exécution:")
print(result.stderr)
return False
except Exception as e:
print(f"❌ Erreur: {e}")
return False
return True
def main():
"""Fonction principale qui orchestre l'analyse complète."""
print("📚 ANALYSE COMPLÈTE DE LA COLLECTION JULES BERTON")
print("=" * 70)
print("Ce script va analyser le fichier Excel et générer une documentation complète.")
print()
base_path = Path(__file__).parent
excel_file = base_path / "Jules Berton - lettres, dates et lieux.xlsx"
# Vérifier la présence du fichier Excel
if not excel_file.exists():
print(f"❌ Le fichier Excel '{excel_file.name}' n'a pas été trouvé.")
print(f" Assurez-vous qu'il soit présent dans le répertoire: {base_path}")
return
print(f"✓ Fichier Excel trouvé: {excel_file.name}")
# Étape 1: Lecture des métadonnées Excel
success = run_script(
"read_excel_metadata.py",
"ÉTAPE 1: Lecture et analyse du fichier Excel"
)
if not success:
print("❌ Impossible de continuer sans les métadonnées Excel.")
return
# Étape 2: Génération du README
success = run_script(
"generate_readme.py",
"ÉTAPE 2: Génération du README.md avec métadonnées complètes"
)
if not success:
print("⚠️ Le README n'a pas pu être généré, mais les métadonnées sont disponibles.")
# Résumé final
print("\n📋 RÉSUMÉ DE L'ANALYSE")
print("=" * 50)
# Vérifier les fichiers générés
json_file = base_path / "lettres_metadata.json"
readme_file = base_path / "README.md"
if json_file.exists():
print(f"✅ Métadonnées JSON: {json_file.name}")
else:
print(f"❌ Métadonnées JSON: Non trouvé")
if readme_file.exists():
print(f"✅ Documentation: {readme_file.name}")
else:
print(f"❌ Documentation: Non trouvé")
print("\n🔧 FICHIERS UTILITAIRES DISPONIBLES:")
print("- read_excel_metadata.py : Analyse le fichier Excel")
print("- generate_readme.py : Génère le README.md")
print("- lettres_metadata.json : Métadonnées au format JSON")
print("\n📖 UTILISATION:")
print("1. Pour re-analyser le fichier Excel:")
print(" python read_excel_metadata.py")
print("\n2. Pour régénérer le README:")
print(" python generate_readme.py")
print("\n3. Pour une analyse complète:")
print(" python main.py")
print(f"\n✨ Analyse terminée! Consultez le fichier README.md pour la documentation complète.")
if __name__ == "__main__":
main()

253
read_excel_metadata.py Normal file
View File

@@ -0,0 +1,253 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Script pour lire et analyser le fichier Excel contenant les métadonnées
des lettres de Jules Berton.
Auteur: Assistant IA
Date: Septembre 2025
"""
import pandas as pd
import os
import json
from pathlib import Path
from datetime import datetime
def read_excel_file(excel_path):
"""
Lit le fichier Excel et retourne un DataFrame avec les métadonnées des lettres.
Args:
excel_path (str): Chemin vers le fichier Excel
Returns:
pandas.DataFrame: DataFrame contenant les données du fichier Excel
"""
try:
# Essayer de lire avec différents moteurs
try:
df = pd.read_excel(excel_path, engine='openpyxl')
print(f"✓ Fichier Excel lu avec succès (moteur: openpyxl)")
except:
try:
df = pd.read_excel(excel_path, engine='xlrd')
print(f"✓ Fichier Excel lu avec succès (moteur: xlrd)")
except:
df = pd.read_excel(excel_path)
print(f"✓ Fichier Excel lu avec succès (moteur par défaut)")
print(f"📊 Dimensions du fichier: {df.shape[0]} lignes × {df.shape[1]} colonnes")
return df
except FileNotFoundError:
print(f"❌ Erreur: Le fichier '{excel_path}' n'a pas été trouvé.")
return None
except Exception as e:
print(f"❌ Erreur lors de la lecture du fichier Excel: {e}")
return None
def analyze_excel_structure(df):
"""
Analyse la structure du DataFrame et affiche des informations sur les colonnes.
Args:
df (pandas.DataFrame): DataFrame à analyser
"""
if df is None:
return
print("\n📋 STRUCTURE DU FICHIER EXCEL")
print("=" * 50)
# Informations générales
print(f"Nombre total de lignes: {len(df)}")
print(f"Nombre total de colonnes: {len(df.columns)}")
# Liste des colonnes
print("\n📝 COLONNES DISPONIBLES:")
for i, col in enumerate(df.columns, 1):
print(f"{i:2d}. {col}")
# Aperçu des premières lignes
print("\n👀 APERÇU DES PREMIÈRES LIGNES:")
print(df.head().to_string())
# Informations sur les types de données
print("\n🔢 TYPES DE DONNÉES:")
for col in df.columns:
print(f"{col}: {df[col].dtype}")
# Statistiques sur les valeurs manquantes
print("\n❓ VALEURS MANQUANTES:")
missing_data = df.isnull().sum()
for col in df.columns:
if missing_data[col] > 0:
percentage = (missing_data[col] / len(df)) * 100
print(f"{col}: {missing_data[col]} ({percentage:.1f}%)")
def extract_letter_info(df):
"""
Extrait et structure les informations sur chaque lettre.
Args:
df (pandas.DataFrame): DataFrame contenant les métadonnées
Returns:
list: Liste de dictionnaires contenant les informations de chaque lettre
"""
if df is None:
return []
letters_info = []
print("\n📮 EXTRACTION DES INFORMATIONS DES LETTRES")
print("=" * 50)
for index, row in df.iterrows():
letter_info = {}
# Parcourir toutes les colonnes et extraire les données
for col in df.columns:
value = row[col]
# Nettoyer les valeurs NaN
if pd.isna(value):
value = None
elif isinstance(value, str):
value = value.strip()
letter_info[col] = value
letter_info['index'] = index
letters_info.append(letter_info)
print(f"{len(letters_info)} lettres extraites")
return letters_info
def save_to_json(data, output_path):
"""
Sauvegarde les données extraites en format JSON.
Args:
data (list): Données à sauvegarder
output_path (str): Chemin de sortie pour le fichier JSON
"""
try:
with open(output_path, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2, default=str)
print(f"✓ Données sauvegardées dans: {output_path}")
except Exception as e:
print(f"❌ Erreur lors de la sauvegarde: {e}")
def check_files_existence(letters_info, base_path):
"""
Vérifie l'existence des fichiers de transcription et d'images pour chaque lettre.
Args:
letters_info (list): Liste des informations des lettres
base_path (str): Chemin de base du projet
"""
print("\n🔍 VÉRIFICATION DE L'EXISTENCE DES FICHIERS")
print("=" * 50)
transcriptions_path = Path(base_path) / "transcriptions"
images_path = Path(base_path) / "lettres_scannees"
for letter in letters_info:
# Essayer d'identifier la date dans les données
date_found = None
# Chercher une colonne qui pourrait contenir la date
for key, value in letter.items():
if value and isinstance(value, (str, datetime)):
if isinstance(value, datetime):
date_found = value.strftime("%Y-%m-%d")
break
elif isinstance(value, str) and len(value) >= 8:
# Essayer de parser différents formats de date
try:
# Format YYYY-MM-DD
if '-' in value and len(value.split('-')) == 3:
parts = value.split('-')
if len(parts[0]) == 4:
date_found = value[:10] # Prendre les 10 premiers caractères
break
except:
continue
if date_found:
# Vérifier transcription
transcription_file = transcriptions_path / f"{date_found}.md"
has_transcription = transcription_file.exists()
# Vérifier images
image_pattern = f"{date_found} *.jpg"
image_files = list(images_path.glob(image_pattern))
has_images = len(image_files) > 0
letter['date_parsed'] = date_found
letter['has_transcription'] = has_transcription
letter['has_images'] = has_images
letter['image_count'] = len(image_files)
status = "📝" if has_transcription else ""
status += " 🖼️" if has_images else ""
print(f"{date_found}: {status} (images: {len(image_files)})")
else:
letter['date_parsed'] = None
letter['has_transcription'] = False
letter['has_images'] = False
letter['image_count'] = 0
print(f"Ligne {letter['index']}: ❌ Date non identifiée")
def main():
"""Fonction principale du script."""
# Chemin du fichier Excel
excel_file = "Jules Berton - lettres, dates et lieux.xlsx"
base_path = Path(__file__).parent
excel_path = base_path / excel_file
print("🔍 LECTURE DES MÉTADONNÉES DES LETTRES DE JULES BERTON")
print("=" * 60)
print(f"📁 Répertoire de travail: {base_path}")
print(f"📊 Fichier Excel: {excel_file}")
# Vérifier que le fichier existe
if not excel_path.exists():
print(f"❌ Le fichier {excel_file} n'existe pas dans le répertoire courant.")
print(f" Chemin recherché: {excel_path}")
return
# Lire le fichier Excel
df = read_excel_file(excel_path)
if df is None:
return
# Analyser la structure
analyze_excel_structure(df)
# Extraire les informations des lettres
letters_info = extract_letter_info(df)
# Vérifier l'existence des fichiers
check_files_existence(letters_info, base_path)
# Sauvegarder en JSON
output_json = base_path / "lettres_metadata.json"
save_to_json(letters_info, output_json)
# Statistiques finales
print(f"\n📊 STATISTIQUES FINALES")
print("=" * 30)
total_letters = len(letters_info)
with_transcription = sum(1 for l in letters_info if l.get('has_transcription', False))
with_images = sum(1 for l in letters_info if l.get('has_images', False))
print(f"Total des lettres dans Excel: {total_letters}")
print(f"Lettres avec transcription: {with_transcription}")
print(f"Lettres avec images: {with_images}")
print(f"Lettres complètes (texte + images): {sum(1 for l in letters_info if l.get('has_transcription', False) and l.get('has_images', False))}")
if __name__ == "__main__":
main()