Accueil > > > RECHERCHE PAR MOTS CLEFS - DÉCOUPAGE D'UNE PHRASE EN MOTS - RECHERCHE ET COLORATION DES MOTS D'UN TEXTE
RECHERCHE PAR MOTS CLEFS - DÉCOUPAGE D'UNE PHRASE EN MOTS - RECHERCHE ET COLORATION DES MOTS D'UN TEXTE
Information sur la source
Description
Bonjour, Cette petite source a deux objectifs : 1. Evidemment, faire part à la "communauté" de mes travaux, afin que d'autre puisse le réultiliser sans avoir à réinventer la roue (comme je l'ai fait ici) 2. Vous demander de tester un peu les deux pauvres fonctions présentées ici. J'arrive enfin à la fin d'un projet... Il rentre en phase de test grandeur nature Bon, rentrons dans le vif du sujet : Ici, je vous présentes deux petites fonctions de mon cru. Elles sont ridicules, ridicules, riduculements petites. Mais pourtant tellement efficace. On a mots() => Découpe un phrase en mots pour ensuite utiliser ces mots dans une requète SQL Exemple de découpage (je met le texte entre crichets) : * mots('salut') => array(0=>'salut'); * mots('salut les gars'); => array(0=>'salut', 1=>'les', 2=>'gars); * mots('salut "les zounes"'); => array(0=>'salut',1=>'les zounes'); * mots("et l'apostrophe ?"); => array(0=>'et',1=>'l\'apostrophe',2=>'?'); Bon, vous avez compris le principe ? (expressions exacte entre "" et on echappe pas ce qui sort de cette fonction) colorer() => colore un texte selon une liste de mots Je ne peux vous montrer un exemple ici. La source en dira plus... Par contre : * cette fonction necessite 'mots()' * Elle est censé fonctionner avec les alphabets latin, nordique, allemand, espagnol... Bref toute l'UE (peut-être même le grec moderne, pas testé) Je vous laisse voir le code
Source
- /*
- * On commence par la plus facile des deux : mots()
- *
- * prend :
- * - @string $phrase // la phrase, à découper
- *
- * retourne :
- * - array( int=>string ) // liste de tous les mots issue de la phrase. Tableau non-assiociatif, commence à zéro
- */
- function mots($phrase) {
- // strpslashes ? => je ne veux pas que cette chaine soit échappée...
- // '@["][^"]+["]|[\S^"]+@' => règle de découpage. Tout ce qui n'est pas un caractère blanc est bon à prendre
- preg_match_all('@["][^"]+["]|[\S^"]+@', stripslashes($phrase), $m);
-
- // La regle prend les ", donc les enlevés une fois que c'est découpé
- $m = str_replace('"', '', $m[0]);
-
- // Je ré-échappe les mots de la phrase. Cela viend du fait que j'utilise toujours des chaînes échappée.
- // Enlevez cette manip si c'est pas votre truc
- foreach( $m as $k=>$v ) {
- $m[$k] = addslashes($v);
- }
- // BINGO (juste on évite les mots en double)
- return array_unique($m);
- }
-
-
-
- /*
- * Le gros morceau : colorer()
- *
- * prend :
- * - string/array $mots => quoi colorer? Cela peut-être une chaine (qui passera par la moulinette de mots()) ou directement un tableau de chaines
- * - string/array $texte => qui colorer? Un texte (multiligne ok) ou un tableau ASSOCIATIF OU NON de chaines à colorer
- * - (optionel) regexp $avoid => la coloration est dangeureuse ! (lien URL, identifiant...) On peut eviter la coloration de certain champs de $texte (si $texte est un tableau). Pour cela, former une expression régulière qui devra TROUVER LES CLEFS du tableau A NE PAS COLORER
- *
- * retourne :
- * - string/array => le $texte colorer :) réultat selon le format de $texte en entré
- *
- * NOTE IMPORTANTE :
- * La coloration se fait par l'insertion de balise <em></em> dans le texte !!!
- * à vous de jouer avec les styles (CSS) pour que la coloration soit belle.
- * (j'aurais pu mettre un 4ème paramètre pour choisir la balise... C'est facile à faire !
- * Un consiel, utilisez des balises courtes !)
- *
- * BUG POSSIBLE :
- * Si je colore les mots A et EM dans 'Youpla!'
- * Je risque d'avoir 'Youpl<<em>e</em>m>a</<em>e</em>m>!'
- * Mais bizarement, je n'ai encore jamais croisé ce bug !!??!!
- */
- function colorer( $mots, $texte, $avoid=false ) {
- // les accents... c'est le gros problème et la raison de cette fonction
- $r = array(); // liste des caractères susseptibles d'être des accents
- $s = array(); // et leurs conditions de recherche particulières
- $r[] = '@([^ao])[EÈÉÊËeèéêë]@'; $s[] = '\1[EÈÉÊËeèéêë]'; //e
- $r[] = '@[CcÇç]@'; $s[] = '[CcÇç]'; //c
- $r[] = '@[IÌÍÎÏiìíîï]@'; $s[] = '[IÌÍÎÏiìíîï]'; //i
- $r[] = '@[DÐdð]@'; $s[] = '[DÐdð]'; //d
- $r[] = '@[NÑnñ]@'; $s[] = '[NÑnñ]'; //n
- $r[] = '@[UÙÚÛÜuùúû]@'; $s[] = '[UÙÚÛÜuùúû]'; //u
- $r[] = '@[YÝyýýýý]@'; $s[] = '[YÝyýýýý]'; //y
- $r[] = '@[BÞbþ]@'; $s[] = '[BÞbþ]'; //b
- $r[] = '@[Ssß]@'; $s[] = '[Ssß]'; //s
- $r[] = '@[AÀÁÂÃÄÅaàáâãäåæ]|ae@';$s[] = '([AÀÁÂÃÄÅaàáâãäåæ]|ae)';//a
- $r[] = '@[OÒÓÔÕÖoòóôõöøœ]|oe@'; $s[] = '([OÒÓÔÕÖoòóôõöøœ]|oe)'; //o
- // pour les deux derniers : faire gaffe au voyelles liées (vive le français ;)
-
- // on sauve les champs à ne pas colorer
- $sav = array();
- if( $avoid!==false and is_array($texte) ) {
- foreach($texte as $k=>$v) {
- if( preg_match($avoid,$k) ) {
- $sav[$k] = $v;
- }
- }
- }
-
- // si les mots ne sont pas découpés, on les passes par la moulinette 'mots();'
- if( !is_array($mots) ) $mots = mots($mots);
-
- // Tout est là !!!
- // On remplace les lettres possiblement accentuées par leur règle de recherche respectives
- $mots = preg_replace($r, $s, $mots);
- // Construction de la big regexp de coloration
- $mots = implode('|', $mots);
- // Coloration ? C'est ici...
- $texte = preg_replace("@$mots@im", '<em>\0</em>', $texte);
-
- // Puis on restaure les champs sauvés
- foreach( $sav as $k=>$v ) {
- $texte[$k] = $v;
- }
- // BINGO
- return $texte;
- }
/*
* On commence par la plus facile des deux : mots()
*
* prend :
* - @string $phrase // la phrase, à découper
*
* retourne :
* - array( int=>string ) // liste de tous les mots issue de la phrase. Tableau non-assiociatif, commence à zéro
*/
function mots($phrase) {
// strpslashes ? => je ne veux pas que cette chaine soit échappée...
// '@["][^"]+["]|[\S^"]+@' => règle de découpage. Tout ce qui n'est pas un caractère blanc est bon à prendre
preg_match_all('@["][^"]+["]|[\S^"]+@', stripslashes($phrase), $m);
// La regle prend les ", donc les enlevés une fois que c'est découpé
$m = str_replace('"', '', $m[0]);
// Je ré-échappe les mots de la phrase. Cela viend du fait que j'utilise toujours des chaînes échappée.
// Enlevez cette manip si c'est pas votre truc
foreach( $m as $k=>$v ) {
$m[$k] = addslashes($v);
}
// BINGO (juste on évite les mots en double)
return array_unique($m);
}
/*
* Le gros morceau : colorer()
*
* prend :
* - string/array $mots => quoi colorer? Cela peut-être une chaine (qui passera par la moulinette de mots()) ou directement un tableau de chaines
* - string/array $texte => qui colorer? Un texte (multiligne ok) ou un tableau ASSOCIATIF OU NON de chaines à colorer
* - (optionel) regexp $avoid => la coloration est dangeureuse ! (lien URL, identifiant...) On peut eviter la coloration de certain champs de $texte (si $texte est un tableau). Pour cela, former une expression régulière qui devra TROUVER LES CLEFS du tableau A NE PAS COLORER
*
* retourne :
* - string/array => le $texte colorer :) réultat selon le format de $texte en entré
*
* NOTE IMPORTANTE :
* La coloration se fait par l'insertion de balise <em></em> dans le texte !!!
* à vous de jouer avec les styles (CSS) pour que la coloration soit belle.
* (j'aurais pu mettre un 4ème paramètre pour choisir la balise... C'est facile à faire !
* Un consiel, utilisez des balises courtes !)
*
* BUG POSSIBLE :
* Si je colore les mots A et EM dans 'Youpla!'
* Je risque d'avoir 'Youpl<<em>e</em>m>a</<em>e</em>m>!'
* Mais bizarement, je n'ai encore jamais croisé ce bug !!??!!
*/
function colorer( $mots, $texte, $avoid=false ) {
// les accents... c'est le gros problème et la raison de cette fonction
$r = array(); // liste des caractères susseptibles d'être des accents
$s = array(); // et leurs conditions de recherche particulières
$r[] = '@([^ao])[EÈÉÊËeèéêë]@'; $s[] = '\1[EÈÉÊËeèéêë]'; //e
$r[] = '@[CcÇç]@'; $s[] = '[CcÇç]'; //c
$r[] = '@[IÌÍÎÏiìíîï]@'; $s[] = '[IÌÍÎÏiìíîï]'; //i
$r[] = '@[DÐdð]@'; $s[] = '[DÐdð]'; //d
$r[] = '@[NÑnñ]@'; $s[] = '[NÑnñ]'; //n
$r[] = '@[UÙÚÛÜuùúû]@'; $s[] = '[UÙÚÛÜuùúû]'; //u
$r[] = '@[YÝyýýýý]@'; $s[] = '[YÝyýýýý]'; //y
$r[] = '@[BÞbþ]@'; $s[] = '[BÞbþ]'; //b
$r[] = '@[Ssß]@'; $s[] = '[Ssß]'; //s
$r[] = '@[AÀÁÂÃÄÅaàáâãäåæ]|ae@';$s[] = '([AÀÁÂÃÄÅaàáâãäåæ]|ae)';//a
$r[] = '@[OÒÓÔÕÖoòóôõöøœ]|oe@'; $s[] = '([OÒÓÔÕÖoòóôõöøœ]|oe)'; //o
// pour les deux derniers : faire gaffe au voyelles liées (vive le français ;)
// on sauve les champs à ne pas colorer
$sav = array();
if( $avoid!==false and is_array($texte) ) {
foreach($texte as $k=>$v) {
if( preg_match($avoid,$k) ) {
$sav[$k] = $v;
}
}
}
// si les mots ne sont pas découpés, on les passes par la moulinette 'mots();'
if( !is_array($mots) ) $mots = mots($mots);
// Tout est là !!!
// On remplace les lettres possiblement accentuées par leur règle de recherche respectives
$mots = preg_replace($r, $s, $mots);
// Construction de la big regexp de coloration
$mots = implode('|', $mots);
// Coloration ? C'est ici...
$texte = preg_replace("@$mots@im", '<em>\0</em>', $texte);
// Puis on restaure les champs sauvés
foreach( $sav as $k=>$v ) {
$texte[$k] = $v;
}
// BINGO
return $texte;
}
Conclusion
Voilà...
J'espère que cela va vous aider...
J'attends aussi un maximum de commentaire afin que je puisse blinder ces fonctions, qui sont étonnemment petites (enfin je trouve)
A venir dans prochain les jours : mon moteur AJAX. Vous allez voir, ça dépotte !
PS : j'ai l'impression que les tabultaions ne seront pa bien alignées... Désolé d'avance
Sources du même auteur
Sources de la même categorie
RÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBERÉCUPÉRER LES MINIATURES D'UNE VIDÉO YOUTUBE Le code est simple, il permet depuis une url youtube de récupérer son identifiant et de se connecter au serveur de miniatures pour en récupérer les im...
par tefa24600
CONVERTISSEUR DE NOMBRES EN TEXTECONVERTISSEUR DE NOMBRES EN TEXTEQu'est-ce ? Un convertisseur de nombre en texte.
Ses particularités?
- pas de limitation sur la taille du nombre (traitement en string, et non en ...
par macruz
CODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECODAGE TEXTE >HTML, ISO, SPECIALCHARS, URL ET DECODAGECe script php permet, comme son nom l'indique de coder un texte pour remplacer les caractères spéciaux, ou apprendre à comprendre les htmlentities, sp...
par Salva9473
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Moteur de Recherche [ par MAsterC ]
Salut à tous,je suis en train de développé un moteur de recherche, puis il me manque seulement la "recherche par mot clé" c'est à dire que... si je ma
Ajouter la troncature dans un moteur de recherche [ par baboun ]
Bonjour, je viens crier au secours.Je tente d'insérer un système de troncature dans mon moteur de recherche php sur base de donnée MySQL.(Sans vouloir
Comment rechercher un mot dans une chaine de caractères ? [ par Drazounet ]
Bonjours à tous,Je suis en train de programmer un forum en php et maintenant je suis en train de lui ajouter une section "recherche" afin de trouver p
recherche un mot dans une base de donnee [ par maxelpiratos ]
bonjour a tous!, je voudrais faire une requete qui recherche un mot dans une table. seulement c un champ text donc il faudrait que la requete reco
Pour une recherche avancée [ par sebtoto62 ]
Salut, je crée actuellement un forum et je voudrais y ajouter un espace de recherche avancée. Pour cela, je tape un ou des mots clés m
moteur de recherche [ par cobrachris ]
bonjour à tous,J'ai un petit problème sur un moteur de recherche que j'ai trouvé sur le site. J'ai modifier les champs dans lesquels fa
recherche par mot dans fichier [ par justone72 ]
Bonjour,J'ai besoin assez rapidemnt d'un script qui permet de faire une recherche dans un dossier (recherche de fichiers dans le dossier + sous dossie
Problème avec un soit disant moteur de recherche lol [ par gssk ]
Au fait j'ai fait un "moteur de recherche" (code pourrave je le sais merci !!), et je n'ai que d erreur de variables indéfini! tels que Mot,idM,n
faire une recherche par mot clé dans un texte [ par maurimaure ]
Bonjour, J'ai des docs en registrés dans ma BDD, j'aimerais faire des récherches par mots clés sur ces docs enfin de n'en affi
recherche de texte [ par RM50Man ]
Bonjour , comment faire pour rechercher du texte par exemple:je veux rechercher un mot qui commence par Aselect * from table where mot = 'A*'On fait c
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SYSTEME D'AMISYSTEME D'AMI par moza2409
Cliquez pour lire la suite par moza2409
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|