Cherche algorithme de compression pour URL
Cherche algorithme de compression pour URL
Je cherche un algorithme de compression pour réduire la taille des URL. J'aimerais inclure un tel algorithme dans un script de redirection à la manière de http://www.tinyurl.com/ .
Je pensais utiliser un encodage Huffman sauf qu'il n'est pas du tout évident que je puisse obtenir un taux de compression intéressant pour le cas bien particulier des adresses Web. Il faut absolument que la chaîne compressé s'exprime en chiffres et en lettres, sans caractères spéciaux.
Aucun résultats concluants avec les recherches Google « lossless text compression », « algorithm for shortening urls », etc.
Je pensais utiliser un encodage Huffman sauf qu'il n'est pas du tout évident que je puisse obtenir un taux de compression intéressant pour le cas bien particulier des adresses Web. Il faut absolument que la chaîne compressé s'exprime en chiffres et en lettres, sans caractères spéciaux.
Aucun résultats concluants avec les recherches Google « lossless text compression », « algorithm for shortening urls », etc.
Je vois plusieurs solutions
- une clé de hashing (md5) de l'URL -- mais ça te fait toujours 32 caractères c'est peut-être encore trop long?
- quelque chose basé sur un timestamp du moment où a été faite la requête ... que tu peux raccourcir en passant en hexadécimal, voire en base 36 avec tous les chiffres et toutes les lettres.
Ces deux trucs te donneront une chaine de chiffres et lettres de longueur relativement fixe. Dans les deux cas tu dois stocker quelque part la correspondance entre la chaine générée et l'URL (dans une base de données ou un fichier) mais je pense que même chez tinyurl c'est comme ça qu'ils font.
- une clé de hashing (md5) de l'URL -- mais ça te fait toujours 32 caractères c'est peut-être encore trop long?
- quelque chose basé sur un timestamp du moment où a été faite la requête ... que tu peux raccourcir en passant en hexadécimal, voire en base 36 avec tous les chiffres et toutes les lettres.
Ces deux trucs te donneront une chaine de chiffres et lettres de longueur relativement fixe. Dans les deux cas tu dois stocker quelque part la correspondance entre la chaine générée et l'URL (dans une base de données ou un fichier) mais je pense que même chez tinyurl c'est comme ça qu'ils font.
Merci, mais je pensais plutôt à un arbre binaire du genre :
Je ne veux pas créer une banque de liens. Je veux réduire la taille du URL. Le URL comprimé doit contenir la totalité de l'information.
Code : Tout sélectionner
/\
http://www. \
/\
.com/ \
/\
.html \
/\
[a-Z] ...
exemple : http://www.google.com/
http://www. = 00
g = 1110001
o = 1110001
o = 1110111
g = 1110001
l = 1111011
e = 1110101
.com/ = 01
-> 00.1110001.1110001.1110001.1110001.111101.111101.01
-> 00111000.11110001.11100011.110001111.10111110.101
-> S.R.Q.G.D.d
-> SRQGDd
Tu fais beaucoup trop d'hypothèses sur l'aspect de ton URL. Qu'est-ce que tu fais si
- C'est une URL pour un autre protocole (ftp://, irc://, mailto:, ...)
- C'est un domaine de pays. Il y a beaucoup plus de 100 extensions si tu comptes tous les pays (.fr, .be, .ch, .uk (sans parler des .co.uk, .ac.be, ...) + .com, .info, .net, .biz, .name, ...)
- C'est dans un sous-répertoire (je te fais remarquer que dans ton exemple, seul les partie "http://www" et ".com" sont compressées, le gain se réduit très vite)
- Ca ne commence pas par www mais par autre chose ... encore une fois plus de 100 possibilités (membres.lycos.fr, geckozone.tuxfamily.org, fr.openoffice.org, users.pandora.be, ...)
- C'est un langage de script que tu ne connais pas (.cgi, .asp, .jsp, .php[3-4-5], .cfm, .dll, ...)
- Il faut passer des variables (un post dans un forum)
- Il y a une cible dans la page (#target)
- ...
Absolument pas. Je connais exactement le domaine d'application puisque c'est moi qui l'ai défini.Tu fais beaucoup trop d'hypothèses sur l'aspect de ton URL
C'est moi qui décide. Je n'ai jamais eu l'intention d'utiliser un autre protocole que le HTTP.C'est une URL pour un autre protocole (ftp://, irc://, mailto:, ...)
Ce n'est pas l'usage que j'en fais.Il faut passer des variables (un post dans un forum)
Ils sont encodé de la même façon que « google » dans mon exemple. L'idée est de bénéficier d'un gain important par la réduction des termes les plus fréquents..cgi, .asp, .jsp, .php, .com, .info, .net, .biz, .name, #target, ...
Il est encore plus facile de ne rien faire. Mon objectif n'est pas la facilité. Je cherche un algorithme de compression sans perte qui puisse s'appliquer à un URL. Merci quand même pour les suggestions.il est beaucoup plus simple de récupérer l'URL via un tableau associatif
Compression normale ?
et les formats de compression comme gzip accessibles via php, y as-tu pensé ?
« La clarté est la politesse des professeurs. » (E. Gerurez)
... Posons de bonnes questions !
... Posons de bonnes questions !
Ce n'est qu'une impression, mais je pense plutôt que tiny utilise un système d'id. http://www.tinyurl.com/nom_de_l_id ! Je ne pense pas qu'il y est la moindre compression dans ces urls, mais bon .
AllanTK
AllanTK
Assurément, TinyUrl utilise un banque de liens indexée. C'était seulement un exemple pour faire comprendre l'allure de ce je cherche.
Enfin, merci pour toutes vos contributions. J'ai trouvé une piste, le code source de http://entries.the5k.org/367/index.html
Enfin, merci pour toutes vos contributions. J'ai trouvé une piste, le code source de http://entries.the5k.org/367/index.html
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité