Algorithme d'extraction de contenu de site web

Pragmatic Nerdz
May 11, 2020 - 3 Minutes

Cet article présente un algorithme qui permet d'extraire de m'importe que site web, son contenu, tout en ignorant les informations superflues tels que les bannière publicitaire, menus, formulaire etc.

Pixabay @ pexels.com
Pixabay @ pexels.com

Cet algorithme est utilisé par Wutsi pour faciliter l'importation de contenu de blogs hébergés dans des site externes (Ex: MondoBlogMediumWordpress etc.) .

L'algorithme

Pour régler ce problème,  nous avons conçu un algorithme capable d'analyser n'importe quel article sur le web, éliminer le superflu et identifier le contenu principal lié au sujet de l'article.
Cet algorithme s'exécute en 2 phases:

  1. Une phase de nettoyage
  2. Une phase d'extraction

La Phase de Nettoyage

Cette première phase est d'éliminer du document toutes les informations non pertinentes:

  1. Les commentaires 
  2. Les balises HTML non textuelles : head, style, script, nav, iframe, noscript, header, footer, aside
  3. Les modules d'intégration avec les réseaux sociaux.
  4. Les balises HTML ayant des identifiants (id ou class) associées à des sections inutiles: footer, comments, related_posts,  top_nav, addthis_tool, embedly-card etc. Ces identifiants sont très populaires dans les sites hébergés chez Wordpress.
Exemple de document HTML avant/après la phase de nettoyage
Exemple de document HTML avant/après la phase de nettoyage

La dernière étape consiste à éliminer toutes les balises vides du document, qui résultent du nettoyage effectué lors des étapes 1 à 4

Elimination des balises vides
Elimination des balises vides

La phase d'extraction

Apres avoir simplifié la structure du document, la prochaine phase est d'extraire le vrai contenu de l'article.

La stratégie d'extraction de contenu est basée sur l'algorithme eatiht, qui a été porté du language Python a Java, et amélioré. L'algorithme eatiht est basé sur les 2 principes suivants:

  • Le contenu utile est long
  • Le contenu utile est groupé en paquets

On va utiliser le document HTML suivant comme exemple, pour démontrer comment l'algorithme fonctionne.

1. La sélection

La 1ere étape d'extraction est de sélectionner tous les noeuds du document ayant 20 caractères et plus. La limite de 20 caractères permet d'identifier les noeuds qui sont assez longs pour être considérés comme contenu utile.

Le résultat de la sélection sur notre document:

Receive my Stories your e-mail inbox as soon as I publish them.
Subscribe to my Blog

Ensuite on filtre les parents des noeuds sélectionnés, pour arriver au résultat suivant:

2. Le partitionnement

Cette étape attribut un score a chacun des noeuds sélectionnés. Le score de chaque noeud est le nombre total de phrases qu'il contient.

Le score de chacun des noeuds:

3. ArgMax

L'étape suivante sélectionne le argmax, qui est le noeud ayant le score le plus élevé. Le argmax identifie la zone ou se trouve le vrai contenu de l'article.

Dans le cas de notre exemple:

4. La Fusion

La dernière étape est de fusionner avec le argmax,  tous les noeuds qui ont le même parent que le argmax. Le résultat obtenu est le contenu final à extraire.

Le résultat final de la fusion:

Résultats

Après plusieurs tests fait sur 30 blogs sur MondoBlogMedium ou Wordpress, on a observé les résultats suivant:

  • Le taux de succès d'importation du texte est de 100%.
  • Le taux de succès d'importation des images est de 50%. 1 fois sur 2, l'auteur doit importer manuellement les images dans le texte après avoir importé un article. Surtout les articles importés de Medium.
  • Le contenu embedded des média sociaux est ignoré: vidéo YouTube, tweets, images Instagram etc.

La prochaine étape est d'améliorer l'algorithme afin d'arriver a un taux d'importation de 100% pour les textes et images.

Grace a cet algorithme, 80% du travail d'importation est automatisé par Wutsi. L'auteur doit intervenir manuellement pour régler le dernier 20% du contenu manquant.

What's Next?

Wutsi
HTML
Algorithmes
Extraction De Données