begin process at 2010 02 10 08:02:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Chaîne de caratère

 > COLORATION DE MOTS-CLÉS

COLORATION DE MOTS-CLÉS


 Information sur la source

Note :
Aucune note
Catégorie :Chaîne de caratère Classé sous :coloration, highlight, mots-clés, keywords, phrases-clées Niveau :Initié Date de création :13/10/2008 Date de mise à jour :16/10/2008 23:40:46 Vu :3 204

Auteur : maxroucool

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note


 Description

C'est une class qui permet de surligner les résultats d'une recherche.

Elle a la particularité d'être insensible aux accents et majuscules. On peut préciser un degrés de différence entre les mots, pour pallier d'éventuelles fautes de frappes de la part de l'utilisateur, ou mots au pluriels par exemples.

Si cette option ne vous intéresse pas, il suffit de mettre le pourcentage à 1. Cela aura de plus pour effet de ne pas utiliser la fonction levenshtein().

Désormais, si vous entourez une phrase par des guillemets, seule cette phrase sera surlignée.

Source

  • <?php
  • function get_microtime(){
  • list($tps_usec, $tps_sec) = explode(" ",microtime());
  • return ((float)$tps_usec + (float)$tps_sec);
  • }
  • $tps_start = get_microtime();
  • class keywordsHighlight {
  • function __construct(){
  • // Code HTML à placer autour des mots-clés trouvés ("%s" sera remplacé par le mot-clé)
  • $this->format = '<strong>%s</strong>';
  • }
  • // Fonction de simplification d'une chaine de caractères : elle la met en miniscule et retire tous les accents
  • function simple($str){
  • $str = trim($str);
  • $str = strtolower($str);
  • $str = strtr($str, "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ", "aaaaaaooooooeeeeciiiiuuuuyn");
  • $str = preg_replace("`[^a-z0-9'-]*`", "", $str);
  • return $str;
  • }
  • function compare($i_rank, $i_keywords, $i_words){
  • $min = min($this->words['len'][$i_words], $this->keywords['len'][$i_rank][$i_keywords]);
  • $max = max($this->words['len'][$i_words], $this->keywords['len'][$i_rank][$i_keywords]);
  • // Si le rapport entre les nombres de lettre est trop peu élevé, on passe au mot d'après
  • if($min / $max >= $this->percent){
  • if($this->percent == 1)
  • $test = ($this->words['simple'][$i_words] === $this->keywords['simple'][$i_rank][$i_keywords]);
  • else
  • $test = (1 - levenshtein($this->words['simple'][$i_words], $this->keywords['simple'][$i_rank][$i_keywords]) / $max >= $this->percent);
  • }
  • return $test;
  • }
  • function keywordsInitialisation($rank, $i_keywords){
  • $this->keywords['simple'][$rank][$i_keywords] = $this->simple($this->keywords['value'][$rank][$i_keywords]);
  • $this->keywords['len'][$rank][$i_keywords] = strlen($this->keywords['value'][$rank][$i_keywords]);
  • }
  • function highlight($i_words, $i_words_end = false){
  • // On surligne un mot tout seul
  • if(!$i_words_end)
  • $this->words['value'][$i_words] = sprintf($this->format, $this->words['value'][$i_words]);
  • // Ou une phrase entiere du mots $i_words au mot $i_words_end
  • else{
  • $this->words['value'][$i_words] = str_replace(strstr($this->format, '%s'), '',$this->format).$this->words['value'][$i_words];
  • $this->words['value'][$i_words_end] = $this->words['value'][$i_words_end].str_replace('%s', '', strstr($this->format, '%s'));
  • }
  • }
  • /*
  • keywordsHighlight ($text, $keywordsStr, $percent = .8)
  • $text : Texte dans lequel on surligne les mots clés
  • $keywordsStr : Liste des mots clés à surligner séparés par des espaces
  • $percent : Pourcentage de ressemblance entre les mots du texte et les mots clés à surligner (une fois en minuscule et les accents rétirés)
  • Par défaut: 0.8 => correspond a peu pres à:
  • - aucune lettre de différence pour des mots jusqu'à 4 lettres
  • - une lettre de différence pour les mots de plus de 5 lettres
  • - deux lettres de différence pour les mots de plus de 12 lettres
  • Si ce pourcentage est égal à 1, la fonction levenshtein ne sera pas utilisé. (Après quelques tests, la fonction levenshtein n'a pratiquement aucune incidence sur la rapidité du script)
  • return: Le texte avec les mots clés surlignés
  • */
  • function textHighlight($text, $keywordsStr, $percent = .8) {
  • $this->percent = $percent;
  • $text = preg_replace("`[\s]+`", " ", $text); //Supprime les doubles espaces
  • $this->words['value'] = explode(' ', $text);
  • // Récuperation des phrases-clées
  • preg_match_all('`"([^"]+)"`', $keywordsStr, $keywordsSentences);
  • $keywordsSentences = $keywordsSentences[1];
  • // Récupération des mots-clés
  • $keywordsStr = str_replace($keywordsSentences, "", $keywordsStr); // Retire les phrases clées de la liste de mots clés
  • $keywordsStr = str_replace('"', '', $keywordsStr); // Supprimer les doubles quotes
  • $keywordsStr = preg_replace("`[\s]+`", " ", $keywordsStr);
  • // Place les mots clés dans le tableau $keywords au rank 0
  • $this->keywords['value'][0] = explode(' ', trim($keywordsStr));
  • // Place les phrases clées dans le tableau $keywords au rank $i_rank
  • for($i_rank=1; $i_rank<=count($keywordsSentences); $i_rank++){
  • // Place les mots clés d'une phrase clée $i_rank dans le tableau $keywords['value'][$i_rank]
  • $this->keywords['value'][$i_rank] = explode(' ', trim($keywordsSentences[$i_rank-1]));
  • // initialisation des infos pour chaque keywords de la phrase clée $i_rank
  • $keysentences_count[$i_rank] = count($this->keywords['value'][$i_rank]);
  • for($i_keywords=0; $i_keywords<$keysentences_count[$i_rank]; $i_keywords++)
  • $this->keywordsInitialisation($i_rank, $i_keywords);
  • }
  • $words_count = count($this->words['value']);
  • $rank_count = count($this->keywords['value']);
  • $keywords_count = count($this->keywords['value'][0]);
  • for($i_words=0; $i_words<$words_count; $i_words++){
  • $this->words['simple'][$i_words] = $this->simple($this->words['value'][$i_words]);
  • $this->words['len'][$i_words] = strlen($this->words['simple'][$i_words]);
  • for($i_rank=0; $i_rank<$rank_count; $i_rank++){
  • // On explore les mots-clé seuls
  • if($i_rank == 0){
  • for($i_keywords=0; $i_keywords<$keywords_count; $i_keywords++){
  • // On initialise les mots clés pour la premiere fois
  • if($i_words == 0){
  • $this->keywordsInitialisation(0, $i_keywords);
  • }
  • if($this->compare(0, $i_keywords, $i_words))
  • $this->highlight($i_words);
  • }
  • }
  • // On explore les phrases-clées
  • else{
  • // Si le mot précédent pouvait etre contenu dans une phrase clées, on regarde si celui-ci peut correspondre à la suite de la phrase
  • if(isset($keysentences_possible[$i_rank])){
  • if($this->compare($i_rank, $keysentences_possible[$i_rank], $i_words)){
  • // Si tous les mots ont correspondu à une phrase clée, on surligne
  • if($keysentences_possible[$i_rank]+1 == $keysentences_count[$i_rank])
  • $this->highlight($i_words - $keysentences_possible[$i_rank], $i_words);
  • // Si ce mot correspond a la suite de la phrase clée, on incrémente
  • else
  • $keysentences_possible[$i_rank] += 1;
  • }
  • // Si le mot ne correspond pas au mot suivant de la phrase clée, on réinitialise la variable
  • else
  • unset($keysentences_possible[$i_rank]);
  • }
  • else{
  • // Si ce mot est le premier d'une phrase clée
  • if($this->compare($i_rank, 0, $i_words))
  • $keysentences_possible[$i_rank] = 1;
  • }
  • }
  • }
  • }
  • //print_r($this->keywords);
  • return implode(' ', $this->words['value']);
  • }
  • }
  • // Exemple :
  • $texte = 'Quelle pertinence pour le comparatisme subsémiotique ?
  • Prémisces du comparatisme subsémiotique.
  • On ne saurait assimiler, comme le fait Descartes, le monogénisme métaphysique à un amoralisme, cependant, il conteste la relation entre monogénisme et herméneutique.
  • Comme il est difficile d\'affirmer qu\'il décortique la réalité subsémiotique du comparatisme, il est manifeste qu\'il identifie l\'origine du comparatisme.
  • Par le même raisonnement, on ne saurait écarter de notre réflexion la critique de l\'antipodisme irrationnel par Kant et si d\'une part on accepte l\'hypothèse qu\'il donne alors une signification particulière à une science spéculative comme concept empirique de la connaissance alors même qu\'il désire l\'opposer alors à son cadre social, et si d\'autre part il réfute l\'analyse métaphysique sous un angle rationnel, cela signifie donc qu\'il réfute la réalité rationnelle du comparatisme.
  • On pourrait, pour conclure, mettre en doute Montague dans son analyse idéationnelle du kantisme. C\'est d\'ailleurs pour cela qu\'on ne peut contester la critique de la science générative par Descartes, et premièrement Spinoza donne une signification particulière à l\'origine du comparatisme, deuxièmement il en décortique la réalité primitive sous un angle transcendental. De cela, il découle qu\'il s\'approprie l\'origine du comparatisme.
  • Cependant, il examine l\'origine du comparatisme, et le positivisme phénoménologique ou le positivisme ne suffisent pas à expliquer le positivisme spéculatif en tant qu\'objet transcendental de la connaissance.
  • Premièrement il particularise alors la conception déductive du comparatisme, deuxièmement il réfute l\'origine phénoménologique dans une perspective nietzschéenne contrastée. Il en découle qu\'il s\'approprie l\'expression originelle du comparatisme.
  • C\'est dans une optique qu\'il s\'approprie l\'expression universelle du comparatisme afin de prendre en considération le positivisme rationnel.
  • Cependant, il identifie la relation entre maximalisme et géométrie. On ne saurait pourtant reprocher à Bergson son monogénisme transcendental, pourtant, il est indubitable qu\'il envisage l\'origine du comparatisme. Notons néansmoins qu\'il en rejette la démystification empirique en regard du monogénisme.
  • Ainsi, on ne saurait assimiler, comme le fait Spinoza, le réalisme à un monogénisme minimaliste et le fait qu\'il conteste l\'origine du comparatisme signifie qu\'il en donne une signification selon la réalité rationnelle comme objet déductif de la connaissance.
  • Le comparatisme permet, finalement, de s\'interroger sur un monogénisme de l\'Homme.
  • Pourtant, il est indubitable qu\'il donne une signification particulière à l\'analyse subsémiotique du comparatisme. Il convient de souligner qu\'il en caractérise l\'expression empirique en tant qu\'objet rationnel de la connaissance. D\'une part Leibniz donne pourtant une signification particulière à l\'analyse rationnelle du comparatisme, d\'autre part il en examine l\'analyse existentielle en tant que concept transcendental de la connaissance.
  • On peut reprocher en effet à Montague son réalisme substantialiste. Mais il ne faut pas oublier pour autant qu\'il rejette l\'analyse transcendentale du comparatisme.
  • Néanmoins, il conteste la démystification subsémiotique du comparatisme, et le monogénisme rationnel ou le réalisme post-initiatique ne suffisent pas à expliquer le monogénisme minimaliste en tant que concept existentiel de la connaissance.
  • On ne peut considérer qu\'il systématise alors l\'origine du comparatisme qu\'en admettant qu\'il en spécifie la réalité substantialiste en tant qu\'objet irrationnel de la connaissance alors qu\'il prétend l\'opposer à son cadre social et politique.
  • C\'est dans une optique identique qu\'il spécifie la relation entre finalisme et raison afin de la resituer dans sa dimension sociale et politique.
  • C\'est avec une argumentation identique qu\'on ne saurait assimiler, comme le fait Rousseau, le connexionisme transcendental à un connexionisme rationnel. Nous savons que Kierkegaard spécifie pourtant l\'origine du comparatisme. Or il en systématise la destructuration synthétique dans sa conceptualisation, c\'est pourquoi il rejette l\'analyse synthétique du comparatisme pour l\'opposer à son cadre politique.
  • Il faut cependant contraster ce raisonnement : s\'il se dresse contre la démystification substantialiste du comparatisme, c\'est également parce qu\'il en identifie la réalité originelle en regard du connexionisme ; le comparatisme ne peut, par ce biais, être fondé que sur l\'idée du primitivisme sémiotique.
  • Nous savons qu\'il envisage en effet la démystification synthétique du comparatisme. Or il en caractérise l\'aspect spéculatif en tant qu\'objet spéculatif de la connaissance, c\'est pourquoi il rejette la démystification métaphysique du comparatisme pour l\'opposer à son contexte politique et intellectuel.
  • Pour cela, on peut reprocher à Bergson son primitivisme idéationnel dans le but de le resituer dans toute sa dimension politique et sociale.
  • Contrastons cependant cette affirmation : s\'il décortique la conception post-initiatique du comparatisme, c\'est également parce qu\'il en particularise la destructuration rationnelle comme concept subsémiotique de la connaissance, et le paradoxe du minimalisme illustre l\'idée selon laquelle le minimalisme et le minimalisme ne sont ni plus ni moins qu\'une esthétique irrationnelle synthétique.
  • On ne saurait alors ignorer l\'influence de Spinoza sur l\'esthétique transcendentale, et pourtant, il est indubitable que Spinoza conteste la démystification circonstancielle du comparatisme. Il convient de souligner qu\'il réfute l\'aspect déductif dans une perspective montagovienne contrastée.
  • Le paradoxe du minimalisme illustre, de ce fait, l\'idée selon laquelle le minimalisme substantialiste et le minimalisme subsémiotique ne sont ni plus ni moins qu\'un minimalisme irrationnel synthétique.
  • Néanmoins, il s\'approprie la démystification synthétique du comparatisme et la forme cartésienne du comparatisme est, de ce fait, déterminée par une intuition rationnelle de l\'esthétique transcendentale.';
  • $keywordsHighlight = new keywordsHighlight();
  • $keywords = 'Montague "en effet" comparatisme "C\'est dans une optique"';
  • echo "Les mots clés sont: <strong>$keywords</strong><br /><br />";
  • echo $keywordsHighlight->textHighlight($texte, $keywords);
  • ?>
<?php

function get_microtime(){

	list($tps_usec, $tps_sec) = explode(" ",microtime());
	return ((float)$tps_usec + (float)$tps_sec);

}

$tps_start = get_microtime();

class keywordsHighlight {

	function __construct(){
	
		// Code HTML à placer autour des mots-clés trouvés ("%s" sera remplacé par le mot-clé)
		$this->format = '<strong>%s</strong>';
	
	}
	
	// Fonction de simplification d'une chaine de caractères : elle la met en miniscule et retire tous les accents
	function simple($str){
		
		$str = trim($str);
		$str = strtolower($str);
		$str = strtr($str, "àáâãäåòóôõöøèéêëçìíîïùúûüÿñ", "aaaaaaooooooeeeeciiiiuuuuyn");
		$str = preg_replace("`[^a-z0-9'-]*`", "", $str);
		
		return $str;

	}
	
	function compare($i_rank, $i_keywords, $i_words){

		$min = min($this->words['len'][$i_words], $this->keywords['len'][$i_rank][$i_keywords]);
		$max = max($this->words['len'][$i_words], $this->keywords['len'][$i_rank][$i_keywords]);
		
		// Si le rapport entre les nombres de lettre est trop peu élevé, on passe au mot d'après
		if($min / $max >= $this->percent){
		
			if($this->percent == 1)
			
				$test = ($this->words['simple'][$i_words] === $this->keywords['simple'][$i_rank][$i_keywords]);
			
			else
			
				$test = (1 - levenshtein($this->words['simple'][$i_words], $this->keywords['simple'][$i_rank][$i_keywords]) / $max >= $this->percent);
		
		}
		
		return $test;
	
	}
	
	function keywordsInitialisation($rank, $i_keywords){
	
		$this->keywords['simple'][$rank][$i_keywords] = $this->simple($this->keywords['value'][$rank][$i_keywords]);
		$this->keywords['len'][$rank][$i_keywords] = strlen($this->keywords['value'][$rank][$i_keywords]);
	
	}
	
	function highlight($i_words, $i_words_end = false){
		
		// On surligne un mot tout seul
		if(!$i_words_end)
			$this->words['value'][$i_words] = sprintf($this->format, $this->words['value'][$i_words]);
		
		// Ou une phrase entiere du mots $i_words au mot $i_words_end
		else{
		
			$this->words['value'][$i_words] = str_replace(strstr($this->format, '%s'), '',$this->format).$this->words['value'][$i_words];
			$this->words['value'][$i_words_end] = $this->words['value'][$i_words_end].str_replace('%s', '', strstr($this->format, '%s'));
		
		}
	
	}

	/* 

	keywordsHighlight ($text, $keywordsStr, $percent = .8)
		
		$text : Texte dans lequel on surligne les mots clés
		$keywordsStr : Liste des mots clés à surligner séparés par des espaces
		$percent : Pourcentage de ressemblance entre les mots du texte et les mots clés à surligner (une fois en minuscule et les accents rétirés)
			Par défaut: 0.8 => correspond a peu pres à:
				- aucune lettre de différence pour des mots jusqu'à 4 lettres
				- une lettre de différence pour les mots de plus de 5 lettres
				- deux lettres de différence pour les mots de plus de 12 lettres
			Si ce pourcentage est égal à 1, la fonction levenshtein ne sera pas utilisé. (Après quelques tests, la fonction levenshtein n'a pratiquement aucune incidence sur la rapidité du script)
		
		return: Le texte avec les mots clés surlignés

	*/

	function textHighlight($text, $keywordsStr, $percent = .8) {
	
		$this->percent = $percent;
	
		$text = preg_replace("`[\s]+`", " ", $text); //Supprime les doubles espaces
		$this->words['value'] = explode(' ', $text);
		
		// Récuperation des phrases-clées
		preg_match_all('`"([^"]+)"`', $keywordsStr, $keywordsSentences);
		$keywordsSentences = $keywordsSentences[1];
		
		// Récupération des mots-clés
		$keywordsStr = str_replace($keywordsSentences, "", $keywordsStr); // Retire les phrases clées de la liste de mots clés
		$keywordsStr = str_replace('"', '', $keywordsStr); // Supprimer les doubles quotes
		$keywordsStr = preg_replace("`[\s]+`", " ", $keywordsStr);
		
		// Place les mots clés dans le tableau $keywords au rank 0
		$this->keywords['value'][0] = explode(' ', trim($keywordsStr));
		
		// Place les phrases clées dans le tableau $keywords au rank $i_rank
		for($i_rank=1; $i_rank<=count($keywordsSentences); $i_rank++){
			
			// Place les mots clés d'une phrase clée $i_rank dans le tableau $keywords['value'][$i_rank]
			$this->keywords['value'][$i_rank] = explode(' ', trim($keywordsSentences[$i_rank-1]));
			
			// initialisation des infos pour chaque keywords de la phrase clée $i_rank
			$keysentences_count[$i_rank] = count($this->keywords['value'][$i_rank]);
			for($i_keywords=0; $i_keywords<$keysentences_count[$i_rank]; $i_keywords++)
				$this->keywordsInitialisation($i_rank, $i_keywords);
		
		}

		$words_count = count($this->words['value']);
		$rank_count = count($this->keywords['value']);
		$keywords_count = count($this->keywords['value'][0]);
		
		for($i_words=0; $i_words<$words_count; $i_words++){
			
			$this->words['simple'][$i_words] = $this->simple($this->words['value'][$i_words]);
			$this->words['len'][$i_words] = strlen($this->words['simple'][$i_words]);
			
			for($i_rank=0; $i_rank<$rank_count; $i_rank++){
			
				// On explore les mots-clé seuls
				if($i_rank == 0){
				
					for($i_keywords=0; $i_keywords<$keywords_count; $i_keywords++){
					
						// On initialise les mots clés pour la premiere fois
						if($i_words == 0){
						
							$this->keywordsInitialisation(0, $i_keywords);
						
						}
					
						if($this->compare(0, $i_keywords, $i_words)) 
							$this->highlight($i_words);
					
					}
				
				}
				// On explore les phrases-clées
				else{

					// Si le mot précédent pouvait etre contenu dans une phrase clées, on regarde si celui-ci peut correspondre à la suite de la phrase
					if(isset($keysentences_possible[$i_rank])){
					
						if($this->compare($i_rank, $keysentences_possible[$i_rank], $i_words)){
							
							// Si tous les mots ont correspondu à une phrase clée, on surligne
							if($keysentences_possible[$i_rank]+1 == $keysentences_count[$i_rank])
								$this->highlight($i_words - $keysentences_possible[$i_rank], $i_words);
							// Si ce mot correspond a la suite de la phrase clée, on incrémente
							else
								$keysentences_possible[$i_rank] += 1;
						
						}
						// Si le mot ne correspond pas au mot suivant de la phrase clée, on réinitialise la variable
						else 
							unset($keysentences_possible[$i_rank]);
					
					}
					else{
						
						// Si ce mot est le premier d'une phrase clée
						if($this->compare($i_rank, 0, $i_words))
							$keysentences_possible[$i_rank] = 1;
					
					}
				
				}
				
			}
		
		}
		//print_r($this->keywords);
		return implode(' ', $this->words['value']);
	
	}

}


// Exemple :

$texte = 'Quelle pertinence pour le comparatisme subsémiotique ? 

 Prémisces du comparatisme subsémiotique.

 On ne saurait assimiler, comme le fait Descartes, le monogénisme métaphysique à un amoralisme, cependant, il conteste la relation entre monogénisme et herméneutique.
 Comme il est difficile d\'affirmer qu\'il décortique la réalité subsémiotique du comparatisme, il est manifeste qu\'il identifie l\'origine du comparatisme.
 Par le même raisonnement, on ne saurait écarter de notre réflexion la critique de l\'antipodisme irrationnel par Kant et si d\'une part on accepte l\'hypothèse qu\'il donne alors une signification particulière à une science spéculative comme concept empirique de la connaissance alors même qu\'il désire l\'opposer alors à son cadre social, et si d\'autre part il réfute l\'analyse métaphysique sous un angle rationnel, cela signifie donc qu\'il réfute la réalité rationnelle du comparatisme.
 On pourrait, pour conclure, mettre en doute Montague dans son analyse idéationnelle du kantisme. C\'est d\'ailleurs pour cela qu\'on ne peut contester la critique de la science générative par Descartes, et premièrement Spinoza donne une signification particulière à l\'origine du comparatisme, deuxièmement il en décortique la réalité primitive sous un angle transcendental. De cela, il découle qu\'il s\'approprie l\'origine du comparatisme.
 Cependant, il examine l\'origine du comparatisme, et le positivisme phénoménologique ou le positivisme ne suffisent pas à expliquer le positivisme spéculatif en tant qu\'objet transcendental de la connaissance.
 Premièrement il particularise alors la conception déductive du comparatisme, deuxièmement il réfute l\'origine phénoménologique dans une perspective nietzschéenne contrastée. Il en découle qu\'il s\'approprie l\'expression originelle du comparatisme.
 C\'est dans une optique qu\'il s\'approprie l\'expression universelle du comparatisme afin de prendre en considération le positivisme rationnel.

 Cependant, il identifie la relation entre maximalisme et géométrie. On ne saurait pourtant reprocher à Bergson son monogénisme transcendental, pourtant, il est indubitable qu\'il envisage l\'origine du comparatisme. Notons néansmoins qu\'il en rejette la démystification empirique en regard du monogénisme.
 Ainsi, on ne saurait assimiler, comme le fait Spinoza, le réalisme à un monogénisme minimaliste et le fait qu\'il conteste l\'origine du comparatisme signifie qu\'il en donne une signification selon la réalité rationnelle comme objet déductif de la connaissance.
 Le comparatisme permet, finalement, de s\'interroger sur un monogénisme de l\'Homme.

 Pourtant, il est indubitable qu\'il donne une signification particulière à l\'analyse subsémiotique du comparatisme. Il convient de souligner qu\'il en caractérise l\'expression empirique en tant qu\'objet rationnel de la connaissance. D\'une part Leibniz donne pourtant une signification particulière à l\'analyse rationnelle du comparatisme, d\'autre part il en examine l\'analyse existentielle en tant que concept transcendental de la connaissance.
 On peut reprocher en effet à Montague son réalisme substantialiste. Mais il ne faut pas oublier pour autant qu\'il rejette l\'analyse transcendentale du comparatisme.
 Néanmoins, il conteste la démystification subsémiotique du comparatisme, et le monogénisme rationnel ou le réalisme post-initiatique ne suffisent pas à expliquer le monogénisme minimaliste en tant que concept existentiel de la connaissance.
 On ne peut considérer qu\'il systématise alors l\'origine du comparatisme qu\'en admettant qu\'il en spécifie la réalité substantialiste en tant qu\'objet irrationnel de la connaissance alors qu\'il prétend l\'opposer à son cadre social et politique.
 C\'est dans une optique identique qu\'il spécifie la relation entre finalisme et raison afin de la resituer dans sa dimension sociale et politique.

 C\'est avec une argumentation identique qu\'on ne saurait assimiler, comme le fait Rousseau, le connexionisme transcendental à un connexionisme rationnel. Nous savons que Kierkegaard spécifie pourtant l\'origine du comparatisme. Or il en systématise la destructuration synthétique dans sa conceptualisation, c\'est pourquoi il rejette l\'analyse synthétique du comparatisme pour l\'opposer à son cadre politique.
 Il faut cependant contraster ce raisonnement : s\'il se dresse contre la démystification substantialiste du comparatisme, c\'est également parce qu\'il en identifie la réalité originelle en regard du connexionisme ; le comparatisme ne peut, par ce biais, être fondé que sur l\'idée du primitivisme sémiotique.
 Nous savons qu\'il envisage en effet la démystification synthétique du comparatisme. Or il en caractérise l\'aspect spéculatif en tant qu\'objet spéculatif de la connaissance, c\'est pourquoi il rejette la démystification métaphysique du comparatisme pour l\'opposer à son contexte politique et intellectuel.
 Pour cela, on peut reprocher à Bergson son primitivisme idéationnel dans le but de le resituer dans toute sa dimension politique et sociale.

 Contrastons cependant cette affirmation : s\'il décortique la conception post-initiatique du comparatisme, c\'est également parce qu\'il en particularise la destructuration rationnelle comme concept subsémiotique de la connaissance, et le paradoxe du minimalisme illustre l\'idée selon laquelle le minimalisme et le minimalisme ne sont ni plus ni moins qu\'une esthétique irrationnelle synthétique.
 On ne saurait alors ignorer l\'influence de Spinoza sur l\'esthétique transcendentale, et pourtant, il est indubitable que Spinoza conteste la démystification circonstancielle du comparatisme. Il convient de souligner qu\'il réfute l\'aspect déductif dans une perspective montagovienne contrastée.
 Le paradoxe du minimalisme illustre, de ce fait, l\'idée selon laquelle le minimalisme substantialiste et le minimalisme subsémiotique ne sont ni plus ni moins qu\'un minimalisme irrationnel synthétique.
 Néanmoins, il s\'approprie la démystification synthétique du comparatisme et la forme cartésienne du comparatisme est, de ce fait, déterminée par une intuition rationnelle de l\'esthétique transcendentale.';
 
$keywordsHighlight = new keywordsHighlight();
$keywords = 'Montague "en effet" comparatisme "C\'est dans une optique"';

echo "Les mots clés sont: <strong>$keywords</strong><br /><br />";

echo $keywordsHighlight->textHighlight($texte, $keywords);

?>



 Historique

15 octobre 2008 21:20:48 :
Petites optimisations du code sur les conseils de codefalse et defis91
16 octobre 2008 23:40:47 :
Grosse modification du code pour prendre en compte les phrases-clées.

 Sources de la même categorie

Source avec Zip GÉNÉRER UN MOT DE PASS ALÉATOIRE par narkos2
UNICODE TO HTML ENTITIES par CrazyShooter
Source avec Zip DÉBUTANT : FONCTION POUR TRANSFORMER UN TEMPS EN SECONDES EN... par MonkeyIsBack
FONCTION QUI GÉNÈRE UN CODE GRÂCE À L'ORTOGRAPHE ET LA PRONO... par foofymany
Source avec Zip TRADUCTION DE FICHIERS DE LANGUE AVEC GOOGLE GTRANSLATE par madislak

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture XML DE DESCRIPTION DE DOSSIERS NAUTILUS par coucou747
Source avec Zip PEINTURE SUR SOURCES (UN TRUC QUI FAIT DE LA COLORATION SYNT... par coucou747
Source avec Zip [EXPREG] COLORATION SYNTHAXIQUE (X)HTML par DiGhan

Commentaires et avis

Commentaire de codefalse le 14/10/2008 09:47:08 administrateur CS

Plop :p
Personnellement j'aurai plus vu un tableau pour les mots plutôt que des mots séparés par espaces.

Comment est-ce que tu fait si je veux souligner "bonjour les amis" et que dans ma phrase, j'ai aussi, ailleurs "amis" ?
_ Le tableau résoudrait ce problème.

Tu devrais laisser le choix à l'utilisateur pour la méthode à utiliser lors de la mise en avant des mots trouvés. Strong, c'est bien, mais si le type dans son site il préfère les span parce qu'il a un style spécifique pour, ou tout autre raison... enfin bref.

Tu peux rajouter un setter, et jouer avec sprintf pour mettre le mot trouvé.

TRUE et FALSE sont des constantes.
true et false sont des structures de langage.
-> Lorsque tu utilise TRUE, le compilateur PHP va chercher l'existence de la constante TRUE, ne la trouvant pas, il va l'assimiler à true. Tu perd un peu de temps de traitement lorsque tu utilise ce style d'affichage. (Bon, c'est rien et c'est négligeable, mais c'est toujours bon de le savoir ! :))

for($i_words=0; $i_words<count($words['value']); $i_words++)
mettre count directement dans le for pose aussi un problème de performance. A chaque nouvelle itération de for, la fonction count sera appelée. Afin d'éviter des calculs superflus, tu devrait procéder ainsi :

$iWordsCount = count ($words['value']);
for ($i_words = 0; $i_words < $iWordsCount; $i_words++)

Enfin (promis j'arrête après ;)), tu commente ton code, c'est bien, mais essaye de suivre une structure (phpdoc, javadoc ou ce que tu veux), ca pourrait te sauver du temps si tu lance un jour doxygen sur ton code par exemple ;)

Commentaire de defis91 le 14/10/2008 16:40:46

Sur mon interpréteur PHP, if ($test) génère autant d'erreurs qu'il y a de mots dans le texte.

mettre : if(isset($test))

Sinon ce code est facile à lire et utile.
Le petit cours d'optimisation de "codefalse" est aussi très intéressant.
Merci aux deux
Dom Efis

Commentaire de maxroucool le 15/10/2008 21:24:06

Merci à vous deux pour vos commentaires!

@codefalse: j'ai mis en oeuvre tous tes conseils d'optimisation, mais j'ai pas compris ce que tu entendais par:
"Personnellement j'aurai plus vu un tableau pour les mots plutôt que des mots séparés par espaces."
et
"essaye de suivre une structure (phpdoc, javadoc ou ce que tu veux)"!

@defis91: j'ai modifier la ligne dont tu parles, mais je n'avais jamais eu ce probleme chez moi!

+++

Commentaire de codefalse le 16/10/2008 00:07:02 administrateur CS

je te parlais d'un array c'est pour les mots à filtrer imagine je veux colorer "bonjour les amis", avec ta méthode, ca va me colorer
"bonjour", "les", "amis" dans mon texte. Mais je veux pas qu'il me souligne "les" qui soit ailleur, juste le "les" AVEC "bonjour" avant et "amis" apres. Tu vois ?

C'est pour ca, si tu fait avec un tableau, tu peux rechercher par entrée du tableau, donc array ('bonjour les amis', 'un message avec espaces') ne me cherchera que deux éléments, pas 7 ! Tu vois mieux ?

Les commentaires phpdoc (ou javadoc) c'est indiquer des infos sur tes classes genre @class nom de la class, @param type valeur : decription, @return type, etc.
Ca te structure ton code, et ca te donne une contrainte à respecter pour les commentaires, et comme cela tu pourras par la suite parser ton code (le logiciel doxyygen le fait) afin d'indiquer aux monde (:p), un max d'infos sur chaque fonctions (afin de savoir quel parametre passer et pourquoi, ce que ca retourne, etc) et une explication sur tes classes.

Recherche sur google pour javadoc/phpdoc tu verra comment c'est fait, peut-être tu comprendras mieux. Ou regarde mes sources (les plus récentes préférentiellements)

Commentaire de kankrelune le 16/10/2008 02:47:49

t'as oublié d'enlever un truc... .. .

unset($test);

pas grand chose à rajouter dans tes blocs de comparaison utilise plutôt la comparaison typé vu que tu connais le type de tes variables... .. .

true == 1 mais true !== 1

tu grapillera en perf et surtout en rigueur... sauf cas particulier utilise plutôt les structures de langage quand tu peux...

if($x == 0) => if(empty($x))

par contre pourquoi tu t'embête autant...

if($percent == 1)
    if($words['simple'][$i_words] == $keywords['simple'][$i_keywords])
        $test = TRUE;
    else
        $test = FALSE;
else
    if(1 - levenshtein($words['simple'][$i_words]... etc...
        $test = TRUE;
    else
        $test = FALSE;


==>

if($percent === 1)
    $test = ($words['simple'][$i_words] === $keywords['simple'][$i_keywords]);
        else
            $test = (1 - levenshtein($words['simple'][$i_words],... etc...

sinon bon code mais une fonction suffit à mon avis inutile d'en faire une classe... .. .

@ tchaOo°

Commentaire de kankrelune le 16/10/2008 02:52:29

je rectifie j'avais pas fait gaffe pour le unset($test);

mais bon utiliser un unset est inutile surtout que ta variable est même pas instanciée à ta première itération autant le remplacer par

$test = false;

surtout que rien ne justifie de libérer cette variable, ça serait un objet ça serait utile car gain de place en mémoire mais à la réinitialiser à false suffit... unset c'est bien en abuser ça craint... .. . ;o)

@ tchaOo°

Commentaire de maxroucool le 16/10/2008 23:47:28

OK, donc je viens de la modifier fortement pour prendre en compte les phrases clées, comme suggéré par codefalse (Par contre j'ai tjs pas compris comment tu voulais que je fasse, donc j'ai fais à ma manière!).

Le code est maintenant un peu plus compliqué à comprendre qu'avant, et surement moins optimisé! Dc si vous remarquez des trucs à changer dites le moi!


+++

PS: si vous avez du mal a comprendre la structure du tableau $keywords (et notamment l'arrivée du $i_rank), faites un rapide print_r($this->keywords); !

Commentaire de MangaII le 20/10/2008 10:01:44

Ca ma l'air pas mal du tout !
J'ai l'impression que c'est quand même un peu compliqué pour l'effet recherché ... mais bon !

Je suis confronté à un cas un peu plus compliqué, c'est de colorer des mots clés, dans un texte HTML !
Le soucis c'est qu'il faut garder les balises HTML, détecter les mots clés, rajouter des balises autour, le tout sans perturber le contenu ...

Une idée pour adapter cette source ???

Nico

Commentaire de maxroucool le 20/10/2008 12:40:03

Slt MangaII,

si dans la fonction simple(), tu rajoutes en premier la fonction strip_tags():
$str = strip_tags($str);

Je n'ai pas testé, mais ca doit pouvoir le faire.
+++

Commentaire de PDAsurf le 29/10/2008 23:50:33

Le code c'est très intéressant, mais je trouve deux soucis :
- Si on met dans les keywords quelque chose comme « origine » on ne trouve pas dans le texte, même s´il existe. Mais toutes les occurrences sont de la forme « l'origine » et, comme il ni a pas de espace la fonction qui découpe les paroles prend « l'origine » comme un mot. Peut être il faut d'abord convertir « ' » dans espace pour le texte (mais c'est une norme particulier pour quelques langues, comme le français mais pas pour des autres, comme l'espagnol).

- Je ne suis pas codeur, mais j'ais tracée la fonction et j'ais vis que la comparaison ce fait avec chaque parole du texte contre chaque keyword. Donc s'il y a plusieurs fois un keyword on (re)trouve et compare chaque fois pour y souligner de forme individuelle. Je crois que ce serait plus efficace comparer chaque keyword dans le texte et à chaque occurrence, surligner d'un coup « tous » les occurrences qui existent dans le texte, puis invalider le keyword et continuer avec le keyword suivant.

Pour y mesurer la fonction j'ais ajoutée un timer, $tps_end = get_microtime();, au final du code

<code>
echo $keywordsHighlight->textHighlight($texte, $keywords);
$tps_end = get_microtime();

$interval= ($tps_end - $tps_start)* 1000 ;
echo "Temp : ($tps_end - $tps_start) en segundos";
echo "</br>";

echo " Temp : $interval en ms";
</code>

Et mois aussi je trouve que ce serait préférable de mettre les keywords dans un tableau (array), ou bien d'accepter un tableau comme paramètre et détecter si la liste de keyword arrive comme chaine, et il faut la découper, o déjà comme tableau.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

coloration des mots clé [ par Padkartiai ] Bonjour,Etudiant en BTS IG, je dois effectuer un rapport sur un site que j'ai réalisé en stage. Le pb est que je ne sais pas comment faire pour import fonction highlight_string [ par damish ] salut!je vien il y a quelques heures de finir mon site tout fonctione parfaitement en local mais lorsque je l'est publier il m'ecris une erreur a la p coloration scrollbar frames [ par bastien71 ] Bonjour,je voudrais savoir s'il est possible de colorer la barre de d&#233;filement d'une frame, et si oui, comment faire. J'ai essay&#233; ca :scroll Probleme : Coloration syntaxique Dreamweaver [ par skab ] Bonjour jj'ai un petit souci fort d&#233;sagr&#233;able, la coloration syntaxique a disparu comme ca sans rien ds dreamweaver, j'ai beau reinstaller Principe de la coloration syntaxique [ par Teclis01 ] Voilà en fait j'aurais aimé savoir comment on fait de la coloration syntaxique ...Le fait est que a première vu il faut faire une etude de cas et fair Moteur de recherche avec plusieurs mots clés [ par ptiniko ] Bonjour, J'ai un problème concernant une recherche en PHP avec plusieurs mots clés.function search_friends($keywords, $debut, $fin) =&gt; $keywords es Problèmes de REGEX [ par bobino75 ] Bonjour à vous, Je commence à travailler avec les REGEX et je me retrouve avec quelques problèmes. Je fais une recherche dans une base de données av


Nos sponsors


Sondage...

Comparez les prix


HTC Magic

Entre 429€ et 429€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales