Test de lisibilité

Les tests de lisibilité ont pour objectif d'automatiser la qualification de la difficulté de lecture d'un texte donné. Les scores retournés par ces formules donnent une indication de l'âge ou du degré d'éducation nécessaire pour le comprendre.

C'est tests s'appuient sur des facteurs diverses, notamment le nombre de mots différents et le nombre de syllabes de ceux-ci.

Cette page vous propose un test basé sur la formule de Coleman–Liau

Les moteurs de recherche peuvent se servir aussi de ces techniques pour savoir si la page en question est adaptée à la personne qui a effectué la recherche.

Formule Résultat
Coleman-Liau Index
Statistiques
Nombre de mots
Nombre de phrases

Traitement

Voici le script de traitement au cas où :


#! /usr/bin/python
print "Content-Type: text/html\n\n"
# -*- coding: utf-8 -*-

try :

    import re
    import urllib2
    from urlparse import urlparse, parse_qs
    import os

    url = os.environ['HTTP_HOST'] + os.environ['REQUEST_URI']
    query_components = parse_qs(urlparse(url).query)
    siteurl = query_components["siteurl"][0]
    response = urllib2.urlopen(siteurl)
    html = response.read()

    #Imprescindible, senon erreur ASCII (en local non en linha)
    html= html.decode('utf-8')
    text = html

    # gardala orde
    rules = [
        # quita espazos detras das balizas
        { r'>\s+' : u'>'},
        # quita espazos multiples
        { r'\s+' : u' '},
        { r'.*<\s*(/head|body)[^>]*>' : u'' },
        { r']*>' : u'' },
        # cambia br por punto
        { r'\s*\s*' : u'.'},
        # cambia fin div, p, li, dd por punto
        { r'\s*' : u'.'},
        # quita tags e mete un espazo
        { r'[ \t]*<[^<]*?/?>' : u' ' },
        # quita espazos con puntos( .  . )
        { r'\s+\.' : u'.'},
        { r'\\.s+\.' : u' '},
        # cambia 2x punto por punto
        { r'\.\.' : u'.'},
        # quita espazos multiples (outra vez)
        { r'\s+' : u' '},
        # quita espazos o principio
        { r'^\s+' : u'' }
    ]

    for rule in rules:
        for (k, v) in rule.items() :
            regex = re.compile (k)
            text = regex.sub (v, text)

    special = {
        ' ' : ' ',
        '&' : '&',
        '"' : '"',
        '<' : '<',
        '>' : '>'
    }

    for (k, v) in special.items():
        text = text.replace(k, v)

    grades = ["5-6", "6-7", "7-8", "8-9", "9-10", "10-11",
    "11-12", "12-13", "13-14", "14-15", "15-16", "16-17", "17-18"]

    nText = len(text)
    nHtml = len(html)
    nWords = len(text.split(' '))
    nSentences = text.count(".")
    l = 5.88 * ((nText - nWords) / nWords)
    s = 29.6 * (nSentences / nWords)
    cli = (l - s - 15.8)
    gradeinteger = round(cli)

    print '{"words" : "', nWords, '", "sentences" : "', nSentences, '", "cli" : "', cli, '"}'


except Exception as inst:
    print "Unexpected error:", inst