La lisibilité consiste principalement en une heuristique qui "fonctionne bien" dans de nombreux cas.
J'ai écrit quelques articles de recherche sur ce sujet et je voudrais expliquer pourquoi il est facile de trouver une solution qui fonctionne bien et quand il devient difficile de s'approcher d'une précision de 100%.
Il semble y avoir une loi linguistique sous-jacente dans le langage humain qui se manifeste également (mais pas exclusivement) dans le contenu des pages Web, qui sépare déjà assez clairement deux types de texte (texte intégral ou non intégral ou, en gros, "contenu principal" ou "passe-partout").
Pour obtenir le contenu principal d'un document HTML, il suffit dans de nombreux cas de ne conserver que les éléments de texte HTML (c'est-à-dire les blocs de texte qui ne sont pas interrompus par des balises) qui comportent plus de 10 mots environ. Il semble que les humains choisissent parmi deux types de texte ("court" et "long", mesurés par le nombre de mots qu'ils émettent) pour deux motivations différentes de l'écriture de texte. Je les appellerais les motivations "navigationnelles" et "informationnelles".
Si un auteur veut que tu rapidement obtenir ce qui est écrit, il/elle utilise du texte "de navigation", c'est-à-dire quelques mots (comme "STOP", "Lisez ceci", "Cliquez ici"). C'est le type de texte le plus répandu dans les éléments de navigation (menus, etc.).
Si un auteur veut que vous compreniez profondément ce qu'il veut dire, il utilise de nombreux mots. De cette façon, l'ambiguïté est supprimée au prix d'une augmentation de la redondance. Le contenu de type article entre généralement dans cette catégorie, car il comporte plus que quelques mots.
Si cette séparation semble fonctionner dans une pléthore de cas, elle devient délicate avec les titres, les phrases courtes, les clauses de non-responsabilité, les pieds de page de copyright, etc.
Il existe des stratégies et des fonctionnalités plus sophistiquées qui permettent de séparer le contenu principal du contenu standard. Par exemple, la densité des liens (nombre de mots d'un bloc qui sont liés par rapport au nombre total de mots du bloc), les caractéristiques des blocs précédents/suivants, la fréquence d'un bloc de texte particulier dans l'ensemble du Web, la structure DOM du document HTML, l'image visuelle de la page, etc.
Vous pouvez lire mon dernier article " Détection des modèles de présentation en utilisant des caractéristiques de texte peu profondes "pour avoir un aperçu d'un point de vue théorique. Vous pouvez également regarder la vidéo de ma présentation sur VideoLectures.net.
"Readability" utilise certaines de ces fonctionnalités. Si vous observez attentivement le journal des modifications SVN, vous verrez que le nombre de stratégies a varié dans le temps, tout comme la qualité d'extraction de Readability. Par exemple, l'introduction de la densité des liens en décembre 2009 a beaucoup aidé à l'amélioration.
À mon avis, cela n'a donc aucun sens de dire "Readability le fait comme ça", sans mentionner le numéro de version exact.
J'ai publié une bibliothèque Open Source d'extraction de contenu HTML appelée tuyau de chaudière qui propose plusieurs stratégies d'extraction différentes. En fonction du cas d'utilisation, l'un ou l'autre extracteur fonctionne mieux. Vous pouvez essayer ces extracteurs sur les pages de votre choix en utilisant l'application compagnon boilerpipe-web sur Google AppEngine.
Pour laisser parler les chiffres, voir le " Repères Page " sur le wiki boilerpipe qui compare certaines stratégies d'extraction, dont boilerpipe, Readability et Apple Safari.
Je dois préciser que ces algorithmes supposent que le contenu principal est en fait un texte intégral. Il existe des cas où le "contenu principal" est autre chose, par exemple une image, un tableau, une vidéo, etc. Les algorithmes ne fonctionnent pas bien dans de tels cas.
A la vôtre,
Christian