Moteur de recherche textuel avancé, optimisé pour la performance, la compression et l’intégration Python/C++.
- Fonctionnalités
- Installation
- Démarrage rapide
- API principale
- Benchmarks
- Documentation
- Architecture
- Guides
Voir les détails
- Index inversé performant (Python & C++/pybind11)
- Calcul TF-IDF, intersection/union de requêtes
- CLI, API web Flask, visualisations
- Compression des posting lists (variable byte, delta encoding)
- Dictionnaire de termes compact (Trie)
- Benchmarking et profiling (latence, mémoire, CPU)
# Dépendances Python
pip install -r requirements.txt
# Compilation extension C++ (optionnelle)
cd cpp_ext && mkdir -p build && cd build
cmake .. && makefrom src.indexer.inverted_index import InvertedIndex
index = InvertedIndex()
index.add_document("1", ["python", "search", "engine"])results = index.search(["python", "engine"])
print(results) # doc_id → scorepl = index.get_postings("python")
compressed = pl.get_doc_ids_compressed()
doc_ids = pl.decompress_doc_ids(compressed)python benchmarks/benchmark_indexing.py
python benchmarks/benchmark_query.py
python benchmarks/benchmark_compression.pyadd_document(doc_id, terms): Ajoute un document à l’indexsearch(query_terms): Recherche les documents pertinentsget_postings(term): Récupère la posting list d’un termecalculate_tf_idf(term, doc_id): Calcule le score TF-IDFget_document_vector(doc_id): Vecteur TF-IDF du document
Scripts pour mesurer la performance :
- Indexation :
python benchmarks/benchmark_indexing.py - Recherche :
python benchmarks/benchmark_query.py - Compression :
python benchmarks/benchmark_compression.py
Voir docs/source/benchmarks.rst pour les métriques détaillées.
Diagramme Mermaid
flowchart TD
A[DocumentLoader] --> B[TextPreprocessor]
B --> C[InvertedIndex]
C --> D[Compression]
C --> E[DocumentManager]
E --> F[QueryProcessor]
F --> G[Ranker]
G --> H[Results]
subgraph API
I[Flask Web]
J[CLI]
end
H --> I
H --> J
Les contributions sont les bienvenues ! Voir docs/development/contributing.md.
add_posting(doc_id, term_frequency, positions): Ajoute un postingget_doc_ids_compressed(): Compression des IDs (variable byte + delta)decompress_doc_ids(data): Décompression des IDs
/search: Recherche par requête (GET/POST)/index: Ajout de document (POST)/stats: Statistiques de l’index
src/visualizations/charts.py: Génération de graphiques (matplotlib, wordcloud)
src/cli.py: Interface en ligne de commande pour indexer, rechercher, exporter
cpp_ext/src/inverted_index.cpp: Index inversé haute performance (pybind11)benchmark_cpp_vs_python.py: Comparatif Python vs C++
MIT
Pour plus de détails, consultez la documentation des modules et les exemples dans le dossier benchmarks/.
Un moteur de recherche haute performance conçu pour indexer et rechercher efficacement dans de grandes collections de documents avec un classement par pertinence avancé.
# Installation
git clone https://github.com/codeGeekPro/velocity-search.git
cd velocity-search
make install
# Premier test
python -c "
from src.core import VelocitySearch
engine = VelocitySearch()
engine.add_document('doc1', 'Python est un langage de programmation')
print(engine.search('Python'))
"📖 Guide de Démarrage Complet →
- 🚀 Indexation rapide : 10 000 documents en < 30 secondes
- ⚡ Recherche ultra-rapide : Réponses en < 100ms
- 🧠 Classement intelligent : TF-IDF et BM25
- 💬 Autocomplétion : Suggestions en temps réel
- 🔍 Recherche avancée : Requêtes booléennes, recherche floue
- 🌐 API REST : Interface moderne avec FastAPI
- 📊 Benchmarks complets : Monitoring des performances
- 🔧 Scalable : Architecture préparée pour le clustering
| Composant | Métrique | Performance |
|---|---|---|
| Préprocesseur | Petit texte | 74,959 ops/sec |
| Préprocesseur | Texte moyen (2.5KB) | 2,461 ops/sec |
| Préprocesseur | Gros texte (50KB) | 30 ops/sec |
| Tokenisation | Vitesse pure | 63,061 ops/sec |
| Stemming | 5000 tokens | 165 ops/sec |
| Mots vides | Filtrage | 935,700 ops/sec |
velocity-search/
├── 📁 src/ # Code source principal
│ ├── 🔍 indexer/ # Construction et gestion des index
│ ├── 🧹 preprocessor/ # Nettoyage et tokenisation
│ ├── ❓ query_processor/ # Traitement des requêtes
│ ├── 🏆 ranker/ # Algorithmes de classement
│ └── 🛠️ utils/ # Utilitaires communs
├── 🧪 tests/ # Tests (29 passed) + Benchmarks (12 tests)
├── 📊 data/ # Documents et index
├── ⚙️ config/ # Configuration
├── 📚 docs/ # Documentation complète
└── 📖 README.md
Le module de préprocessing fournit des outils avancés pour charger, nettoyer et préparer les documents avant l'indexation.
Classe spécialisée pour charger des documents dans différents formats avec extraction automatique de métadonnées :
Formats supportés :
- Texte :
.txt,.md(UTF-8 avec détection automatique) - PDF :
.pdf(extraction de texte avec PyMuPDF) - Office :
.docx(avec python-docx) - Web :
.html,.htm(parsing avec BeautifulSoup) - Données :
.xml,.json(traitement structuré)
Fonctionnalités :
- ✅ Chargement parallèle avec barre de progression
- ✅ Détection d'encodage automatique (chardet)
- ✅ Extraction de métadonnées (titre, auteur, date, langue)
- ✅ Gestion d'erreurs robuste (récupération gracieuse)
- ✅ Validation de taille de fichiers
- ✅ Détection de langue automatique
Exemple d'utilisation :
from src.preprocessor import DocumentLoader
# Créer un chargeur de documents
loader = DocumentLoader()
# Charger un document unique
document = loader.load_document("article.pdf")
# Charger plusieurs documents en parallèle
documents = loader.load_documents_batch([
"doc1.txt", "doc2.pdf", "doc3.docx"
], max_workers=4)
# Charger tout un répertoire
documents = loader.load_directory("./data/docs/", recursive=True)
# Accéder aux métadonnées
print(f"Titre: {document.title}")
print(f"Auteur: {document.metadata.author}")
print(f"Langue: {document.metadata.language}")
print(f"Mots: {document.metadata.word_count}")Nettoie et normalise le texte brut pour l'indexation :
- Normalisation Unicode (décomposition, normalisation)
- Suppression de la ponctuation et caractères spéciaux
- Normalisation des espaces et retours à la ligne
- Filtrage des mots vides (stop words)
- Conversion en minuscules
Divise le texte en unités linguistiques significatives :
- Tokenisation intelligente avec préservation des entités
- Gestion des contractions (ex: "l'intelligence" → ["l", "intelligence"])
- Détection d'entités nommées (noms, dates, organisations)
- Types de tokens : mots, nombres, ponctuation, symboles
Réduit les mots à leur racine pour améliorer la recherche :
- Support multi-langue : Français, Anglais, Espagnol
- Algorithmes spécialisés par langue
- Règles morphologiques avancées
- Performance optimisée avec cache
- Python 3.9+ (Recommandé: Python 3.11+)
- Git
- 4GB RAM minimum (8GB recommandé pour de gros corpus)
# Cloner le projet
git clone https://github.com/codeGeekPro/velocity-search.git
cd velocity-search
# Créer un environnement virtuel
python -m venv venv
source venv/bin/activate # Linux/Mac
# ou venv\Scripts\activate # Windows
# Installation complète avec toutes les fonctionnalités
pip install -r requirements.txt# Pour une installation légère (fonctionnalités de base uniquement)
pip install -r requirements-minimal.txt# Pour contribuer au projet (outils de dev inclus)
pip install -r requirements-dev.txt| Fonctionnalité | Minimale | Complète | Développement |
|---|---|---|---|
| Moteur de recherche core | ✅ | ✅ | ✅ |
| Interface CLI | ✅ | ✅ | ✅ |
| Algorithmes TF-IDF/BM25 | ✅ | ✅ | ✅ |
| API REST FastAPI | ❌ | ✅ | ✅ |
| NLP avancé (spaCy) | ❌ | ✅ | ✅ |
| Cache Redis | ❌ | ✅ | ✅ |
| Interface riche (Rich) | ❌ | ✅ | ✅ |
| ML/Clustering | ❌ | ✅ | ✅ |
| Outils de test | Basique | Complet | Avancé |
| Profilage & Debug | ❌ | ❌ | ✅ |
| Documentation | ❌ | ❌ | ✅ |
pip install -e .
## 🎯 Utilisation
### Interface en ligne de commande
```bash
# Indexer des documents
velocity-search index --path ./data/documents/
# Rechercher
velocity-search search "machine learning python"
# Démarrer l'API
velocity-search serve --port 8000
# Démarrer le serveur
uvicorn src.api.main:app --reload
# Requête de recherche
curl -X POST "http://localhost:8000/search" \
-H "Content-Type: application/json" \
-d '{"query": "python machine learning", "limit": 10}'from velocity_search import VelocitySearch
# Initialiser le moteur
engine = VelocitySearch()
# Indexer des documents
engine.index_directory("./data/documents/")
# Rechercher
results = engine.search("machine learning", limit=10)
for result in results:
print(f"{result.title}: {result.score:.3f}")| Métrique | Cible | Résultat |
|---|---|---|
| Indexation | 10K docs/30s | ✅ 12K docs/30s |
| Requête simple | < 100ms | ✅ 45ms moyenne |
| Autocomplétion | < 20ms | ✅ 8ms moyenne |
| Mémoire | < 1GB/100K docs | ✅ 850MB/100K docs |
# Tous les tests
pytest
# Tests avec couverture
pytest --cov=src --cov-report=html
# Tests de performance
pytest tests/benchmarks/ -v# Exemple d'utilisation des composants
from src.indexer import InvertedIndex
from src.preprocessor import TextPreprocessor
from src.ranker import TFIDFRanker
# Pipeline d'indexation
preprocessor = TextPreprocessor()
indexer = InvertedIndex()
ranker = TFIDFRanker()- Phase 1 : Core MVP avec index inversé
- Phase 2 : Algorithmes de ranking avancés
- Phase 3 : Interface web et autocomplétion
- Phase 4 : Scalabilité et distribution
- Fork le projet
- Créer une branche feature (
git checkout -b feature/amazing-feature) - Commit les changements (
git commit -m 'Add amazing feature') - Push vers la branche (
git push origin feature/amazing-feature) - Ouvrir une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Développé avec ❤️ par l'équipe Velocity Search