Mini moteur de recherche TF-IDF sur la documentation
Indexe les fichiers Markdown d'un dossier docs/, calcule un score TF-IDF maison (sans dépendance) et classe les documents les plus pertinents pour une requête libre.
Cas d'usage
Retrouver le bon document dans 200 pages de documentation interne quand la recherche plein-texte de l'outil fait défaut.
Prérequis
Python 3.9+ (bibliothèque standard)
Python
import math
import re
from collections import Counter
from pathlib import Path
docs = {p.name: re.findall(r"\w{3,}", p.read_text(encoding="utf-8").lower())
for p in Path("docs").glob("*.md")}
N = len(docs)
df = Counter(mot for mots in docs.values() for mot in set(mots))
def score(requete, mots):
tf = Counter(mots)
return sum(tf[t] / len(mots) * math.log(N / df[t])
for t in requete.lower().split() if df.get(t))
requete = "configuration proxy timeout"
classement = sorted(((score(requete, mots), nom)
for nom, mots in docs.items()), reverse=True)
print(f"Recherche « {requete} » sur {N} documents")
print(f"{'score':>8} document")
for s, nom in classement[:4]:
print(f"{s:>8.4f} {nom}")Résultat
Recherche « configuration proxy timeout » sur 187 documents score document 0.0412 reseau-proxy-entreprise.md 0.0287 troubleshooting-api.md 0.0151 deploiement-prod.md 0.0093 faq-integration.md
TF-IDFRechercheNLPMarkdown