> Tech > Filtrer le bruit

Filtrer le bruit

Tech - Par Renaud ROSSET - Publié le 24 juin 2010
email

Il serait bon de pouvoir repousser par filtrage une partie de ces parasites rapidement. En théorie, nous pourrions éliminer les tags HTML et XML en chargeant les données dans un objet XmlDocument ou HtmlDocument puis en demandant juste le texte du document. Mais des difficultés apparaissent si les données ne

Filtrer le bruit

correspondent pas exactement aux exigences de l’objet.

En général, j’ai constaté que les risques surpassent les avantages pour les raisons suivantes. Un objet XmlDocument conviendrait pour notre page de configuration de routage bien élaborée, mais si une page n’est pas un document XML bien formé, l’analyse syntaxique échouera. Un objet HtmlDocument serait un bon moyen de supprimer au filtrage le contenu indésirable, mais le risque de casser notre script est important. En effet, si une page contient des données étranges – y compris un contenu qui ne provoque pas d’erreurs dans IE – un objet HtmlDocument pourrait produire une boîte d’erreur GUI bloquante. De plus, les scripts présents dans une page pourraient encore s’exécuter dans le document virtuel et causer un comportement bizarre.

Le mieux consiste à utiliser des expressions ordinaires. Certes, nous pourrions trouver l’adresse IP publique avec une expression régulière courte, mais ce serait un peu comme utiliser un objet XmlDocument. Ce serait tricher parce que cela vous montrerait que ce qui marche bien dans ce cas serait inutile pour la plupart des autres tâches. C’est pourquoi il vaut mieux utiliser une expression régulière pour nettoyer les données de type Web générique, jusqu’au point où une expression régulière beaucoup plus simple ou même une recherche par chaîne de base nous permettrait de trouver l’information souhaitée rapidement.

Commençons par créer une référence vers le moteur VBScript Regular Expression. Parce que nous voulons travailler avec des profils susceptibles d’apparaître dans de nombreuses lignes au travers de nos données, nous activons ensuite le support multiline et global :

Dim rx Set
rx = New RegExp
rx.Multiline = True
rx.Global = True

Pour isoler notre information cible, la première étape consiste à supprimer tous les tags HTML des données. Comme les tags HTML et XML commencent et finissent toujours par une parenthèse angulaire (<>), nous pouvons facilement les repérer en utilisant le modèle suivant :

rx.Pattern = "<[^>]+>"

Si vous utilisez souvent des expressions régulières, vous savez que ce modèle recherche les chaînes qui commencent par < et finissent par >, mais la partie de l’expression qui se situe entre les parenthèses angulaires (c’est-à-dire, [^>]+) pourrait bien être déroutante. Quand on l’utilise à l’intérieur des marqueurs de jeux de caractères [ et ], le caractère caret (^) signifie correspondre à tous les caractères absents de ce jeu. Le caractère plus (+) qui est plus familier aux utilisateurs de « regex » signifie correspondre à toute séquence d’un ou plusieurs caractères dans le jeu. Donc, [^>]+ signifie simplement correspondre aux caractères qui ne sont pas >. Par conséquent, le modèle <[^>]+> dans sa totalité correspond à n’importe quelle séquence qui commence par <, finit par > et ne contient pas >.

Une fois les tags identifiés, la seule chose à faire pour les supprimer est d’utiliser un remplacement d’expression régulière, en substituant une chaîne vide à chaque tag :

data = rx.Replace(data, _ vbNullString)

Si nous examinons les données d’une page Web classique après un tel remplacement, nous constatons généralement que beaucoup de données restent, mais que la plus grande partie est constituée d’espaces vierges : un mélange de tabulations, d’espaces standard et de fins de lignes. Nous verrons fréquemment des entités de caractères HTML spéciales. Bien qu’elles ne soient pas significatives dans le cas de la page Web de routage, l’une d’elles mérite d’être éliminée pour faciliter la recherche : le caractère d’espace non sécable spécial, généralement codé dans les pages Web sous la forme « &nbsp ; ». Bien que nous puissions utiliser aussi une expression régulière pour ce remplacement, il est tout aussi simple d’utiliser la fonction de remplacement de caractères de VBScript. Nous pouvons remplacer chacun de ces caractères par un espace unique en utilisant la ligne suivante :

data = Replace _ (data, "&bnsp;", " ", 1, -1, _ 1)

La dernière étape de notre nettoyage générique consiste à condenser toutes les séquences d’espace vierge présentes dans nos données en espaces uniques, afin que notre chaîne de recherche n’ait pas à se préoccuper du nombre ou du type de caractères non imprimables qui séparent des mots spécifiques. Pour traduire un espace vierge en espaces uniques, nous spécifions un nouveau modèle d’expression régulière qui correspond à un ou plusieurs caractères espace vierge d’un type quelconque :

rx.Pattern = "\s+"

Ensuite, nous substituons un espace unique à chaque occurrence que nous rencontrons :

data = rx.Replace(data, " ")

Téléchargez cette ressource

Guide inmac wstore pour l’équipement IT de l’entreprise

Guide inmac wstore pour l’équipement IT de l’entreprise

Découvrez toutes nos actualités à travers des interviews, avis, conseils d'experts, témoignages clients, ainsi que les dernières tendances et solutions IT autour de nos 4 univers produits : Poste de travail, Affichage et Collaboration, Impression et Infrastructure.

Tech - Par Renaud ROSSET - Publié le 24 juin 2010