Une bases de textes est un ensemble constitué de plusieurs textes.
Exemples :
On note :
On dispose d’une base B de n documents textes. Une base documentaire B est un ensemble de documents.
On note B={d1,d2,...}, où chaque di représente un document différent de la base.
n est le nombre de documents de la base : n=|B|.
Les documents sont écrits dans un langage L obéissant à un vocabulaire V.
On note V={t1,t2,...} où chaque tk est un terme du vocabulaire V.
K est la taille du vocabulaire : K=|V|.
On note A l'alphabet : ensemble des symboles (caractères) utilisés par le langage L.
On note α∈A un caractère de l'alphabet A.
Un document texte pourra être décrit soit comme :
Soit d un document de B. Il peut être décrit comme :
Les algorithmes que l’on va étudier portent sur la recherche d'informations dans des bases de textes. Cette recherche repose essentiellement sur l'utilisation de mots-clés
La recherche dans les bases de textes nécessite la mise en oeuvre d'algorithmes spécifiques. On parle de recherche par le contenu (par opposition à une recherche basée sur les étiquettes de données indexées/structurées)
Exemples :
→ La réponse de l’algorithme est une liste ordonnée de références, classée d’après la pertinence des résultats (≃ similarité)
Pour mettre en oeuvre la recherche dans les bases de textes, on a besoin d'une métrique permettant de mesurer la similarités entre plusieurs documents.
Plus le score de similarité entre deux documents est élevé, plus les documents sont proches (du point de vue de leur "contenu").
Les scores de similarité sont en général normalisés (entre 0 et 1 ou entre -1 et 1)
Les distances classiques entre chaines de caractères étant inopérantes pour des textes de grande taille, on utilise en général une approche ensembliste/statistique.
un document d est représenté par l'ensemble des termes qu'ils contient (sans se préoccuper de leur ordre ni de leur répétition éventuelle)
Soient deux ensembles A et B.
L'indice de Jaccard est le rapport entre la cardinalité (la taille) de l'intersection des ensembles considérés et la cardinalité de l'union des ensembles. Il permet d'évaluer la similarité entre deux ensembles: J(A,B)=|A∩B||A∪B|
Dans le cas où A et B sont des ensembles de termes, deux documents qui utiliseraient exactement les mêmes termes (mais pas dans le même ordre) auraient une similarité de 1 tandis que deux documents utilisant un vocabulaire strictement différent auraient une similarité de 0.
On notera que par construction, l'indice de Jaccard permet de comparer des documents de taille très différentes. L'utilisation d'un même vocabulaire (le même champ lexical) indique que les documents sont proches thématiquement.
texte 1 = "Deux heures plus tard, je le rencontre devant la gare Saint- Lazare. Il est avec un camarade qui lui dit : "tu devrais faire mettre un bouton supplémentaire à ton pardessus."
texte 2 = "Deux heures après, je le revois devant la gare Saint-Lazare. Il est avec un ami qui lui conseille de coudre un bouton à son pardessus."
(indication : "Saint"-"Lazare" compte comme deux termes)
L'approche ensembliste reste assez rudimentaire, elle ne prend pas en compte la fréquence d'apparition des différents termes de vocabulaire à l'intérieur du document.
L'approche basée sur les fréquences fait au contraire un comptage précis du nombre d'apparitions de chaque terme de vocabulaire.
doc
un document contenant T
mots.cpt
le dictionnaire qui compte le nombre d’apparitions de chaque mot.freq
le dictionnaire qui compte la fréquence d’apparition de chaque mot.cpt = {} for mot in doc : if mot not in cpt: cpt[mot] = 1 else: cpt[mot] += 1 freq = {} for mot in cpt : freq[mot] = cpt[mot]/T
Remarque : la somme des fréquences vaut 1.
Soit un message d constitué de T mots (d1, …, di, …, dT). Chaque mot appartient à un vocabulaire V={t1,...,tK} de taille K.
Pour effectuer une comparaison basée sur les fréquences d'apparition, on indexe chaque terme de vocabulaire t∈V par un indice (unique) k.
Pour tout t∈V, on note f(t,d) la fréquence du terme t dans le document d.
Remarque : x est un vecteur “creux”. Il contient beaucoup de 0 (le vocabulaire utilisé dans un texte est de taille ≪ K).
En particulier, on peut avec cette approche définir une distance euclidienne entre textes:
Plus intéressante, la similarité du cosinus permet de regarder la "colinéarité" entre deux vecteurs de RK indépendamment de leur norme :
"le"
, "la"
, "un"
, "des"
"petit"
, "manger"
, "prendre"
, "donner"
"poire"
, "soleil"
, "examiner"
, "échanger"
"pédoncule"
, "astrolabe"
Loi de Zipf
Loi de Zipf : la fréquence d’un terme est inversement proportionnelle à son rang.
Il s'agit d'une distribution de type “loi de Puissance”.
remarque : pour une base de textes donnée, on peut estimer la constante C en traçant les fréquence mesurées empiriquement selon une échelle logarithmique (log®, log(f))
Interprétation :
Du point de vue de la théorie de l’information :
Il est possible à partir de l’étude de fréquence de définir un seuil pour sélectionner les termes les plus “informatifs”.
Voir également : statistiques_sur_les_lettres
Dans le cadre des bases de documents, on appelle fréquence documentaire g(t) d’un terme t la fréquence d’apparition du terme dans les différents documents de la base B.
Où |{d:t dans d}| est le nombre de documents contenant t et |B| est la taille de la base.
Exemples :
On peut sur le même principe mesurer l’information documentaire apportée par le terme t comme :
ici, I(t) représente la capacité du terme t à “séparer” les documents de la base.
Ainsi, les termes apportant I bits d’information permettent de réaliser I partitions de la base (pour extraire des sous-ensembles de taille |B|/2I )
On remarque que
En pratique, l'information documentaire −log2(g(t)) définit le ``poids'' du terme t : plus elle est élevée, plus le terme est `rare' (ou spécifique) et donc intéressant du point de vue de la recherche documentaire.
En recherche d’information, on utilise fréquemment un encodage vectoriel des textes nommé TF-IDF (= term frequency - Inverse Document Frequency).
Soit d un document appartenant à B. Pour tout t appartenant à d : TF-IDF(t,d)=−f(t,d)log(g(t))
La transformation TD-IDF traduit alors un texte d en un vecteur x appartenant à ∈RK selon le principe vu précédemment:
Le codage TF-IDF est utilisé principalement :