N-Grammes avec Python et la librairie NLTK

Octobre 2015

Les N-grammes sont des sous-séquences d'une chaîne de caractères. On utilise les n-grammes pour extraire automatiquement d'un texte les occurrences récurrentes de chaînes de caractères.

Plus simplement, on peut dire qu'une phrase composée de "N" mots est un N-gramme ("N" étant un nombre compris entre 0 et l'infini).

Vous pouvez vous référé à cette définition Wikipedia pour en savoir un peu plus.

Pourquoi c'est utile pour le SEO

Les N-grammes ont de nombreuses applications. L'une d'entre elle est de classer des textes. En fonction du nombre d'occurrences de chaque n-gramme d'un texte, on peut a peu près déterminer de quoi parle le texte.

Pour illustrer, voici les n-grammes d'un texte compris entre 3 et 7 mots. J'ai choisi de ne prendre les n-grammes que si leur nombre d'occurrences est supérieur à 2 (en fait il y a beaucoup plus de n-grammes de disponibles pour ce texte) :

"les moteurs de" :  12
"un contenu de" :  3
"les moteurs de recherche," :  3
"qualité des liens" :  3
"la qualité du" :  3
"Suivi de positionnement" :  3
"de la page" :  8
"les moteurs de recherche" :  8
"des moteurs de recherche." :  3
"par les moteurs" :  4
"moteurs de recherche." :  4
"d'un moteur de" :  3
"L'optimisation pour les moteurs" :  3
"algorithmes de classement" :  3
"moteurs de recherche" :  12
"contenu de qualité" :  3
"L'optimisation pour les" :  3
"Optimisation pour les moteurs" :  3
"pour les moteurs" :  8
"Optimisation pour les moteurs de" :  3
"d'un moteur de recherche" :  3
"Optimisation pour les" :  3
"moteurs de recherche," :  5
"dans les résultats" :  3
"les résultats de" :  3
"pour les moteurs de" :  8
"L'optimisation pour les moteurs de" :  3
"par les moteurs de" :  3
"« black hat" :  3
"L'optimisation pour les moteurs de recherche" :  3
"les algorithmes de" :  3
"volume de trafic" :  3
"un contenu de qualité" :  3
"des moteurs de" :  5
"pour les moteurs de recherche" :  7
"moteur de recherche" :  3

On remarque que ces n-grammes parlent beaucoup de moteurs de recherche, de classement, d'optimisation et de position. On a même le terme "black hat" qui apparaît au milieu avec 3 occurrences.

Si on cherche à trouver de quoi parle cette page, on est maintenant à peu près certain qu'elle parle de référencement. Et pourtant, nous n'avons pas lu le texte qu'elle contient ! (réponse : il s'agit de la page de Wikipedia suivante : https://fr.wikipedia.org/wiki/Optimisation_pour_les_moteurs_de_recherche )

L'idée pour le référencement est donc d'utiliser ce système pour vérifier la pertinence d'une page et tenter de se rapprocher de ce que voit un moteur de recherche comme Google.

Analyse des n-grammes en ligne

Pour mes analyses de textes, j'ai créé un outil qui permet d'analyser et de trouver les n-grammes de textes (cliquez ici).

Mise en pratique avec Python

Pour mettre en pratique l'analyse des n-grammes sur un texte, j'ai utilisé le langage de programmation Python dans sa version 3 (https://www.python.org/).

Afin d'aller plus vite, j'ai aussi choisi d'utiliser la librairie NLTK ("Natural Langage ToolKit") qui propose des fonctions toutes faites pour ce genre de cas.

Voici le résultat avec le code que j'ai développé (le texte à analyser se trouve dans le fichier texte.txt dans le même répertoire que le script Python) :

# -*- coding: utf-8 -*-
from nltk.util import ngrams

def lireFichier(fichier):
    with open(fichier, encoding='utf-8', errors='ignore') as f:
        content = f.readlines()
    return content

contenu = lireFichier("texte.txt")

dictionnaire = dict()

for n in range(3,7) :
    for ligne in contenu:
        sixgrams = ngrams(ligne.split(), n)
        for grams in sixgrams:
            valeur = " ".join(grams)
            if valeur in dictionnaire :
                dictionnaire[valeur] += 1
            else :
                dictionnaire[valeur] = 1

for key in dictionnaire:
    valeur = dictionnaire[key]
    if valeur > 2  :
        print("\"" + key + "\" : ", valeur)

Bien sûr, vous devrez adapter cet outil à vos besoins. Il est possible, par exemple, de modifier le range(3,7) pour avoir plus de n-grammes...

Dans tous les cas, vous avez maintenant une bonne base de travail pour vos développements d'outils d'analyses SEO.

Pour d'autres articles sur le référencement et le SEO, cliquez ICI.