lundi 4 août 2025

Transformer un livre pdf en base de donnée avec un agent automatisé dans n8n

 créer un agent automatisé dans n8n qui prend un PDF, l’analyse et le réorganise dans une base de données avec les paragraphes indexés par titres/sections/chapitres.

Voici comment tu pourrais procéder :

1️⃣ Schéma général de l’agent dans n8n

  1. Déclencheur (Trigger)

    • Upload manuel d’un PDF dans un dossier surveillé (Google Drive, Dropbox, FTP)

    • Ou réception par email (n8n peut surveiller une boîte email IMAP/POP3)

  2. Lecture et extraction du texte du PDF

    • Utiliser un nœud PDF Extract (via un module Node.js intégré ou un service comme PDF.co ou DocParser).

    • Nettoyer le texte (supprimer numéros de pages, en-têtes, pieds de page).

  3. Analyse et structuration avec IA

    • Envoyer le texte à OpenAI GPT-4 ou o3-mini via un nœud OpenAI dans n8n pour :

      • Détecter les chapitres, sections et paragraphes

      • Générer un JSON structuré du type :

        json
        [ { "chapitre": "Chapitre 1", "section": "Section 1.1", "paragraphe": "Paragraphe 1", "texte": "..." } ]
  4. Stockage dans une base de données

    • Utiliser un nœud MySQL, PostgreSQL ou SQLite dans n8n pour insérer chaque paragraphe avec ses métadonnées.

  5. Indexation / Recherche (optionnel)

    • Créer un index de recherche plein texte (Full-text Search) dans la base de données.

    • Ou envoyer les données vers ElasticSearch ou Meilisearch pour un moteur de recherche rapide.

  6. Notification (optionnel)

    • Envoi d’un email ou message Slack avec le lien vers la base de données une fois l’opération terminée.

2️⃣ Exemple d’architecture dans n8n

css

[Trigger][Read PDF][Clean Text][OpenAI Structuring][Database Insert][Notification]

3️⃣ Points importants

  • L’IA (OpenAI ou autre LLM) est utile pour détecter automatiquement la hiérarchie du texte.

  • Tu peux stocker le résultat en CSV, JSON ou directement en base de données.

  • Si le livre est gros, il faut le découper en sections avant de l’envoyer à l’IA pour éviter les limites de tokens.

  • Une fois automatisé, tu peux déposer n’importe quel PDF dans un dossier et l’agent fera tout seul l’indexation.

📌 le blueprint n8n complet prêt à importer, avec :

  • Le déclencheur

  • Le parsing PDF

  • Le prompt OpenAI pour structurer le texte

  • L’insertion en base de données

Blueprint : Agent d’indexation PDF → Base de données

json

{ "name": "Agent Indexation PDF", "nodes": [ { "parameters": { "folderPath": "/data/pdf_input", "options": {} }, "id": "1", "name": "Trigger - New PDF in Folder", "type": "n8n-nodes-base.folderTrigger", "typeVersion": 1 }, { "parameters": { "filePath": "={{ $json[\"path\"] }}", "options": {} }, "id": "2", "name": "Read PDF", "type": "n8n-nodes-base.pdfExtract", "typeVersion": 1 }, { "parameters": { "operation": "cleanText", "text": "={{ $json[\"data\"] }}" }, "id": "3", "name": "Clean Text", "type": "n8n-nodes-base.function", "typeVersion": 1, "functionCode": "return [{ json: { clean_text: $json[\"text\"].replace(/\\n\\s+/g, ' ').replace(/Page \\d+/g, '') } }];" }, { "parameters": { "operation": "chat", "model": "gpt-4o-mini", "messages": [ { "role": "system", "content": "Tu es un assistant qui organise un texte de livre PDF en chapitres, sections et paragraphes. Retourne un JSON structuré." }, { "role": "user", "content": "Voici le texte extrait :\n\n{{ $json[\"clean_text\"] }}\n\nStructure-le en JSON :\n[\n {\n \"chapitre\": \"Chapitre X\",\n \"section\": \"Section X.Y\",\n \"paragraphe\": \"Paragraphe n\",\n \"texte\": \"...\"\n }\n]" } ] }, "id": "4", "name": "OpenAI Structuring", "type": "n8n-nodes-base.openAi", "typeVersion": 1 }, { "parameters": { "operation": "insert", "table": "livre_index", "columns": [ "chapitre", "section", "paragraphe", "texte" ], "values": "={{ $json[\"chapitre\"] }}, {{ $json[\"section\"] }}, {{ $json[\"paragraphe\"] }}, {{ $json[\"texte\"] }}" }, "id": "5", "name": "Insert in DB", "type": "n8n-nodes-base.postgres", "typeVersion": 1 }, { "parameters": { "fromEmail": "bot@monserveur.com", "toEmail": "admin@monemail.com", "subject": "Indexation PDF terminée", "text": "Le fichier PDF a été analysé et ajouté à la base de données." }, "id": "6", "name": "Send Notification", "type": "n8n-nodes-base.emailSend", "typeVersion": 1 } ], "connections": { "Trigger - New PDF in Folder": { "main": [ [ { "node": "Read PDF", "type": "main", "index": 0 } ] ] }, "Read PDF": { "main": [ [ { "node": "Clean Text", "type": "main", "index": 0 } ] ] }, "Clean Text": { "main": [ [ { "node": "OpenAI Structuring", "type": "main", "index": 0 } ] ] }, "OpenAI Structuring": { "main": [ [ { "node": "Insert in DB", "type": "main", "index": 0 } ] ] }, "Insert in DB": { "main": [ [ { "node": "Send Notification", "type": "main", "index": 0 } ] ] } } }

Ce que fait ce blueprint

  1. Détection d’un nouveau PDF dans un dossier surveillé.

  2. Extraction du texte du PDF.

  3. Nettoyage (suppression des pages, retours à la ligne inutiles).

  4. Envoi à OpenAI pour organiser le contenu en JSON structuré avec chapitres, sections, paragraphes.

  5. Insertion dans ta base de données (ici exemple en PostgreSQL, mais tu peux mettre MySQL/SQLite).

  6. Notification par email une fois terminé.

À préparer avant utilisation

  • Installer le nœud PDF Extract (ou connecter un service externe comme PDF.co si nécessaire).

  • Configurer ton compte OpenAI dans n8n.

  • Adapter la connexion à ta base de données (PostgreSQL, MySQL…).

  • Définir le dossier surveillé pour les PDF.

Une version optimisée consistera  en le découpage automatiquement du PDF en petits morceaux avant l’envoi à l’IA pour éviter les limites de tokens et rendre le traitement plus rapide.

Méthode pour Analyser un Livre PDF et le Structurer en Base de Données Indexée

 

Méthode pour Analyser un Livre PDF et le Structurer en Base de Données Indexée

Voici comment transformer un livre (PDF) en une base de données structurée, où chaque paragraphe est indexé par ses titres de parties, chapitres, sections et sous-sections. Voici la méthode complète, étape par étape, avec des outils et exemples concrets.


📌 Étape 1 : Extraction du Texte depuis le PDF

Outils Recommandés

  1. Python + PyPDF2 ou pdfplumber (pour extraire le texte brut)

  2. Adobe Acrobat Pro (OCR si le PDF est scanné)

  3. Tabula (pour extraire des tableaux)

Exemple de Code Python (Extraction Basique)

python
import PyPDF2

def extract_pdf_text(file_path):
    with open(file_path, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        text = ""
        for page in reader.pages:
            text += page.extract_text()
    return text

book_text = extract_pdf_text("mon_livre.pdf")
print(book_text[:500])  # Affiche les 500 premiers caractères

📌 Étape 2 : Segmentation du Texte en Parties Structurées

Comment Identifier les Titres ?

  • Regex pour détecter les numérotations (1.1.1Chapitre II, etc.)

  • Analyse sémantique (si les titres sont en gras/italique)

  • Modèles NLP (comme spaCy ou NLTK pour détecter les entités)

Exemple de Structuration en JSON (Format Base de Données)

json
{
  "book_title": "Titre du Livre",
  "authors": ["Auteur 1", "Auteur 2"],
  "chapters": [
    {
      "chapter_title": "Chapitre 1 : Introduction",
      "sections": [
        {
          "section_title": "1.1 Problématique",
          "paragraphs": [
            "Premier paragraphe...",
            "Deuxième paragraphe..."
          ]
        }
      ]
    }
  ]
}

📌 Étape 3 : Stockage en Base de Données

Options de Stockage

Type de BDAvantagesOutils
SQL (PostgreSQL, SQLite)Structuré, requêtes complexespsycopg2 (Python + PostgreSQL)
NoSQL (MongoDB)Flexible, adapté aux documents imbriquéspymongo (Python + MongoDB)
ElasticsearchRecherche plein texte optimiséeelasticsearch-py (Python)

Exemple avec MongoDB

python
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017/")
db = client["book_database"]
collection = db["books"]

# Insertion du livre structuré
book_data = {
    "title": "Titre du Livre",
    "chapters": [...]  # Données extraites
}
collection.insert_one(book_data)

📌 Étape 4 : Indexation pour une Recherche Efficace

Méthodes d'Indexation

  1. Index SQL (pour une recherche rapide par chapitre/section)

  2. Moteur de recherche (Elasticsearch) pour une recherche sémantique

  3. Embeddings (BERT, OpenAI) pour une recherche par similarité

Exemple avec Elasticsearch

python
from elasticsearch import Elasticsearch

es = Elasticsearch(["http://localhost:9200"])

doc = {
    "chapter": "Chapitre 1",
    "section": "1.1 Problématique",
    "content": "Ce paragraphe parle de..."
}

es.index(index="book_index", document=doc)

📌 Étape 5 : Requêtage et Exploitation des Données

Exemples de Requêtes

  1. Trouver tous les paragraphes parlant de "géopolitique"

    python
    results = es.search(index="book_index", query={"match": {"content": "géopolitique"}})
  2. Extraire tous les titres de chapitres (SQL)

    sql
    SELECT chapter_title FROM chapters;

💡 Conclusion : Automatisation Possible avec un Script Complet

Pour industrialiser le processus :

  1. Extraire le texte (PDF → Texte)

  2. Structurer (Détection des titres → JSON/DB)

  3. Stocker (SQL/NoSQL/Elasticsearch)

  4. Indexer (Recherche avancée)

Outils Clés

  • Python (PyPDF2spaCypymongoelasticsearch)

  • Bases de données (PostgreSQL, MongoDB, Elasticsearch)

  • NLP pour l'analyse sémantique