Création d'une base de connaissance en Python:
Script Python : Extraction + Indexation + Recherche
Ce script :
Extrait le texte des fichiers .txt, .docx, .pptx
Les indexe dans une base locale (ici un simple dictionnaire)
Permet la recherche par mots-clés via la console
Prérequis
# Installe ces bibliothèques si ce n’est pas déjà fait :
pip install mysql-connector-python python-docx python-pptx
pip install flask
# Structure de la Base MySQL
Tu peux créer une base nommée knowledge_base avec une table documents :
CREATE DATABASE knowledge_base;
USE knowledge_base;
CREATE TABLE documents (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255),
content LONGTEXT,
file_type VARCHAR(10)
);
# Script Flask + MySQL
Voici un exemple de script Flask qui :
Extrait le contenu d’un fichier
L’insère dans MySQL
Permet la recherche par mot-clé via une interface web
from flask import Flask, request, render_template_string
import mysql.connector
app = Flask(__name__)
# Connexion à MySQL
db = mysql.connector.connect(
host="localhost",
user="root",
password="ton_mot_de_passe",
database="knowledge_base"
)
cursor = db.cursor()
# Exemple de contenu à insérer
example_title = "Copier/Coller avec Spice Guest Tools"
example_content = """
Pour activer la fonction copier/coller entre une machine hôte et une entité il faut installer les spice-guest-tools :
A- Windows :
1) S'assurer que l'image ISO "spice_guest_tool.iso" soit présente...
...
2) Installer le paquet : sudo dpkg -i spice-vdagent_0.19.0-2_amd64.deb
"""
example_type = "txt"
# Insérer l'exemple si non présent
cursor.execute("SELECT COUNT(*) FROM documents WHERE title = %s", (example_title,))
if cursor.fetchone()[0] == 0:
cursor.execute("INSERT INTO documents (title, content, file_type) VALUES (%s, %s, %s)",
(example_title, example_content, example_type))
db.commit()
# Interface HTML simple
HTML_TEMPLATE = """
Recherche Base de Connaissance
Recherche par mot-clé
{% if results %}
Résultats :
{% for title, content in results %}
- {{ title }}
{{ content[:300] }}...
{% endfor %}
{% endif %}
"""
@app.route("/", methods=["GET", "POST"])
def search():
results = []
if request.method == "POST":
keyword = request.form["keyword"]
cursor.execute("SELECT title, content FROM documents WHERE content LIKE %s", (f"%{keyword}%",))
results = cursor.fetchall()
return render_template_string(HTML_TEMPLATE, results=results)
if __name__ == "__main__":
app.run(debug=True)
# Tester
Lance le script : python app.py
Va sur http://localhost:5000
Recherche un mot-clé comme copier, spice, Ubuntu, etc.
# Code Python:
import os
from docx import Document
from pptx import Presentation
import mysql.connector
# Connexion à MySQL
db = mysql.connector.connect(
host="localhost",
user="root",
password="ton_mot_de_passe",
database="knowledge_base"
)
cursor = db.cursor()
# Dossier contenant les fichiers
DATA_FOLDER = "documents"
def extract_txt(file_path):
with open(file_path, 'r', encoding='utf-8') as f:
return f.read()
def extract_docx(file_path):
doc = Document(file_path)
return "\n".join([para.text for para in doc.paragraphs])
def extract_pptx(file_path):
prs = Presentation(file_path)
text = []
for slide in prs.slides:
for shape in slide.shapes:
if hasattr(shape, "text"):
text.append(shape.text)
return "\n".join(text)
def insert_into_db(title, content, file_type):
cursor.execute("SELECT COUNT(*) FROM documents WHERE title = %s", (title,))
if cursor.fetchone()[0] == 0:
cursor.execute("INSERT INTO documents (title, content, file_type) VALUES (%s, %s, %s)",
(title, content, file_type))
db.commit()
def process_files():
for filename in os.listdir(DATA_FOLDER):
path = os.path.join(DATA_FOLDER, filename)
if filename.endswith(".txt"):
content = extract_txt(path)
file_type = "txt"
elif filename.endswith(".docx"):
content = extract_docx(path)
file_type = "docx"
elif filename.endswith(".pptx"):
content = extract_pptx(path)
file_type = "pptx"
else:
continue
insert_into_db(filename, content, file_type)
print(f"Importé : {filename}")
if __name__ == "__main__":
process_files()
print("Tous les fichiers ont été importés.")