Adloun

Problème — Construction d'un index inversé

Application directe du cours · niveau 2 · NSI (terminale), chapitre 2 — Dictionnaires et tables de hachage

Énoncé

Problème — Construction d'un index inversé.

Un index inversé associe à chaque mot la liste des documents (identifiés par un numéro) dans lesquels il apparaît. C'est le cœur d'un moteur de recherche. On donne une liste de documents, chacun étant une chaîne de mots. Construire l'index inversé, puis écrire une fonction de recherche renvoyant les documents contenant un mot donné.

Corrigé

On parcourt chaque document et chacun de ses mots, en ajoutant le numéro du document à la liste associée au mot. On utilise un ensemble intermédiaire pour éviter les doublons au sein d'un même document.


def construire_index(documents):
    index = {}
    for numero, texte in enumerate(documents):
        for mot in set(texte.split()):     # mots distincts du doc
            if mot not in index:
                index[mot] = []
            index[mot].append(numero)
    return index

def rechercher(index, mot):
    return index.get(mot, [])

docs = [
    "le chat dort",
    "le chien dort",
    "le chat et le chien"
]
index = construire_index(docs)
print(rechercher(index, "chat"))   # [0, 2]
print(rechercher(index, "dort"))   # [0, 1]
print(rechercher(index, "souris")) # []

Chaque insertion et chaque recherche dans l'index coûtent en moyenne ; la construction est donc linéaire par rapport au nombre total de mots.

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.