Catégories
Talend

Générateur de permalien en Java

La méthode permalinkBuilder présentée ci-dessous permet de transformer une chaîne de caractère en une url valide appelée permalien.

La signature est la suivante :


/**	
 * 	Cette méthode permet de construire une url valide à partir du libellé passé en paramètre.
 *	Le libellé subit plusieurs transformations avant d'être retourné par la méthode :
 *
 *	- remplacement des mots identifiés dans le paramètre wordsToReplace (case sentisitif)
 *	- suppression des mots identifiés dans le paramètre wordsToRemove	 	 	
 *	- suppression des caractères accentués et mise en minuscule.	 
 *	- suppression des unités de quantité au format décimal
 *	- suppression des caractères non alphanumérics
 *	- chaque mot est séparé par un -
 
 *	@param lib		: libellé à convertir
 *	@param wordsToRemove  	: mots à supprimés séparés par des pipes (ex : le|la|les|de|du|des|à|aux )
 *	@param wordsToReplace   : mot à remplacer séparés par des ; (ex: cinéma:ciné;%:pourcentage)
 */
public static String permalinkBuilder( String lib, String wordsToRemove, String wordsToReplace )

/*------------------------------------*/
/* Test unitaire de permalinkBuilder  */
/*------------------------------------*/

ArrayList libs = new ArrayList();

listLibWeb.add("Tout sur... l'echalote");
listLibWeb.add("Pljeskavica (hamburger des Balkans)");
listLibWeb.add("Magret de canard du Sud-Ouest (pièce de 300-400g)");
listLibWeb.add("8 palets de légumes courgettes/poivrons-brebis");
listLibWeb.add("Le P'tit Tendre");
listLibWeb.add("Portions de filets (4-6 p)");
listLibWeb.add("St Jacques, 1,2 à 1,7 kg");
			  
String wordsToRemove  = "le|la|les|de|du|des|à|aux";
String wordsToReplace = "P'tit:Ptit;(4-6 p):4 à 6 personnes";

/* Parcourir l'ensemble des libellés */
for (String s : libs )
{
   /* Convertir en permaliens */
   String permalink = permalinkBuilder(s, wordsToRemove, wordsToReplace);
   System.out.println(permalink);
}

Le résultat obtenu :

Tout sur… l’echalote
tout-sur-echalote

Pljeskavica (hamburger des Balkans)
pljeskavica-hamburger-balkans

Magret de canard du Sud-Ouest (pièce de 300-400g)
magret-canard-sud-ouest-piece-300-400g

8 palets de légumes courgettes/poivrons-brebis
8-palets-legumes-courgettes-poivrons-brebis

Le P’tit Tendre
ptit-tendre

Portions de filets (4-6 p)
portions-filets-4-6-personnes

St Jacques, 1,2 à 1,7 kg
st-jacques

et pour finir l’implémentation :


import java.text.Normalizer;
import java.util.*;
	
/**	
 * 	Cette méthode permet de construire une url valide à partir du libellé passé en paramètre.
 *	Le libellé subit plusieurs transformations avant d'être retourné par la méthode :
 *
 *		- remplacement des mots identifiés dans le paramètre wordsToReplace (case sentisitif)
 *		- suppression des mots identifiés dans le paramètre wordsToRemove	 	 	
 *		- suppression des caractères accentués et mise en minuscule.	 
 *		- suppression des unités de quantité au format décimal
 *		- suppression des caractères non alphanumérics
 *		- chaque mot est séparé par un -
 
 *	@param lib				: libellé à convertir
 *	@param wordsToRemove  	: mots à supprimés séparés par des pipes (ex : le|la|les|de|du|des|à|aux )
 *	@param wordsToReplace   : mot à remplacer séparés par des ; (ex: cinéma:ciné;%:pourcentage)
 */
public static String permalinkBuilder( String lib, String wordsToRemove, String wordsToReplace ) 
{	
	String permalink = "";

	Dictionary dicWordsToReplace = new Hashtable();
	String[] replaceTab = wordsToReplace.split(";");

	/* Conserver les chaines à remplacer dans un dictionnaire */
	for (int i = 0; i < replaceTab.length; ++i ) 
	{ 
		if( replaceTab[i].split(":").length > 1 )
		{
			dicWordsToReplace.put( replaceTab[i].split(":")[0], replaceTab[i].split(":")[1]);
		}			  	
	}

	permalink = lib;

	if( permalink.length() <= 0 )
		return "";

	/* remplacer les mots identifiés dans le paramètre wordsToReplace (case sentisitif) */
	for ( Enumeration e = dicWordsToReplace.keys(); e.hasMoreElements(); )
	{
		Object elt = e.nextElement();
		String regex = elt.toString();
		String replacement = dicWordsToReplace.get(elt).toString();
		permalink = permalink.replaceAll(regex, replacement);
	}	

	permalink = permalink.toLowerCase();
	/* Suppression des déterminants spécifiés dans le fichier ini (ex : le,la,les etc...) */
	permalink = permalink.replaceAll("\\b(" + wordsToRemove + ")\\b", " ");
	/* Supprime les accents */
	permalink = Normalizer.normalize(permalink, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "");
	/* Concaténation des entiers à leur unité de quantité correspondante */
	permalink = permalink.replaceAll("(\\d+)\\s+(kg|g|mg|l|dl|ml)\\b", "$1$2");
	/* Supprimer les unités de quantité au format décimal */
	permalink = permalink.replaceAll("\\d+,+\\d+(\\s*(kg|g|mg|l|dl|ml))?", "");
	/* Supprimer les caractères non alphanuméric */
	permalink = permalink.replaceAll("\\W", " ");
	/* Supprimer les chaines alpha d'un seul caractère */
	permalink = permalink.replaceAll("\\s+\\D?\\s+", " ");
	/* Supprimer les doubles espaces */
	permalink = permalink.replaceAll("\\s+", " ");			  	
	/* Remplacer les espaces par un - */
	permalink = permalink.replaceAll("\\s", "-");
	/* Supprimer les - en début et fin de chaine */
	permalink = permalink.replaceAll("(^-)|(-$)", "");

	return permalink;
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *