<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0" 
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/">

<channel>
	<title>Filtrage Web/ Web Filter</title>
	<link>http://filterflex.net/</link>
	<description></description>
	<language>fr</language>
	<generator>SPIP 1.8.3 - www.spip.net</generator>


	

	
		
	<item>
		<title>Versions 0.1</title>
		<link>http://filterflex.net/article30.html</link>		
		<dc:date>2006-05-10T13:06:48Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique1.html">Accueil</category>




		<description>
Les versions 0.1 des codes Flex et Ruby sont disponibles dans la rubrique &quot;Téléchargements&quot;. &lt;br /&gt;Le projet peut être également vu sur savannah. Un accès au code CVS est possible.
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Versions 0.1
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		mercredi 10 mai 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
Les versions 0.1 des codes Flex et Ruby sont disponibles dans la rubrique "Téléchargements".</p>
<p class="spip">Le projet peut être également vu sur <a href="https://savannah.nongnu.org/projects/pornfind/" class="spip_out">savannah</a>.
Un accès au code CVS est possible.</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
		
	<item>
		<title>Code Flex</title>
		<link>http://filterflex.net/article23.html</link>		
		<dc:date>2006-04-27T13:57:18Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique4.html">Téléchargements</category>




		<description>
Le code Flex est le plus fonctionnel. Codé en C avec Flex comme analyseur syntaxique, il est très rapide. &lt;br /&gt;Les librairies nécessaires sont (sur un ubuntu Breezy Badger) libmpfr-dev (2.1.1-11) libgmp3-dev (4.1.4-10ubuntu1) libdb4.3++-dev (4.3.28-1ubuntu3) libdb4.3++c2 (4.3.28-1ubuntu3) libdb4.3-dev (4.3.28-1ubuntu3) &lt;br /&gt;Le code est disponible sur l'hébergeur de projets savannah, dans la rubrique Téléchargement pour les tarballs ou bien dans la rubrique CVS. &lt;br /&gt;&gt; ICI ./tokenize -h affichera l'aide et les (...)
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Code Flex
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		jeudi 27 avril 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
Le code Flex est le plus fonctionnel.
Codé en C avec Flex comme analyseur syntaxique, il est très rapide.</p>
<p class="spip">Les librairies nécessaires sont (sur un ubuntu Breezy Badger)<ul>
<li>libmpfr-dev (2.1.1-11)
<li>libgmp3-dev (4.1.4-10ubuntu1)
<li>libdb4.3++-dev (4.3.28-1ubuntu3)
<li>libdb4.3++c2 (4.3.28-1ubuntu3)
<li>libdb4.3-dev (4.3.28-1ubuntu3)
</ul>
<p class="spip">Le code est disponible sur l&#8217;hébergeur de projets savannah, dans la rubrique Téléchargement pour les tarballs ou bien dans la rubrique CVS.</p>
<p class="spip">&mdash;&nbsp;> <a href="https://savannah.nongnu.org/projects/pornfind/" class="spip_out">ICI</a> <&mdash;</p>
<p class="spip">La commande <i>./tokenize -h</i> affichera l&#8217;aide et les options d&#8217;exécution du programme.</p>
<p class="spip">Il est ensuite aisé d&#8217;écrire des scripts qui vont récupérer les adresses visitées dans les logs d&#8217;un proxy (à l&#8217;aide d&#8217;expressions régulières) avant de les traiter puis de les ajouter à une liste noire si besoin est.</p>
<p class="spip">Je suis preneur de ce genre de scripts afin des les mettre accessibles dans une section sur ce site.</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
		
	<item>
		<title>Base d'apprentissage</title>
		<link>http://filterflex.net/article24.html</link>		
		<dc:date>2006-04-27T13:57:18Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique4.html">Téléchargements</category>




		<description>
L'archive délivrée ici contient 2655 pages 'pornographiques' et 2357 pages 'non pronographiques'. &lt;br /&gt;Elle peut être utilisée pour créer la base d'apprentissage quelque soit le programme utilisé (Code Ruby, Qt ou flex). &lt;br /&gt;Je la fournit telle quelle, elle mérite encore de l'attention afin d'être améliorée ; peut y-a-il trop de pages, peut être ne sont-elles pas assez représentatives du type de contenu... &lt;br /&gt;Elle est disponible (...)
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Base d&#8217;apprentissage
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		jeudi 27 avril 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
L&#8217;archive délivrée ici contient 2655 pages &#8217;pornographiques&#8217; et 2357 pages &#8217;non pronographiques&#8217;.</p>
<p class="spip">Elle peut être utilisée pour créer la base d&#8217;apprentissage quelque soit le programme utilisé (Code Ruby, Qt ou flex).</p>
<p class="spip">Je la fournit telle quelle, elle mérite encore de l&#8217;attention afin d&#8217;être améliorée&nbsp;; peut y-a-il trop de pages, peut être ne sont-elles pas assez représentatives du type de contenu...</p>
<p class="spip">Elle est disponible <a href="http://filterflex.net/src/porndb.tar.gz" class="spip_out">ICI</a>.</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
		
	<item>
		<title>Code Ruby</title>
		<link>http://filterflex.net/article25.html</link>		
		<dc:date>2006-04-27T13:57:14Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique4.html">Téléchargements</category>




		<description>
Le code en Ruby a été le langage de prototypage du projet. Il est cependant fonctionnel. &lt;br /&gt;Les paquets nécessaires sont : ruby (1.8) libdb-ruby (libdb4.2-ruby1.8) libgmp-ruby : http://raa.ruby-lang.org/project/libgmp-ruby/ ruby1.8-dev : Si lors de la commande ./extconf.rb pour l'installation de libgmp un message d'erreur indique que mkmf n'est pas présent (distribution Debian). &lt;br /&gt;Le code est disponible sur l'hébergeur de projets savannah, dans la rubrique Téléchargement pour les tarballs ou bien dans la (...)
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Code Ruby
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		jeudi 27 avril 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
Le code en Ruby a été le langage de prototypage du projet.
Il est cependant fonctionnel.</p>
<p class="spip">Les paquets nécessaires sont&nbsp;:<ul>
<li>ruby (1.8)
<li>libdb-ruby (libdb4.2-ruby1.8)
<li>libgmp-ruby&nbsp;: <a href="http://raa.ruby-lang.org/project/libgmp-ruby/" class="spip_out">http://raa.ruby-lang.org/project/libgmp-ruby/</a>
<li>ruby1.8-dev&nbsp;: Si lors de la commande <i>./extconf.rb</i> pour l&#8217;installation de libgmp un message d&#8217;erreur indique que <i>mkmf</i> n&#8217;est pas présent (distribution Debian).
</ul>
<p class="spip">Le code est disponible sur l&#8217;hébergeur de projets savannah, dans la rubrique Téléchargement pour les tarballs ou bien dans la rubrique CVS.</p>
<p class="spip">&mdash;&nbsp;> <a href="https://savannah.nongnu.org/projects/pornfind/" class="spip_out">ICI</a> <&mdash;</p>
<p class="spip">Pour son exécution <i>./filter.rb -h</i> indiquera les options possibles.</p>
<p class="spip">Il est ensuite possible d&#8217;écrire des scripts qui vont récupérer les adresses des pages visitées depuis le log d&#8217;un proxy (ou autre) pour les mettre en entrée de ce programme. Suivant le résultat retourné ces adresses peuvent alors être ajoutées ou non en liste noire.</p>
<p class="spip">Je suis preneur de ce genre de scripts afin des les mettre accessibles sur ce site.</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
		
	<item>
		<title>Sources</title>
		<link>http://filterflex.net/article16.html</link>		
		<dc:date>2006-04-25T13:03:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique6.html">Sources et liens</category>




		<description>
Voici les différentes sources qui m'ont permis de rédiger ce document et de développer les différents programmes : &lt;br /&gt;LE BOUCLIER. Les 12-17 ans connaissent deux fois plus internet que les adultes [en ligne]. Disponible sur http://www.bouclier.org/article/2834.html (consulté le 30.06.2005). &lt;br /&gt;ROBINSON Gary. A Statistical Approach to the Spam Problem [en ligne].2003. Disponible sur : http://www.linuxjournal.com/article/6467 (consulté le 30.06.2005). &lt;br /&gt;LOUIS Greg. Greg's Bogofilter Page [en ligne]. Disponible (...)
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Sources
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		mardi 25 avril 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
Voici les différentes sources qui m&#8217;ont permis de rédiger ce document et de développer les différents programmes&nbsp;:</p>
<p class="spip">LE BOUCLIER. Les 12-17 ans connaissent deux fois plus internet que les adultes <b>[en
ligne]</b>. Disponible sur <a href="http://www.bouclier.org/article/2834.html" class="spip_out">http://www.bouclier.org/article/2834.html</a> (consulté le 30.06.2005).</p>
<p class="spip">ROBINSON Gary. A Statistical Approach to the Spam Problem <b>[en ligne]</b>.2003.
Disponible sur&nbsp;: <a href="http://www.linuxjournal.com/article/6467" class="spip_out">http://www.linuxjournal.com/article/6467</a> (consulté le 30.06.2005).</p>
<p class="spip">LOUIS Greg. Greg&#8217;s Bogofilter Page <b>[en ligne]</b>. Disponible sur&nbsp;:
<a href="http://www.bgl.nu/~glouis/bogofilter/" class="spip_out">http://www.bgl.nu/&nbsp;glouis/bogofilter/</a> (consulté de 30.06.2005).</p>
<p class="spip">LOUIS Greg. Really Bayesian Bogofilter <b>[en ligne]</b>. 2003. Disponible sur&nbsp;:
<a href="http://www.bgl.nu/bogofilter/bayes.html" class="spip_out">http://www.bgl.nu/bogofilter/bayes.html</a> (consulté le 30.06.2005).</p>
<p class="spip">Méthodes bayésiennes en analyse statistique <b>[en ligne]</b>. Disponible sur&nbsp;:
<a href="http://cdfinfo.in2p3.fr/Experiences/Cosmologie/Techniques/bayes1.html" class="spip_out">http://cdfinfo.in2p3.fr/Experiences/Cosmologie/Techniques/bayes1.html</a> (consulté le
30.06.2005).</p>
<p class="spip">SHAYNE C. Gad. Meta Analysis. <b>In</b>&nbsp;: Statistics and Experimental Design for
Toxicologists. 3rd ed. CRC Press, 1998, p.171.</p>
<p class="spip">FRIEDL E.F. Jeffrey. Maîtrise des expressions régulières. O&#8217;REILLY&Associates, 2002.</p>
<p class="spip">LONGMAN Wesley Addison. Ruby Class and Library Reference <b>[en ligne]</b>. Disponible
sur&nbsp;: <a href="http://www.rubycentral.com/ref/" class="spip_out">http://www.rubycentral.com/ref/</a> (consulté le 30.06.2005).</p>
<p class="spip">THOMAS Dave. Programming Ruby, The Pragmatic Programmers&#8217; Guide. The
Pragmatic Programmers, 2005.
49</p>
<p class="spip">RAA - Ruby Application Archive <b>[en ligne]</b>. Disponible sur&nbsp;: <a href="http://raa.ruby-lang.org/" class="spip_out">http://raa.ruby-lang.org/</a>
(consulté le 30.06.2005).</p>
<p class="spip">The Lex & Yacc Page <b>[en ligne]</b>. Disponible sur&nbsp;: <a href="http://dinosaur.compilertools.net/" class="spip_out">http://dinosaur.compilertools.net/</a>
(consulté le 30.06.2005).</p>
<p class="spip">BERNARD Etienne. Mini manuel d&#8217;utilisation de Lex et Yacc <b>[en ligne]</b>. Disponible sur&nbsp;:
<a href="http://pltplp.net/lex-yacc/index.html.fr" class="spip_out">http://pltplp.net/lex-yacc/index.html.fr</a> (consulté le 30.06.2005).</p>
<p class="spip">Flex - GNU Project - Free Software Foundation (FSF) <b>[en ligne]</b>. Disponible sur&nbsp;:
<a href="http://www.gnu.org/software/flex/" class="spip_out">http://www.gnu.org/software/flex/</a> (consulté le 30.06.2005).</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
		
	<item>
		<title>Stockage</title>
		<link>http://filterflex.net/article15.html</link>		
		<dc:date>2006-04-25T12:56:02Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique11.html">Technique</category>




		<description>
Au fur et a mesure de la détection, sachant quelle expression régulière a rencontré le token désiré on est en mesure de savoir quel est son type. On peut alors le stocker. Pour ce faire il faut d'abord découper les tokens déjà récupérés (les balises html et les mots) suivant des séparateurs afin d'obtenir des tokens plus petits et plus précis, quant à ce qu'ils représentent, puis d'indiquer avant le token quel est son type (balise, domaine, mot ou bi-mot). &lt;br /&gt;Nos besoins sont de pouvoir stocker un des tokens et le nombre (...)
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Stockage
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		mardi 25 avril 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
Au fur et a mesure de la détection, sachant quelle expression régulière a rencontré le token
désiré on est en mesure de savoir quel est son type.<br/>
On peut alors le stocker.<br/>
Pour ce faire il faut d&#8217;abord découper les tokens déjà récupérés (les balises html et les mots)
suivant des séparateurs afin d&#8217;obtenir des tokens plus petits et plus précis, quant à ce qu&#8217;ils
représentent, puis d&#8217;indiquer avant le token quel est son type (balise, domaine, mot ou bi-mot).</p>
<p class="spip">Nos besoins sont de pouvoir stocker un des tokens et le nombre d&#8217;occurrences
correspondantes. Il s&#8217;agit en fait de stocker une paire clé/données dans laquelle la clé est le
token (qui est unique) et les données sont les nombres d&#8217;occurrences (dans les catégories
autorisée et interdite) ce token.</p>
<p class="spip">Il n&#8217;y a pas de requête complexe à effectuer sur cette base. On veut juste pouvoir stocker la
paire et y accéder rapidement lors de l&#8217;attribution de score.</p>
<p class="spip"><a href="http://www.sleepycat.com" class="spip_out">Sleepycat Software</a> a développé Berkeley DB qui correspond exactement à nos attentes.<br/>
En effet, Berkeley DB permet de stocker des données sous la forme (clé) / (données) dans
laquelle la clé est unique.<br/>
Pour ce qui est de la structure nous sommes libre de choisir entre un hash, un B-Arbre, ou une
file. De plus elle permet de gérer la taille de la mémoire tampon afin d&#8217;optimiser la vitesse d&#8217;accès aux données.</p>
<p class="spip">Cet outil semble donc être celui qui nous est nécessaire par ces méthodes de stockage ainsi
que ces méthodes d&#8217;accès aux données optimisées. Nous arrêterons donc notre choix sur cette
base de données.</p>
<p class="spip">Cependant nous devons stocker un couple de valeurs par clé, et afin d&#8217;optimiser l&#8217;espace
stockage il faut coder ce couple.</p>
<p class="spip">Plutôt que de stocker deux entiers on va coder les valeurs sur quatre octets (deux fois deux
octets, soit deux octets par entier) pour stocker d&#8217;une par le nombre d&#8217;occurrences <b>autorisées</b>
et d&#8217;autre part le nombre d&#8217;occurrences <b>interdites</b>.</p>
<p class="spip">Le nombre maximal que l&#8217;on peut coder sur 1 octet est <i>2<sup>8</sup> - 1 = 255</i> et on peut coder
<i>2<sup>8</sup> = 256</i> valeurs (de 0 à 255).<br/>
De même sur 2 octets on peut coder <i>256<sup>2</sup> = 65536</i> (de 0 à 65535).<br/>
Un nombre en base 10 peut donc s&#8217;écrire sous la forme&nbsp;:
<i>X<sub>10</sub> = a<sub>256</sub> + b<sub>256</sub></i>.</p>
<p class="spip">Ce qui nous donne&nbsp;:<ul>
<li> <i>a = E(x/256)</i>
<li> <i>b = Xmod(256)</i>
</ul>
<p class="spip">Comme un token n&#8217;est compté qu&#8217;une fois par page lors de l&#8217;apprentissage (et est codé sur
deux octets), il faudrait avoir 65536 pages en apprentissage, dans l&#8217;une ou l&#8217;autre catégorie,
pour que la zone mémoire soit dépassée. On a donc une bonne marge de sécurité quand à cette
valeur limite.</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
		
	<item>
		<title>Expressions régulières</title>
		<link>http://filterflex.net/article14.html</link>		
		<dc:date>2006-04-25T12:55:19Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique11.html">Technique</category>




		<description>
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. &lt;br /&gt;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. &lt;br /&gt;Chacune des étapes à (...)
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Expressions régulières
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		mardi 25 avril 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
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.<br/>
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&#8217;on
souhaite récupérer et stocker.</p>
<p class="spip">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.</p>
<p class="spip">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.</p>
<p class="spip">Les tokens détectés sont les suivants.</p>

<h3 class="spip">Les noms de domaines</h3>

<p class="spip">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é.
<div align="center"><span class='spip_code' dir='ltr'><tt> https?:\/\/([\w\-\.]+) </tt></span><br/>
<small><b>Expression régulière de détection des noms de domaines</b></small>
</div><br/>
Elle permet de détecter&nbsp;:<ul>
<li> toute chaîne commençant par http:// ou bien https:// - par le <b>https&nbsp;?&nbsp;:\/\/</b>,
<li> suivi d&#8217;un mot (suite de lettres) ou d&#8217;un nombre (suite de chiffres) - détectés par <b>\w</b> -
ou d&#8217;un tiret ou d&#8217;un point, et ce au moins une fois.
</ul>
<p class="spip">Comme on ne cherche pas à détecter de slash (&#8217;/&#8217;) la détection s&#8217;arrêtera au premier slash
rencontré ou bien au premier espace ou tout autre caractère non recherché.<br/>
On obtiendra donc bien les noms de domaines.</p>

<h3 class="spip">Les balises HTML (tags)</h3>

<p class="spip">Afin de récupérer seulement les tags nécessaires il nous faut tout d&#8217;abord supprimer tous ceux
qui sont inutiles.
<div align="center"><span class='spip_code' dir='ltr'><tt> &lt;!--((.|\n)*?)--&gt; | &lt;script [^&gt;]+?&gt; ((.|\n)*?)\/script&gt; </tt></span><br/>
<small><b>Expression régulière de détection de scripts et commentaires</b></small>
</div><br/>
Elle permet de détecter&nbsp;:<ul>
<li> les commentaires qui commencent par <span class='spip_code' dir='ltr'><tt>&lt;!--</tt></span>, finissent par <span class='spip_code' dir='ltr'><tt>--&gt;</tt></span> et peuvent contenir tout
ce que l&#8217;on veut et même des retours à la ligne,
<li> ainsi que les scripts (de la même manière).
</ul>
<p class="spip">Une fois ces expressions rencontrées dans le texte on les supprime.<br/>
On peut maintenant récupérer toutes les autres balises, qui nous intéressent.
<div align="center"><span class='spip_code' dir='ltr'><tt> &lt;(\&quot;[^\&quot;]*\&quot; | \'[^\']*\' | [^\'\&quot;&gt;])*&gt; </tt></span><br/>
<small><b>Expression régulière de détection des balises HTML</b></small>
</div><br/>
On récupère&nbsp;:<ul>
<li> tout texte commençant par un chevron ouvrant et se terminant par un chevron fermant,
<li> qui peut contenir n&#8217;importe quoi entre doubles guillemets ou simples guillemets ou
n&#8217;importe quoi sans ces symboles et sans chevron fermant.
</ul>
<p class="spip">On supprime ces tokens du code HTML en même temps qu&#8217;on les détecte.</p>

<h3 class="spip">Les mots</h3>

<p class="spip">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&#8217;être séparé des caractères encombrant&nbsp;:
<div align="center"><span class='spip_code' dir='ltr'><tt> &amp;nbsp;? | &amp;lt;? | &amp;#[\d]+;? | &amp;gt;? | \s+ </tt></span><br/>
<small><b>Expression régulière de détection des caractères encombrants</b></small>
</div><br/>
Tout les caractères non significatifs sont supprimés (<span class='spip_code' dir='ltr'><tt>&amp;nbsp;</tt></span>, <span class='spip_code' dir='ltr'><tt>&amp;lt;</tt></span>, <span class='spip_code' dir='ltr'><tt>&amp;#[\\d]+;</tt></span>).</p>
<p class="spip"><div align="center"><span class='spip_code' dir='ltr'><tt> &amp;(\w)\w+; </tt></span><br/>
<small><b>Expression régulière de détection des caractères accentués codés</b></small>
</div><br/>
On détecte également tous les caractères d&#8217;accentuation (<span class='spip_code' dir='ltr'><tt>&amp;eacute;</tt></span>, <span class='spip_code' dir='ltr'><tt>&amp;egrave;</tt></span> etc.) ou
caractères spéciaux (<span class='spip_code' dir='ltr'><tt>&amp;ccedil;</tt></span>) pour les remplacer par les caractères normaux correspondants
(e, c etc.).</p>
<p class="spip"><div align="center"><span class='spip_code' dir='ltr'><tt> [-\w\d$!?+%@=]+ </tt></span><br/>
<small><b>Expression régulière de détection des mots</b></small>
</div><br/>
On peut finalement récupérer les mots, ensembles de lettres, de chiffres et des caractères de
ponctuation ($&nbsp;!?+%@=-), les autres caractères non détectés faisant offices de séparateurs.</p>

<h3 class="spip">Exemple</h3>

<p class="spip"><div align="center"><span class='spip_code' dir='ltr'><tt> &lt;a href=&quot;http://www.ac-rouen.fr&quot;&gt; Rectorat de Rouen &lt;/a&gt; </tt></span><br/>
<small><b>Exemple de code HTML</b></small>
</div><br/>
L&#8217;application des expressions régulières et des séparateurs nous donnera les tokens suivants&nbsp;:<br/>
<u>Noms de domaines&nbsp;:</u><br/>
domain&nbsp;:ac-rouen.fr<br/>
<u>Balises HTML&nbsp;:</u><br/>
tag&nbsp;:a<br/>
tag&nbsp;:a_href<br/>
tag&nbsp;:a_http<br/>
tag&nbsp;:a_www<br/>
tag&nbsp;:a_ac<br/>
tag&nbsp;:a_rouen<br/>
tag&nbsp;:a_fr<br/>
<u>Mots</u><br/>
word&nbsp;:Rectorat<br/>
word&nbsp;:de<br/>
word&nbsp;:Rouen<br/>
<u>Bi-mots</u><br/>
biword&nbsp;:Rectorat_de<br/>
biword&nbsp;:de_Rouen</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
		
	<item>
		<title>Scoring/Approche statistique</title>
		<link>http://filterflex.net/article7.html</link>		
		<dc:date>2006-04-24T14:03:17Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique3.html">Théorie</category>




		<description>
A ce stade, nous disposons déjà d'une base de données contenant les tokens, avec leur nombre d'occurrences, provenant des pages traitées lors de l'apprentissage. &lt;br /&gt;Une page au contenu inconnu peut alors être tokenisée à son tour. Chaque token trouvé dans cette page est alors recherché dans la base d'apprentissage afin de calculer la probabilité qu'elle soit classée comme interdite sachant qu'elle contient ce token. &lt;br /&gt;La méthode statistique mise en oeuvre dans le projet est tirée des calculs utilisés dans les logiciels (...)
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Scoring/Approche statistique
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		lundi 24 avril 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
A ce stade, nous disposons déjà d&#8217;une base de données contenant les tokens, avec leur nombre
d&#8217;occurrences, provenant des pages traitées lors de l&#8217;apprentissage.</p>
<p class="spip">Une page au contenu inconnu peut alors être tokenisée à son tour.
Chaque token trouvé dans cette page est alors recherché dans la base d&#8217;apprentissage afin de
calculer la probabilité qu&#8217;elle soit classée comme interdite sachant qu&#8217;elle contient ce token.</p>
<p class="spip">La méthode statistique mise en oeuvre dans le projet est tirée des calculs utilisés dans les
logiciels de détection de Spam. Elle est basée sur des <a href="http://www.linuxjournal.com/article/6467" class="spip_out">calculs bayésiens</a> et se
divise en quatre étapes&nbsp;:<ul>
<li> le calcul de probabilités individuelles,
<li> l&#8217;altération de ces probabilités,
<li> La combinaison de toutes les probabilités individuelles,
<li> Le calcul d&#8217;un indicateur global sur la page.
</ul>

<h3 class="spip">Probabilités individuelles</h3>

<p class="spip">Pour chaque constituant de la page tokenisée (balises, domaines, mots et bi-mots) il est tout
d&#8217;abord nécessaire de calculer leurs probabilités individuelles. Un token est cette fois
comptabilisé autant de fois qu&#8217;il apparaît dans une page.
Pour ce faire nous nous basons sur les valeurs (occurrences) stockées en base d&#8217;apprentissage.
Pour chaque token qui apparaît dans la page nous calculons&nbsp;:<ul>
<li> b(w) (b comme &#8220;bad&#8221; et w comme &#8220;word&#8221;) qui représente le nombre de pages
interdites contenant le mot &#8220;w&#8221; (noté Card(B|w&#949;B)) divisé par le nombre total de pages
interdites (Card(B)).<br/>
<div align="center"><img src="http://filterflex.net/images/propocint.bmp"><br/>
<small><b>Proportion d&#8217;occurrences interdites d&#8217;un mot</b></small>
</div><br/>
<li>g(w) (g comme &#8220;good&#8221;) qui représente le nombre de pages autorisées contenant le
mot &#8220;w&#8221; (noté Card(G|w&#949;G)) divisé par le nombre total de pages autorisées (Card(G)).
<div align="center"><img src="http://filterflex.net/images/propocaut.bmp"><br/>
<small><b>Proportion d&#8217;occurrences autorisées d&#8217;un mot</b></small>
</div><br/>
<li>p(w) qui peut être interprété comme la probabilité qu&#8217;une page choisie aléatoirement et
contenant le mot &#8220;w&#8221; soit une page <b>interdite</b>.
<div align="center"><img src="http://filterflex.net/images/probind.bmp"><br/>
<small><b>Probabilité individuelle</b></small>
</div>
</ul>
<p class="spip">Ces probabilités obtenues pour chaque token présent dans la page peuvent ensuite être
combinées pour attribuer un score et ainsi catégoriser la page en question.</p>
<p class="spip">On peut cependant noter un problème dans ce calcul. En effet lors de l&#8217;apprentissage tous les
mots pouvant exister (de n&#8217;importe quelle langue) n&#8217;ont pas forcément été rencontrés plusieurs
où même une seule fois. Il en va de même pour les balises HTML et leur contenu&nbsp;; il est
impossible d&#8217;en avoir une liste exhaustive suite à l&#8217;apprentissage étant donnée l&#8217;étendue des
possibilités offertes (ne serait-ce que sur le choix d&#8217;une couleur).<br/>
Ainsi pour un token n&#8217;ayant été rencontré qu&#8217;une seule fois lors de l&#8217;apprentissage ce calcul
donne trop d&#8217;importance à la probabilité individuelle correspondante.</p>
<p class="spip"><b><u>Exemple 1&nbsp;:</u></b><br/>
Pour simplifier les choses nous dirons que nous avons autant de pages <b>interdites</b> et <b>autorisées</b>
en apprentissage ce qui donne le calcul de probabilité individuelle&nbsp;:
<div align="center"><img src="http://filterflex.net/images/probindsim.bmp"/><br/>
<small><b>Probabilité individuelle simplifiée</b></small>
</div><br/>
Admettons maintenant que nous voulons calculer la probabilité relative à un token, trouvé
dans une page que l&#8217;on désire catégoriser, et que celui-ci n&#8217;est apparu qu&#8217;une seule fois lors de
l&#8217;apprentissage dans une page <b>interdite</b>.<br/>
On obtiendra donc&nbsp;: p(w)=1/(1+0)=1</p>
<p class="spip"><b><u>Exemple 2&nbsp;:</u></b><br/>
Prenons un token ayant 10 occurrences <b>interdites</b> et 1 <b>autorisée</b>.<br/>
On aura&nbsp;: p(w)=(10)/(10+1)=0.91</p>
<p class="spip">Or notre expérience nous montre que la première probabilité ne peut être de 1, nous ne
pouvons pas être certains que ce mot désigne une page <b>interdite</b>, nous manquons
seulement de données à son sujet. De même pour le deuxième exemple.<br/>
Il nous faut donc trouver un moyen d&#8217;altérer ces probabilités afin de diminuer la force qui leur
est attribuée.</p>

<h3 class="spip">Altération</h3>

<p class="spip">La méthode suivante permet de prendre en compte les mots rares c&#8217;est à dire ceux
n&#8217;apparaissant pas souvent, voir jamais, lors de l&#8217;apprentissage.<br/>
Cette méthode nous est fournie par les statistiques bayésiennes qui permettent de traiter ce
genre de cas avec efficacité. Le principe est d&#8217;attribuer un degré de confiance à un évènement
donné.<br/>
Ceci nous permet d&#8217;ajouter notre expérience aux données et valeurs collectées lors de
l&#8217;apprentissage.<br/>
Nous calculons ce degré de confiance basé sur le calcul précédent de p(w) comme suit&nbsp;:
<div align="center"><img src="http://filterflex.net/images/altération.bmp"/><br/>
<small><b>Probabilité individuelle avec altération</b></small>
</div><br/><ul>
<li><i>s</i> est la force donnée à notre expérience
<li><i>x</i> est la probabilité assumée qu&#8217;un mot que l&#8217;on ne connaît pas appartienne à la catégorie <b>interdite</b>
<li><i>n</i> est le nombre de pages contenant le token <i>w</i>
</ul>
<p class="spip">Pour commencer ces valeurs sont initialisées à 1 pour s et 0.5 pour x. Il faudra ensuite les
modifier en testant plusieurs pages pour tenter d&#8217;optimiser les résultats.<br/>
Maintenant nous utiliserons f(w) plutôt que p(w) car ce dernier ne donne pas des résultats
réalistes prenant en compte notre expérience.</p>
<p class="spip">Reprenons les exemples précédents avec s=4 et x=0.45&nbsp;:<br/>
<b><u>Exemple 1&nbsp;:</u></b>f(w)=((4×0.45)+(1×1))/(4+1)=0.56 et non plus 1<br/>
<b><u>Exemple 2&nbsp;:</u></b>f(w)=((4×0.45)+(11×0.95))/(4+11)=0.79 et non plus 0.91</p>
<p class="spip">La force donnée à un mot rare est donc maintenant beaucoup plus faible. L&#8217;exemple 1 qui
avait avant une probabilité plus forte que l&#8217;exemple 2 est maintenant plus faible comme cela
doit l&#8217;être réellement aux vues de notre expérience.</p>

<h3 class="spip">Explications</h3>

<p class="spip">Afin d&#8217;expliquer ce calcul prenons pour exemple le jeu de pile ou face.
Il y a <i>n</i> lancers effectués, chaque lancer est un essai et nous comptabilisons le nombre de <i>face</i>
obtenu. Il s&#8217;agit d&#8217;un test suivant une loi binomiale (il y a deux valeurs, <i>pile</i> et <i>face</i>), de plus
chaque lancer est indépendant.<br/>
On peut ainsi calculer la probabilité que le <i>n+unième</i> lancer donne une <i>face</i> par le calcul
suivant&nbsp;:
<div align="center"><img src="http://filterflex.net/images/binomiale.bmp"/><br/>
<small><b>Loi binomiale</b></small>
</div><br/><ul>
<li><i>q</i> est le nombre de succès (nombre de fois où l&#8217;on a obtenu &#8217;face&#8217;)
<li><i>n</i> est le nombre de lancers
<li><i>u</i> et <i>v</i> sont les paramètres de la loi binomiale (ici et dans la supposition que la
pièce n&#8217;est pas biaisée <i>u=v=0.5</i>)
</ul>
<p class="spip">On peut maintenant rapporter ce calcul au cas nous concernant. Lors de la recherche de la
probabilité individuelle d&#8217;un token, nous réalisons un essai indépendant des autres (le fait
qu&#8217;une page contienne le mot &#8217;porn&#8217; n&#8217;est pas corrélé au fait que la prochaine le contienne
également), pouvant avoir deux issues (<b>autorisée</b> ou <b>interdite</b>). Nous sommes donc dans le
même cas que le lancer de pièce et la probabilité qu&#8217;une page contenant un token donné
appartienne à la catégorie <b>interdite</b> suit une loi binomiale.</p>
<p class="spip">Si on pose, dans l&#8217;équation précédente&nbsp;:<ul>
<li> <i>u = s × x</i>
<li> <i>v = s × (1 - x)</i>
<li> <i>q = n × p(w)</i>
</ul>
<p class="spip">On retrouve alors&nbsp;:
<div align="center"><img src="http://filterflex.net/images/probindb.bmp"/><br/>
<small><b>Probabilité individuelle avec altération</b></small>
</div></p>
<p class="spip">En essayant avec <i>s = 1</i> et <i>x = 0.5</i> (les paramètres de départ) on obtient les paramètres de la
loi binomiale&nbsp;: <i>u = v = 0.5</i>.<br/>
Donc nos paramètres de départ ont été choisis en faisant l&#8217;hypothèse d&#8217;équiprobabilité des
évènements (un token inconnu a autant de chance d&#8217;appartenir à une page <b>autorisée</b> qu&#8217;à une
page <b>interdite</b>).</p>
<p class="spip">Avec le calcul de f(w) plutôt que p(w) nos résultats devraient être plus précis.</p>
<p class="spip">Il est maintenant temps de combiner les différentes probabilités afin d&#8217;obtenir un score global
de la page.</p>

<h3 class="spip">Combinaisons de probabilités</h3>

<p class="spip">Nous sommes donc maintenant capables de calculer les probabilités individuelles de chaque
token rencontré dans une page, basées sur notre expérience et sur les données stockées en
base.<br/>
Chaque page peut être alors représentée par un ensemble de probabilités. Il nous faut
combiner cet ensemble de probabilités afin de produire un indicateur correct du contenu de la
page.</p>
<p class="spip">Reprenons l&#8217;exemple du lancer de pièce.<br/>
Si nous partons avec l&#8217;hypothèse de départ que cette pièce n&#8217;est pas biaisée, et lançons 10 fois
la pièce et obtenons 10 fois <i>face</i>, la probabilité globale sera de (1/ 2)<sup>10</sup> = 1/1024 . Ce serait un
événement très peu probable en prenant en compte l&#8217;hypothèse de départ.<br/>
Mais en rejetant cette hypothèse de départ et à la place prendre celle qui dit que la pièce est
biaisée, alors ce résultat deviendrait <i>normal</i>.</p>
<p class="spip">Une méthode a été écrite par R.A. Fisher (1932), qui, appliquée à notre modèle permet de
tirer le même genre de conclusion, en l&#8217;occurrence de rejeter ou valider une hypothèse de
départ.</p>
<p class="spip">Notre hypothèse de départ est&nbsp;: "les probabilités individuelles sont précises, et les pages pour
lesquelles ont attribue les scores sont une collection aléatoire de tokens, indépendants les uns
par rapport aux autres, tels que ces probabilités suivent une loi uniforme."</p>
<p class="spip">La méthode de combinaison de Fisher permet de combiner les probabilités de <i>n</i> études
indépendantes. Les <i>n</i> probabilités p<sub>1</sub> ,p<sub>2</sub> ,..., p<sub>n</sub> représentent un échantillon indépendant de la
loi binomiale.<br/>
Il est noter que dans le cas de non indépendance des probabilités individuelles, la méthode de
Ficher conduit à des obtenir de grandes valeurs qui nous permettent de rejeter notre hypothèse
de départ.</p>
<p class="spip">Les étapes du calcul sont&nbsp;:<br/><ul>
<li> tout d&#8217;abord calculer <i>-2ln<big>&#928;</big>p-(i)</i>
<li> puis considérer que le résultat obtenu suit une distribution du Chi² avec 2n
degrés de liberté,
<li> enfin utiliser une table du Chi² afin d&#8217;obtenir la probabilité combinée,
<li> Cette probabilité est censée résumer toutes les probabilités individuelles.
</ul>
<p class="spip">Dans notre cas les n études indépendantes sont les n tokens récupérés dans la page pour laquelle on désire attribuer un score.</p>
<p class="spip">La formule globale est&nbsp;:
<div align="center"><img src="http://filterflex.net/images/combinaison.bmp"/><br/>
<small><b>Fonction de combinaison des probabilités individuelles de Fisher</b></small>
</div><br/>
Où C-<sup>-1</sup> est la fonction de du Chi² inverse.<br/>
Le cas où les probabilités individuelles sont dépendantes nous donne des résultats élevés nous
intéresse particulièrement. En effet on cherche à rejeter notre hypothèse de départ car on sait
très bien qu&#8217;une page Web n&#8217;est pas une collection aléatoire de tokens. L&#8217;ensemble des tokens
d&#8217;une page Web a un sens et ils sont donc dépendants les uns des autres.</p>
<p class="spip">Un score proche de 0 nous permettra donc de rejeter notre hypothèse de départ et à la place
prendre celle qui dit que la page à laquelle on attribue un score appartient à la catégorie
<b>autorisée</b>.<br/>
Un score proche de 1, au contraire, nous fera choisir l&#8217;hypothèse de départ selon laquelle la
page appartient à la catégorie <b>interdite</b>.</p>

<h3 class="spip">Indicateur global pour la page</h3>

<p class="spip">Le résultat précédent nous pose cependant problème dans le sens où la combinaison présente
une faiblesse. En effet dans ce calcul du produit des logarithmes les valeurs faibles (proches
de 0) apporteront plus de poids dans le résultat final que les valeurs proches de 1 (dans un
produit de valeurs comprises entre 0 et 1 les valeurs proches de 0 font tendre celui-ci vers 0
plus rapidement que les valeurs proches de 1 ne le font tendre vers 1).</p>
<p class="spip">Sachant que la méthode de combinaison de Fisher est basé sur un produit de valeurs on en
déduit que les pages appartenant à la catégorie <b>autorisée</b> sont avantagées par ce calcul.</p>
<p class="spip">Cependant, il a des moyens de gérer ce problème qui n&#8217;apporte pas de tendance à mal
classifier les pages <b>autorisées</b> en <b>interdites</b>.</p>
<p class="spip">La méthode la plus efficace est la suivante&nbsp;:<br/><ul>
<li> Inverser les probabilités individuelles en les soustrayant à la valeur 1, soit calculer,
pour chaque tokenf, <i>1-f(w-)</i>. Comme les <i>f(w)</i> représentent la probabilité qu&#8217;une page
prise aléatoirement parmi l&#8217;ensemble des pages contenant le mot <i>w</i> soit une page
<b>interdite</b>, <i>1-f(w)</i>  est la probabilité qu&#8217;une telle page soit <b>autorisée</b>.
<li> Effectuer la même combinaison de Fisher que celle vue précédemment mais cette fois
en combinant les <i>1-f(w)</i>. Cette combinaison est appelée S&nbsp;:<br/>
<div align="center">S = C-<sup>-1</sup> (&mdash;2ln<big>&#928;</big>-(1 &mdash; f(w)),2n)</div>
<li> Enfin calculer&nbsp;:
<div align="center"><img src="http://filterflex.net/images/indicateur.bmp"/><br/>
<small><b>Indicateur global de la page</b></small>
</div><br/>
<i>I</i> est un indicateur qui sera proche de 1 quand la majorité des probabilités sera en faveur de la
conclusion que la page est <b>interdite</b> et sera proche de 0 dans le cas contraire (page <b>autorisée</b>).</p>
<p class="spip">A ce point et afin d&#8217;améliorer les résultats pour qu&#8217;ils soient réellement proches de 0 ou de 1,
le meilleur moyen est de supprimer, lors de la combinaison des probabilités individuelles,
celles à faible déviation, c&#8217;est-à-dire qui font tendre le résultat vers 0.5. Ces probabilités sont
28
principalement dues à des tokens non présents en base d&#8217;apprentissage et ils sont extrêmement
nombreux ce qui peut fausser les calculs. La déviation peut être bien évidemment réglée et 0.4
(les probabilités comprises entre 0.4 et 0.6 seront supprimées du calcul final) semble être un
bon point de départ.</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
		
	<item>
		<title>Apprentissage</title>
		<link>http://filterflex.net/article6.html</link>		
		<dc:date>2006-04-24T14:00:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique3.html">Théorie</category>




		<description>
Il regroupe les deux étapes vues précédemment (tokenisation et stockage des tokens). Le but est ici de disposer d'un ensemble de pages représentatives des catégories autorisée et interdite. Il faut de même un nombre conséquent de ces pages afin que l'apprentissage soit bon, et que les données stockées soient en assez grand nombre pour couvrir une plage correcte du vocabulaire et des différents tokens qui peuvent être rencontrés sur le Web et ce, afin de pouvoir ensuite attribuer des scores à des pages inconnues. &lt;br /&gt;Ces (...)
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Apprentissage
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		lundi 24 avril 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
Il regroupe les deux étapes vues précédemment (tokenisation et stockage des tokens).
Le but est ici de disposer d&#8217;un ensemble de pages représentatives des catégories <b>autorisée</b> et
<b>interdite</b>. Il faut de même un nombre conséquent de ces pages afin que l&#8217;apprentissage soit
bon, et que les données stockées soient en assez grand nombre pour couvrir une plage correcte
du vocabulaire et des différents tokens qui peuvent être rencontrés sur le Web et ce, afin de
pouvoir ensuite attribuer des scores à des pages inconnues.</p>
<p class="spip">Ces pages représentatives sont alors tokenisées et les tokens les constituants stockés en base
de données suivant leur type (balise HTML, nom de domaine mot ou bi-mot) avec leur
nombre d&#8217;occurrences. Un token apparaissant plusieurs fois sur une page n&#8217;est comptabilisé
qu&#8217;une seule fois, mais peut apparaître sur plusieurs.</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
		
	<item>
		<title>Stockage</title>
		<link>http://filterflex.net/article5.html</link>		
		<dc:date>2006-04-24T13:57:18Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>ClarK</dc:creator>
		
<category domain="http://filterflex.net/rubrique3.html">Théorie</category>




		<description>
Lors de la récupération des tokens, à chaque page, il nous faut les stocker : de façon temporaire en phase d'apprentissage comme en phase d'attribution de score, afin de pouvoir les traiter de la manière dont chaque phase l'exige, de façon permanente pour le stockage des tokens et de leur nombre d'occurrences (une base d'apprentissage). &lt;br /&gt;Le meilleur moyen est de stocker ces tokens en base de données. Il n'est pas nécessaire d'utiliser une base de données de type traditionnel (SQL), car les requêtes effectuées (...)
</description>

		<content:encoded><![CDATA[ 
		<div class="rss" dir="ltr" lang="fr">
		
		<h2 class="rss_titre"  style="margin-bottom:0">
		
		Stockage
		
		</h2>
		<p class="rss_date" style="margin-top:0"><small>
		lundi 24 avril 2006 
		par <a href="http://filterflex.net/auteur1.html">ClarK</a>
		</small></p>
		
		<div class="rss_texte"><p class="spip">
Lors de la récupération des tokens, à chaque page, il nous faut les stocker&nbsp;:<ul>
<li> de façon temporaire en phase d&#8217;apprentissage comme en phase d&#8217;attribution de score,
afin de pouvoir les traiter de la manière dont chaque phase l&#8217;exige,
<li>de façon permanente pour le stockage des tokens et de leur nombre d&#8217;occurrences (une
base d&#8217;apprentissage).
</ul>
<p class="spip">Le meilleur moyen est de stocker ces tokens en base de données. Il n&#8217;est pas nécessaire
d&#8217;utiliser une base de données de type traditionnel (SQL), car les requêtes effectuées seront
limitées à écrire ou bien lire les nombres d&#8217;occurrences d&#8217;un token dans les catégories
<b>autorisée</b> ou <b>interdite</b>.</p>
<p class="spip">Il nous faut donc une base de stockage de type hash ou arbre qui nous permette de stocker une
paire (clé) / (valeur) correspondant à (token) / (nombre d&#8217;occurrences).</p></div>
		
		
		</div>
		<hr />
		]]></content:encoded>

		

	</item>
	
	
	

</channel>

</rss>