Filtrage Web/ Web Filter

Expressions régulières

mardi 25 avril 2006 par ClarK

Les expressions régulières sont des outils extrêmement puissants et précis qui permettent de reconnaître des formes (ou pattern) dans du texte.
Elles vont donc être très utiles ici afin de supprimer le code dont on ne veut pas (commentaires, java scripts, feuilles de styles etc.), et afin de détecter les tokens que l’on souhaite récupérer et stocker.

Pour rappel il faut récupérer les balises HTML, les noms de domaines (qui peuvent être dans des balises ou pas), et enfin les mots et les bi-mots.

Chacune des étapes à réaliser peut se résumer en une seule expression régulière. Je vais les détailler ici en langage Ruby (qui a été le langage de prototypage) mais elles sont très similaires à celles utilisées avec la librairies QT de KDE ou encore avec Flex.

Les tokens détectés sont les suivants.

Les noms de domaines

Comme on peut trouver les noms de domaines aussi bien dans les balises HTML que dans le texte, on commence par les détecter au cas où le code serait ultérieurement altéré.

https?:\/\/([\w\-\.]+)
Expression régulière de détection des noms de domaines

Elle permet de détecter :
  • toute chaîne commençant par http:// ou bien https:// - par le https ? :\/\/,
  • suivi d’un mot (suite de lettres) ou d’un nombre (suite de chiffres) - détectés par \w - ou d’un tiret ou d’un point, et ce au moins une fois.

Comme on ne cherche pas à détecter de slash (’/’) la détection s’arrêtera au premier slash rencontré ou bien au premier espace ou tout autre caractère non recherché.
On obtiendra donc bien les noms de domaines.

Les balises HTML (tags)

Afin de récupérer seulement les tags nécessaires il nous faut tout d’abord supprimer tous ceux qui sont inutiles.

<!--((.|\n)*?)--> | <script [^>]+?> ((.|\n)*?)\/script>
Expression régulière de détection de scripts et commentaires

Elle permet de détecter :
  • les commentaires qui commencent par <!--, finissent par --> et peuvent contenir tout ce que l’on veut et même des retours à la ligne,
  • ainsi que les scripts (de la même manière).

Une fois ces expressions rencontrées dans le texte on les supprime.
On peut maintenant récupérer toutes les autres balises, qui nous intéressent.

<(\"[^\"]*\" | \'[^\']*\' | [^\'\">])*>
Expression régulière de détection des balises HTML

On récupère :
  • tout texte commençant par un chevron ouvrant et se terminant par un chevron fermant,
  • qui peut contenir n’importe quoi entre doubles guillemets ou simples guillemets ou n’importe quoi sans ces symboles et sans chevron fermant.

On supprime ces tokens du code HTML en même temps qu’on les détecte.

Les mots

On dispose maintenant de la page HTML dont tout le code a été supprimé. On peut donc récupérer le texte après s’être séparé des caractères encombrant :

&nbsp;? | &lt;? | &#[\d]+;? | &gt;? | \s+
Expression régulière de détection des caractères encombrants

Tout les caractères non significatifs sont supprimés (&nbsp;, &lt;, &#[\\d]+;).

&(\w)\w+;
Expression régulière de détection des caractères accentués codés

On détecte également tous les caractères d’accentuation (&eacute;, &egrave; etc.) ou caractères spéciaux (&ccedil;) pour les remplacer par les caractères normaux correspondants (e, c etc.).

[-\w\d$!?+%@=]+
Expression régulière de détection des mots

On peut finalement récupérer les mots, ensembles de lettres, de chiffres et des caractères de ponctuation ($ !?+%@=-), les autres caractères non détectés faisant offices de séparateurs.

Exemple

<a href="http://www.ac-rouen.fr"> Rectorat de Rouen </a>
Exemple de code HTML

L’application des expressions régulières et des séparateurs nous donnera les tokens suivants :
Noms de domaines :
domain :ac-rouen.fr
Balises HTML :
tag :a
tag :a_href
tag :a_http
tag :a_www
tag :a_ac
tag :a_rouen
tag :a_fr
Mots
word :Rectorat
word :de
word :Rouen
Bi-mots
biword :Rectorat_de
biword :de_Rouen


-->

Forum

Accueil du site | Contact | Plan du site | Espace privé | visites : 4468

RSS RSSfr

Site réalisé avec SPIP 1.8.3 + ALTERNATIVES