Verificateur de regles de ponctuation.

Discussion dans 'Administration d'un site Web' créé par k2pi, 16 Octobre 2008.

  1. k2pi
    k2pi WRInaute occasionnel
    Inscrit:
    4 Février 2007
    Messages:
    272
    J'aime reçus:
    0
    Bonjour a tous,

    Comme beaucoup de webmaster, je passe pas mal de temps a relire ce que les internautes écrivent sur mes sites. Pour les fautes d'orthographes mon petit plugin firefox fait ça très bien et en général ça va assez vite. Par contre je passe un temps fou a rectifier les fautes de ponctuation. Entre ceux qui mettent des espaces partout, ceux qui n'en mettent jamais... ajouter a ça les gens qui n'ont pas compris la différence entre majuscule et minuscule... bref il y a dix minutes n'y tenant plus je lance mon éditeur préféré, me dis que yen a marre jvais coder un truc qui rectifie ça tout seul et pis c'est tout !

    Mais la je viens de relever la tête de mon clavier et une interrogation me parcours... et si ça existait déjà.. ? (ce qui ma fois est quand même grandement probable...)

    Donc si vous connaissez un truc qui fait ça, vous pouvez me faire gagner quelques heures de code :)

    Bon sinon, promis une fois que j'ai fini je fait tourner ;)
     
  2. Toma
    Toma WRInaute discret
    Inscrit:
    18 Janvier 2006
    Messages:
    217
    J'aime reçus:
    0
    Moi aussi je serais intéressé par ce genre de fonction... Jusqu'à présent je me limite à remplacer les espaces normaux par des espaces insécables devant les ponctuations double et à changer les « ' » en « ’ », donc un script un peu plus développé me serait très utile !
     
  3. bruno212
    bruno212 WRInaute occasionnel
    Inscrit:
    13 Février 2005
    Messages:
    449
    J'aime reçus:
    0
    Très bonne idée, mais je pense que c'est assez dure à développer.

    Sinon, il y a la société Druide, développeur du logiciel Antidote qui est excellent, qui propose un service de correction des pages : http://www.webelixir.net/

    à plus
     
  4. Toma
    Toma WRInaute discret
    Inscrit:
    18 Janvier 2006
    Messages:
    217
    J'aime reçus:
    0
  5. k2pi
    k2pi WRInaute occasionnel
    Inscrit:
    4 Février 2007
    Messages:
    272
    J'aime reçus:
    0
    C'est pas si dur que ca. A la limite ce qui peut être marrant c'est de faire un truc avec des règles externalisées pour pouvoir choisir son mode de correction (par exemple pour le : c'est un espace avant et apres en francais et juste un apres en anglais...)
     
  6. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    Pas compliqué de faire ca...

    Le principe algorithmique que je propose est simple, on lit la chaine caractere par caractere et on la recontruit on fonction du dernier caractere trouvé, ca marche plutot bien.

    le snipet contient:
    - gestion des virgules
    - gestion des points
    - gestion des doubles points

    qui veux aider a le perfectionner ??

    ++

    Code:
    <?php
     
      
      $texte = "texte a modifier";
    
      $i = 0;
      while (  $i < strlen( $texte ) ) {
    
         $caractere_a_analyser = $texte[$i];
    
         if ( $lance_majuscule_au_prochain_tour == TRUE ) {
         $caractere_a_analyser = ucfirst( $caractere_a_analyser );
         $resultat .= $caractere_a_analyser;
         $lance_majuscule_au_prochain_tour = FALSE;
         }
    
         elseif ( $caractere_a_analyser == '.' AND $texte[$i+1] != ' ') {
         $resultat .= '. ';
         $lance_majuscule_au_prochain_tour = TRUE;
         }
    
         elseif ( $caractere_a_analyser == ':' AND $texte[$i+1] != ' ') {
         $resultat .= ': ';
         $lance_majuscule_au_prochain_tour = TRUE;
         }
    
         elseif ( $caractere_a_analyser == ',' ) {
         $resultat .= ', ';
         }
    
    
         else  $resultat .= $caractere_a_analyser;
    
    
         $i++;
         }
    
    
         echo $texte;
         echo '<br />';
         echo $resultat;
    
    ?>
     
  7. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    il y a un problème pour les points, car "..." deviendrait ". . . "
    sans compter les uri saisis directement dans le texte où on aurait tout de séparé :cry:
     
  8. Acerouk
    Acerouk WRInaute occasionnel
    Inscrit:
    16 Février 2008
    Messages:
    446
    J'aime reçus:
    0
    J'ai aussi cherché et j'ai rien trouvé de tout fait, je suis en train de le faire perso en récupérant des bouts de scripts par ci par là.
    Je pense que les besoins peuvent être très différents pour chacun. Mon cahier des charges :
    - Suppression des espaces et retours chariots inutiles,
    - Signes de ponctuation avec les bons espaces avant et après (pas d'url dans le texte...),
    - Majuscule en début de phrase et point à la fin mais pas possible de tout passer en minuscules au milieu car il peut y avoir des noms propres,
    - Les mots entièrement en majuscules (noms propres) sont mis en 1 majuscule + minuscules (c'est pas un forum donc pas de mecs qui crient :wink:)

    Au début j'ai essayé de le faire avec des expressions régulières mais pour les majuscules j'ai pas trouvé, vous pensez que c'est possible ?
    Par contre pour la ponctuation j'ai trouvé ça.

    Edit pour faute de ponctuation ...
     
  9. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    Pour les ... il suffit de regarder le prochain caractere et le tour est joué
    elseif ( $caractere_a_analyser == '.' AND $texte[$i+1] != '.'}

    pour les url je propose un preg_replace() pour ajouter un marqueur en debut et fin des urls presentent dans le texte (#http://www.ndd.ext#) et au moment de recontruire la chaine on passe dessus.
    $texte = preg_replace('#(http|https|ftp)://([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)#','\#\\1://\\2\#',$texte);

    le lien d'Acerouk est interressant, fully regex mais je ne vois pas comment on peut gerer les majuscules ( bien qu'avec une fonction callback..) mais c'est surtout les points (.) qui vont etre ingerable. Justement a cause des urls

    A mon avis, il faut utiliser les preg pour marquer les exeptions qui sont nombreuses dans un texte:
    - urls
    - smileys
    - mot complement en majuscule
    - oublie des masjuscules (St, Mr, Miss...)

    et reconstruire tranquille la chaine en gérant les differents marqueurs
     
  10. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    le problème des url, c'est que souvent dans les fora elles sont inscrites sans le http et quand elles ne contiennent pas de www. dedans, ce n'est pas évident de construire une regex pour les trouver
     
  11. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    tout depend du masque, celui capture tout les differents formats d'urls

    Code:
    $masque  = '#';
    $masque .= '([http|ftp|https]+://';
    $masque .= '[www\.]?';
    $masque .= '[\.\-a-zA-Z0-9]*';
    $masque .= '[a-zA-Z]{2,4}?';
    $masque .= '[\?/\=\&\-_.a-zA-Z0-9]+?';
    $masque .= '[\?/\=\&\-_.a-zA-Z0-9]+)';
    $masque .= '#i';
     
  12. Leonick
    Leonick WRInaute accro
    Inscrit:
    8 Août 2004
    Messages:
    19 274
    J'aime reçus:
    0
    non, parce qu'un internaute quand il va donner un lien, il ne va pas taper http:// s'il est présent, c'est qu'il aura été sur ce lien et aura copié l'url dans la barre d'adresse pour le coller dans la page, mais quand le lien est mis de tête, il n'y a pas le protocole de mis
     
  13. KOogar
    KOogar WRInaute accro
    Inscrit:
    16 Novembre 2004
    Messages:
    4 643
    J'aime reçus:
    82
    bien vu :)

    $masque = '\([http|ftp|https]://[www\.]+)?([\.\-a-zA-Z0-9]*[a-zA-Z]{2,4}?[\?/\=\&\-_.a-zA-Z0-9]+?[\?/\=\&\-_.a-zA-Z0-9]+?)?\';

    le principe reste simple, prendre le texte et y coller des marqueurs puis relire le texte en sortant tout les indices du tableau a ne pas analyser.

    au final on aura une liste d'indices du texte -> $texte[$i]
    genre $indice = array('4','5','6','15','16','18','19','20');

    suffit de reconstruire le texte en ne tenant pas compte de ces cases.
     
  14. Acerouk
    Acerouk WRInaute occasionnel
    Inscrit:
    16 Février 2008
    Messages:
    446
    J'aime reçus:
    0
    Voici mon code, sans prise en compte des smileys et des url et avec encore quelques bugs à corriger :

    Code:
    function TypoPhrase($texte, $retourligne)
    {
    	if ($retourligne == 0)
    	{
    		$texte = str_replace(array("\n","\r\n","\r"), array(" "," "," "), $texte); // supprime les retour à la ligne
    	}
    	else
    	{
    		$texte = nl2br($texte);	// retour à la ligne html
    	}
    	$texte = stripslashes($texte); // supprime les antislash
    	$texte = preg_replace('/\s{2,}/', ' ', $texte); // réduit les espaces >= 2
    	$texte = str_replace('"','',$texte);
    	// Mettre une majuscule après . ! et ?
    	for($i = 0; $i < strlen($texte); $i++)
    	{
    		$lettre = substr($texte, $i, 1);
    		if($lettre == '.' || $lettre == '!' || $lettre == '?')
    		{
    			$capital = true;
    		}
    		elseif(!empty($lettre) && $capital == true)
    		{	
    			$lettre = strtoupper($lettre); // Met une majuscule
    			$capital = false;
    		}
    		$new_texte .= $lettre;
    	}
    	$texte = $new_texte;
    
    	$texte = str_replace(' ,', ',', $texte); // suppression espace devant , et .
    	$texte = str_replace(' .', '.', $texte);
    	
    	$patterns[0] = '/:([^ ])/'; 	// Deux-points non suivi d'un espace
    	$patterns[1] = '/([^ ]):/'; 	// Deux-points non précédé d'un espace
    	$patterns[2] = '/([^ ]);/'; 	// Point-virgule non précédé d'un espace
    	$patterns[3] = '/«([^ ])/'; 	// Guillemet ouvrant non suivi d'un espace
    	$patterns[4] = '/([^ ])»/'; 	// Guillemet fermant non précédé d'un espace
    	$patterns[5] = '/([^ ])!/'; 	// Point d'exclamation non précédé d'un espace
    	$patterns[6] = '/([^ ])\?/'; 	// Point d'interrogation non précédé d'un espace
    	$patterns[7] = '/,([^ ])/'; 	// Virgule non suivi d'un espace
    	$patterns[8] = '/\.([^ ])/';	// Point non suivi d'un espace
    	$replacements[0] = ': $1';
    	$replacements[1] = '$1 :';
    	$replacements[2] = '$1 ;';
    	$replacements[3] = '« $1';
    	$replacements[4] = '$1 »';
    	$replacements[5] = '$1 !';
    	$replacements[6] = '$1 ?';
    	$replacements[7] = ', $1';
    	$replacements[8] = '. $1';
    	$texte = preg_replace($patterns, $replacements, $texte);	
    	$texte = trim($texte); // supprime les espaces et autre au début et à la fin de la chaine
    	$texte = ucfirst($texte);
    	if (substr($texte, -1, 1) != '.') // ajoute le point à la fin
    	{
    		$texte = $texte.'.';
    	}
    	
    	return $texte;
    }
    
     
Chargement...
Similar Threads - Verificateur regles ponctuation Forum Date
Vérificateur orthographique et grammatical de site Web Développement d'un site Web ou d'une appli mobile 26 Février 2007
[Résolu] Verificateur de NDD multi extention Administration d'un site Web 11 Février 2006
Recherche validateur XHTML et vérificateur de liens Développement d'un site Web ou d'une appli mobile 19 Juillet 2005
Conformité avec les règles de Google relatives au consentement de l'utilisateur dans l'UE AdSense 5 Octobre 2021
Cookies : les nouvelles règles de 2021 : vos questions Administration d'un site Web 10 Mars 2021
Annonces refusées car présente des cas de non-respect des règles AdSense 13 Mars 2020
Search Console regles avec ou sans www Crawl et indexation Google, sitemaps 2 Octobre 2019
Quid des règles de bonnes pratiques SEO pour l'administration d'un forum Référencement Google 10 Août 2019
Cas de non respect des règles AdSense : demander un examen sans modifications ? AdSense 8 Août 2019
Modification des règles d'affichage des bannières AdSense AdSense 2 Juillet 2019
netlinking : 20 règles à connaître sur les liens Netlinking, backlinks, liens et redirections 2 Juillet 2019
Problème règles affiliation Amazon Monétisation d'un site web 21 Mai 2019
Modifications des règles de contenu enrichi Référencement Google 13 Mai 2019
Nouvelles règles de monétisation des chaînes YouTube AdSense 17 Janvier 2018
Règles de l'ICANN : obligation d'hébergement dans le pays Noms de domaine et référencement 26 Novembre 2017
Les règles de prix catalogue ne fonctionnent pas Développement d'un site Web ou d'une appli mobile 26 Juin 2017
Http vers https + règles en fonction de www ou .fr .com URL Rewriting et .htaccess 6 Octobre 2015
Adsense : nouvelle règles européennes sur le consentement des utilisateurs AdSense 27 Juillet 2015
Valider une annonce "hors des règles Google" AdWords 6 Février 2015
Enchainement de règles URL Rewriting et .htaccess 12 Octobre 2014