Vieux Forum

Aller au contenu | Aller au menu | Aller à la recherche

Mot clé - Codeur

Fil des billets

jeudi 23 mars 2006

probleme passage de variable en Rebgui

probleme passage de variable en Rebgui

Liste des forums > Forum View

seb | 15:08 23/03/2006
bonjour,
j ai un probleme en Rebgui
je recupere des valeurs que je voudrais faire afficher dans un feuillet en onglet celle-ci ne s affiche pas alors que si j utilise des constante cela fonction
quelqu un peut il m aider
voici le code qui fonctionne
 rebol []
  arguments: system/script/args
  
if not value? 'widgets [do %parametre/RebGUI-036/rebgui.r]
 
; Déclaration de la fenêtre principale et de tout les widgets quelle contient
display "Widget Tour" [
	return 
	tab-panel 135x100 #WH data [
		
		"AFFAIRE" [
			 tight title-group  #WH data "Renseignement concernant l'affaire"
			 AT 5X12
			bar
			At 10x15
			label "Code"
			At 50x15 
			Naff: Field  80 "11111"
			at 10x25
			label "Nom du client"
			at 50x25
			NomCl: Field 80 "Durand" ]]]
			
do-events
	
 ;Quitte le programme
quit

voici le code qui me pose un probleme
  rebol []
  arguments: system/script/args
  
if not value? 'widgets [do %parametre/RebGUI-036/rebgui.r]
 MonNom: "Dupont"
 Moncode: "1111"
; Déclaration de la fenêtre principale et de tout les widgets quelle contient
display "Widget Tour" [
	return 
	tab-panel 135x100 #WH data [
		
		"AFFAIRE" [
			 tight title-group  #WH data "Renseignement concernant l'affaire"
			 AT 5X12
			bar
			At 10x15
			label "Code"
			At 50x15 
			Naff: Field  80 Moncode
			at 10x25
			label "Nom du client"
			at 50x25
			NomCl: Field 80 MonNom ]]]
			
do-events
	
 ;Quitte le programme
quit

Une idée
merci d'avance

mardi 21 mars 2006

recherche script

recherche script

Liste des forums > Forum View

Philippe | 11:58 21/03/2006
Bonjour à tous,
Je recherche un script qui avait été utilisé lors du dernier rebolday(2), et aussi au DevCon 2004, permettant de simuler avec View une présentation powerpoint ?
Merci de votre aide,
===Philippe
DideC | 12:45 21/03/2006
Tu trouvera la version de 2004 dans cette présentation de Scot
http://www.rebol.net/devcon04/pres/scot-pres.zip
Trouvé sur cette page http://www.rebol.net/devcon04/
Je sais plus si il y avait une version améliorée cette année (à part avec cette énorme pendule numérique, guère intégrée à l'ensemble).
DideC
Philippe | 08:48 22/03/2006
Didec,
OK. Merci, c'était bien cela.
===Philippe

jeudi 16 mars 2006

Essai de pdf-maker pour view 1.3

Essai de pdf-maker pour view 1.3

Liste des forums > Forum View

Anonyme | 07:58 16/03/2006
Bonjour,
Je tente d'utiliser pdf-maker avec view-1.3, en utilisant le tutoriel PDF MAKER (partie 1)et je bloque rapidement dès que j'utilise un dimentionnement de page explicite :
write/binary %test-pdf.pdf layout-pdf [
    [ ; PAGE 1
        textbox [ "Coucou" ]
    ]
    [ ; PAGE 2 : page par défaut
 	page size 200 100	
        textbox [ "Coucou" ]
    ]
]

La page 1 affiche bien coucou dans une page format A4. La page 2 mesure bien 20 cm par 10 cm mais n'affiche pas le texte.
Merci de votre aide ...
reboltof | 09:44 17/03/2006
Hum... le problème ne semble pas venir de la version de /View, car je le reproduit avec la 1.2.
Après qq essais, il semble que le fait de spécifier une taille de page empêche l'affichage du texte, mais pas des autres éléments graphiques. Teste ce code avec ou sans spécification de la taille de page:
[ ; PAGE 1
        textbox ["Coucou" ]
    ]
    [ ; PAGE 2 : page par défaut
        page size 300 100	
        apply translation 20 265 [
            line color 0.0.0
            solid box 200.200.200 edge width 0.5 0 0 170 10
            textbox 0 1 170 8 [ 
                center font Helvetica 5 
                "coucou"
            ]
        ]
    ]

Il s'agit donc d'un bug dans le code. Je suggère que tu le transmettes à Gabriele Santilli >, l'auteur du script.
--xtof
Christophe Coussement
A la recherche de doc sur REBOL ? Visitez The REBOL Documentation Project sur http://rebdocproj.net
ldci | 13:50 17/03/2006
Oui Christophe a raison: des bugs existent dans le code de Gabrielle. Il y a quelque temps, j'avais fait des essais. Si tu veux je t'envoie le code.
trech | 01:10 18/03/2006
J'ai un petit peu creusé le pB.
Si on redéfinit la taille de page en 210 297 tout ce passe bien.
Il ne s'agit pas d'un problème de texte. Le problème se produit tout le temps. En agrandissant la hauteur de la page, on se rend compte que les composants (textes ou graphiques) sont présents mais plus bas dans la page.
Le problème est donc un problème d'offset vertical lorsque la page n'est plus au format A4 vertical le format par défaut.
Pour contourner le problème, on doit corriger l'offset de cette manière :
=> si la hauteur de page est différente de 297 alors 
offset vertical = hauteur de page - 297

Ce qui donne pour l'exemple précédent :
    [ ; PAGE 1
        page size 300 100 offset 0 -197	
        textbox ["Coucou" ]
    ]
    [ ; PAGE 2
        page size 300 100 offset 0 -197	
        apply translation 20 265 [
            line color 0.0.0
            solid box 200.200.200 edge width 0.5 0 0 170 10
            textbox 0 1 170 8 [ 
                center font Helvetica 5 
                "coucou"
            ]
        ]
    ]

Ainsi, je vais pouvoir faire mes édition en A0 :)
Je suis intéressé par la liste des tests. Ce serai bien d'établir une liste des bugs connus.
Les tests sont ils des tests réalisés avec l'outil RUN ?
Désolé pour le premier post anonyme.
reboltof | 09:10 21/03/2006
trech a dit :
J'ai un petit peu creusé le pB.

Merci pour ta solution ! Le mieux est de la communiquer à Gabriele...
trech a dit :
Les tests sont ils des tests réalisés avec l'outil RUN ?

Quels tests ?
Christophe Coussement
A la recherche de doc sur REBOL ? Visitez The REBOL Documentation Project sur http://rebdocproj.net
trech | 21:08 21/03/2006
Ok, je transmettrai à Gabriele.
Pour les tests, je parlais du code des essais qu'avait fait ldci :
ldci a dit :
Oui Christophe a raison: des bugs existent dans le code de Gabrielle. Il y a quelque temps, j'avais fait des essais. Si tu veux je t'envoie le code.

jeudi 09 mars 2006

Rebol et l'Open Source

Rebol et l'Open Source



ldci | 23:29 09/03/2006
vu sur le Blog de Carl à propos de Rebol 3.0
So, how is all this going to happen? Well, we hope to get your help with a lot of it. For example, REBOL 3.0 will contain a lot of open source code that could use expert handling when porting to new platforms like OSX or cell phones. What specifically? How about the sound interface? We don't want to spend our expert REBOL time getting that working on OSX; we want an OSX expert to volunteer to make it work well on OSX. That's true for Linux, cellphones, Pocket PC, BSD, etc. And, that applies to the docs as well, which will be wiki-ized to get more of the REBOL community involved in making them a whole lot better.
Bon, des bonnes nouvelles en pesrpective.
Philippe | 09:34 10/03/2006
Hello,
Pour la doc, c'est une bonne chose, cela permettra d'être plus interactif avec RT.
Mais je note qu'aucune date n'est fournie. "new few months", c'est vague.
Si on fait avec Rebol 3.0 comme avec View 1.3, ...
===Philippe

mercredi 01 mars 2006

Rencontrer Carl Sassenrath cet ètè, ça vous dit ?

Rencontrer Carl Sassenrath cet été, ça vous dit ?



Anonyme | 00:14 02/03/2006
Et oui, Carl sera en France la première quinzaine de Juillet.
Pour raison familiales et pour quelques vacances.
Il souhaite en profiter pour rencontrer la communauté francophone (qu'il a été déçu de na pas voir en plus grand nombre à Milan l'année dernière, il faut bien le dire).
L'idée c'est de faire ça le W.E. du 8 et 9 Juillet.
Ils seront (lui, Cindy son épouse, sa fille ainsi que des amis à lui) dans le Sud-Ouest, du coté d'Agen.
L'endroit de la rencontre reste à définir exactement. Ce peut être Toulouse, Bordeaux, ou n'importe où dans ce coin là. Il faut voir par rapport aux transports pour les personnes intéressées.
J'attend de voir vos réactions à cette proposition et si quelqu'un de part là à une idée plus précise, qu'il n'hésite pas.
DideC | 00:15 02/03/2006
Et oui, Carl sera en France la première quinzaine de Juillet.
Pour raison familiales et pour quelques vacances.
Il souhaite en profiter pour rencontrer la communauté francophone (qu'il a été déçu de na pas voir en plus grand nombre à Milan l'année dernière, il faut bien le dire).
L'idée c'est de faire ça le W.E. du 8 et 9 Juillet.
Ils seront (lui, Cindy son épouse, sa fille ainsi que des amis à lui) dans le Sud-Ouest, du coté d'Agen.
L'endroit de la rencontre reste à définir exactement. Ce peut être Toulouse, Bordeaux, ou n'importe où dans ce coin là. Il faut voir par rapport aux transports pour les personnes intéressées.
J'attend de voir vos réactions à cette proposition et si quelqu'un de part là à une idée plus précise, qu'il n'hésite pas.
DideC
fvzv | 07:50 02/03/2006
C'est une idée bien tentante...
Peut-être faudrait-il joindre cela avec un WE touristique... Si qqn de la région pouvait organiser les vistes (réservation de musée, etc...), ce serait vraiment chouette.
François
Philippe | 09:34 02/03/2006

Philippe | 09:39 02/03/2006
Bonjour,
Donc cela oblige à repenser un RebolDay3, puisque cela va être difficile de bloquer carl et cindy durant leurs vacances.
===Philippe
DideC | 13:28 02/03/2006
Un RebolDay je sais pas : c'est pendant les vacances, donc c'est pas évident d'en faire un événement de ce genre.
Je vois plus ça comme une rencontre informelle pouvant commencer dans une salle quelconque, ou même à la terrasse d'un café et continuant au restaurant ou en visite de je ne sais quoi.
Faut-il en faire un événement "officiel" ? Je ne suis pas sûre que Carl l'envisage ainsi. Mais je peux demander.
DideC
jipé | 14:27 02/03/2006
Bonne idée, terrasse, apéro, resto, discussions informelles. Ne pas lui mettre la presion s'il est en vacances - profiterait-il de sa notoriété pour voyager gratos :))
J'en serai avec plaisir.
Maintenant, les dates sont mal choisies, mais bon...
Jipé
Philippe | 17:30 02/03/2006
Didec,
Je me suis mal exprimé. En fait, je savais qu'il était en France sur ces dates, (notamment sur Paris, avant), et j'avais compris que ce n'était pas dans son optique. Il est en vacances, même s'il aimerait voir quelques unes de nos tronches.
C'était juste pour dire que compte-tenu du projet initial du RebolDay 3, si on accueille un équivalent DevCon en France, cela décale nos projets à l'automne, et donc que soit le DevCon ne sera pas en France, soit que Carl devra faire un retour à ce moment-là.
===Philippe
;-( (en me relisant, je ne suis pas sûr d'être clair, mais grosse journée, ...)
fabrice | 21:20 02/03/2006
Yop la foule !!!
Hé ben tiens ! En revenant pour la première fois de l'année me semble t'il sur le forum, je ne peux que réagir à ce post (Meilleurs Voeux ! Que tous vos projets réussisent en 2006 !) .
Quoi que me refocalisant sur d'autres langages (.Net, PHP...) la communauté francophone marque forcément tout ex-codeur ou testeur Rebol ;-)
Je suis pour l'idée du resto, visite, café, etc... ne serait-ce que pour revoir certains copains (ça va DiDec ? toujours la forme Shad ? Magic Olivier ? Quoi de 9 Dock ?... :-) et rencontrer Carl !
Ca me fais même plus d'effet que le DevDay de M$ en mars, hé, hé, hé...
Bon, du coup, je m'en vais sur Rebol.com voir les nouveautés et installer la dernière version.
Tiens, une idée au passage pour le site rebolfrance.org qui n'a pas vraiment bouger, rajouter des listes RSS et, si ce n'est déjà fait, en mettre une sur ce forum (allez hop Olivier, on s'y remet ;-)
--
Fabrice (^_^)

mardi 28 février 2006

erreur mail

erreur mail

Liste des forums > Forum Core

seb | 12:03 28/02/2006
je viens d'essayer l envoie de mail avec le code suivant
send monadresse@yahoo.fr "hello"
et j'obtiens l'erreur suivante
User Error: Email header not set: no from address
Near: make error! info
quelqu'un pourrait il m'aider
DideC | 19:49 28/02/2006
Tu dois renseigner l'adresse de l'expéditeur.
Le plus simple et de le faire une bonne fois en lançant Rebol/view et en cliquant sur "User" en haut, pour configurer ton adresse et les adresses des serveurs POP/SMTP.
Sinon, c'est aussi possible avec une ligne de code, ça dépend de l'usage.
Si c'est pour tester sur un PC perso, la première méthode est la meilleure.
Si ça marche pas, donne plus de renseignements sur ta config (OS, View installé ou pas...)
DideC

mercredi 22 février 2006

REBGUI 0.3.9

REBGUI 0.3.9

Liste des forums > Forum View

Anonyme | 02:03 22/02/2006
0.3.9 is out and it has a lot of fixes / enhancements. From a REBOL/View console:
do http://www.dobeash.com/get-rebgui.r
do view-root/public/ www.dobeash.com/RebGUI/tour.r
The dictionary file has been removed from the distribution and the download path has been changed from:
www.dobeash.com/files/rebgui -> www.dobeash.com/RebGUI
so you may want to delete view-root/public/ www.dobeash.com in its entirety first to clean things up.
In addition to the large number of fixes ( http://www.dobeash.com/it/rebgui/issues.html#section-2.2 ), a number of enhancements are documented here:
http://www.dobeash.com/it/rebgui/display.html#section-2.1.7
http://www.dobeash.com/it/rebgui/display.html#section-3.2.4
http://www.dobeash.com/it/rebgui/display.html#section-3.2.5
http://www.dobeash.com/it/rebgui/display.html#section-5.20
Also note the following:
view-face is now activate-on-show by default
Added a request-password requestor (its password widget problems are known issues)
group-box and tab-panel now auto-size
Table column headings are now always left aligned and clicking the arrow works
Added an 'effects context (only window is present, but others like 'button, 'check, etc may be added in future)
And lastly, you will notice that %tour.r has a new "Appearance" tab where you can dynamically alter RebGUI's metrics, colors and effects. Note that some colors are still "hard-bound" at context creation and won't change - these will be made dynamic (via a set-colors func?) in the future. Apart from showing off RebGUI's dynamic scaling and display abilities, this lets you more easily prototype a unique look for your own apps if you want, and if you come up with a set of options that is truly fantastic then share it here and it may just become the new RebGUI default.
Enjoy!
Et pour ceux qui lisent pas l'anglais hum ... Wallstreet institute est votre ami ^^
shadwolf | 18:56 23/02/2006
On notera l'apparition d'un client de téléchargement et d'installation automatique do http://www.dobeash.com/get-rebgui.r ainsi que l'installation de la librairie dans le view-root/public. 2 nouveautés absoluement indispensables!!!
la possibilité de changer dynamiquement les couleurs de l'interface rebgui en réjouira plus d'un !!

dimanche 19 février 2006

Splitter un script en son header et son body

Splitter un script en son header et son body

Liste des forums > Forum Core

Anonyme | 20:34 19/02/2006
Bonsoir,
Je cherche à séparer le header et le body d'un script pour les sauver chacun dans un fichier séparer...
Merci
François
coccinelle | 06:50 20/02/2006
Facile, tu utilises load/header qui te rend un block dont le premier élément est le header et les suivants c'est le script :
script: load/header %my-script.r
save %my-header.r first script
save %my-body.r next script
Si tu te souviens, j'avais proposé quelque chose de similaire pour enlever tous les commentaires d'un script :
save/header %output.r next script: load/header %input.r first script
Marco.
Fugit tempus irreparabile (Virgile)

mercredi 15 février 2006

Supression des lignes commentèes

Supression des lignes commentées

Liste des forums > Forum Core

Anonyme | 19:31 15/02/2006
Bonjour,
Une petite question complétement ouverte :
sur une lecture ligne à ligne d'un script Rebol (lignes: read/line %fichier.r), quel est le moyen le plus efficace de ne prendre en compte QUE les lignes non commentées, sachant qu'une ligne commentée peut prendre un seul ";" en début de ligne, mais qu'on peut avoir aussi les cas avec des espaces, tabulations, en nombre quelconques avant le signe ";" ?
(et extension au cas de ligne commencant par un caractère # comme pour Unix, // pour Js, etc )
===Philippe
reboltof | 09:19 16/02/2006
Le moyen le plus simple, à mon humble avis, est de lire le fichier après en avoir retiré toutes les lignes inutiles... et c'est justement ce que fait le préprocesseur %prerebol.r, dont le code est gracieusement mis à disposition dans le dernier SDK, et utilisable sans clef de licence...
Si tu préfères contràler toi-même l'output, le code est très simple:
foreach line read/lines %monfichier [
    if not find line ";" [print line]
]

Christophe Coussement
A la recherche de doc sur REBOL ? Visitez The REBOL Documentation Project sur http://rebdocproj.net
coccinelle | 10:31 16/02/2006
Sans faire une lecture ligne à ligne, tu peux utiliser load & save pour créer un fichier sans commentaires :
save/header %output.r next script: load/header %input.r first script
Mais ceci t'enlève tous les commentaires, y compris ceux en fin de ligne. Sinon un petit parse peut te donner un meilleur controle:
foreach line read/lines %monfichier [
    if parse line [[";" | "#" | "//"] to end][print line]
]
Il ne faut pas oublier que le parse d'un string sans le refinement /all exclut les espaces et les tabulations.
Marco.
Fugit tempus irreparabile (Virgile)
Philippe | 13:09 16/02/2006
All,
Merci des contributions. C'est toujours interessant de torturer un peu Rebol, et accessoirement nos neurones.
Xtof, ta solution était celle que j'utilisais quand je maîtrise le fichier en input, et comme je mets des commentaires en début de ligne, elle peut fonctionner. Mais le "Find " prend aussi les lignes pour lesquels le commentaire est en fin, par exemple :
ma-variable: none ; ceci est une variable importante
Donc, le find n'est pas assez restrictif.
Marco, j'ai eu exactement le même raisonnement. (Ouf ;-). (mais ce n'est pas super "naturel", et mériterait d'être un chtouille plus développé dans une doc, parce qu'on (j') oublie souvent le fonctionnement par défaut de parse.)
Voilà un fichier de test :
test
  
; test
   ;
	
		; test3
	a: make face []  ; à garder
# ceci est un autre type de commentaire
	 # ceci aussi 

et voilà la fonction qui teste s'il y un commentaire.
comment?: func [
    "Test if text is a code comment, return true or false"
    text 
	/custom var [string!] { for custom comment symbol }
	/local rules
	][
	rules: either custom [ head change [";" to end] :var ] [[";" to end]]
	either parse text rules  [ true ][ false]
]

Merci de cette petite réflexion.
===Philippe
Philippe | 14:37 16/02/2006
Re-salut,
Bon, j'en ai profité pour en faire un script sur la Library, histoire de voir si mon compte marchait encore.
===Philippe
coccinelle | 15:12 16/02/2006
Philippe,
J'avoue ne pas bien comprendre ton [head change [";" to end] :var] ni le either parse ...
Pourquoi ne pas simplifier ton code ainsi :
comment?: func [
    "Test if text is a code comment, return true or false"
    line [string!] {script line}
    /with symbol [string! char!] { for custom comment symbol }
][
    unless with [symbol: #";"]
    parse line [symbol to end]
]
Je préfère l'emploi du refinement /with qui se retrouve dans plusieurs fonctions mais tout cela n'est qu'une question de goût et moi j'avoue rechercher un code le plus simple possible.
Marco.
Fugit tempus irreparabile (Virgile)
Philippe | 16:15 16/02/2006
Marco,
J'oserais à peine dire que je recherche aussi de plus en plus un code concis, mais bon, ouch, j'ai quelques années de progression devant moi ;-)
Je n'avais pas pensé au "unless", c'est carrément plus astucieux comme cela.
Le "either parse.." venait du fait que j'avais fait des tests avec des chaines et des cas qui ne renvoyaient pas nécessairement strictement "true", et je n'ai pas changé après.
J'ai fait les modifs. Merci pour la leçon ;-))
===Philippe
DideC | 18:52 16/02/2006
Perso, je prèfère à la syntaxe Unless quelque chose comme ça.
symbol: any [symbol #";"]

... puisque 'symbol sera à 'none si /with n'est pas spécifié lors de l'appel de la fonction.
Ca à l'avantage, à la lecture du code, de montrer que l'on défini toujours 'symbol, même si c'est avec ça propre valeur.


Une remarque sur l'utilisation de 'find pour trouver les ";" : si il y a une chaine de texte dans la ligne avec un ";" à l'intérieur : ça va merder !!!!
De même, que donne vos diverses méthodes dans le cas suivant :
this is a code
; un commentaire
chaine: {il fait beau.
il fait chaud ; même très chaud.
; c'est un commentaire ou pas ;-)))
Bon au boulàt}

DideC
Anonyme | 09:42 17/02/2006
Salut,
Comme quoi une question anodine ....
Avec unless et any, la ligne 5 de ton exemple est détectée par comment? comme un commentaire , mais Didec, tu élargis le débat, parce que ma question initiale était sur une lecture ligne à ligne d'un fichier.
Et dans ce cas, l'input est la ligne, donc le contexte de blocs ou chaines multi-lignes n'est pas appréhendé, ce qui d'ailleurs n'est pas nécessairement une bonne chose.
Est-ce utopique (sans faire une usine à gaz) d'imaginer une fonction capable de trouver les commentaires en multi-lignes ? Genre :
; chaine: {
blabla
blabla
blabla
; <- piege
blabla
}
Ici "chaine" ne serait pas à évaluer. Cela suppose une lecture globale du fichier, la gestion des accolades, et parenthèses ouvrantes/fermantes et sans doute d'autres trucs auquels je ne pense pas.
===Philippe
johnatemps | 10:00 17/02/2006
la solution: réécrire un morceau d'interpréteur rebol... :-(
C'est pas que cela soit inintéressant, mais... cela a déjà été fait, non ?
prebol.r me semble un bon départ de travail.
---..--- JohnATemps ---..---
coccinelle | 10:23 17/02/2006
Didier, Philippe
J'ai hésité sur la forme any [...], mais j'ai trouvé utile de rappeler l'existence d'unless.
Tout à fait juste l'exemple qui va merder, effectivement, il ne faut plus faire un ligne à ligne, mais parser l'ensemble de la chaîne. Il faut aussi pouvoir traiter des chaines qui imbrique des paires de {} ou de "". Je ne crois pas nécessaire de traiter les pair de () mais peut-être que je me trompe :
this is a code
; un commentaire
chaine: {il fait beau.
il fait chaud ; {même très chaud.}
; c'est un "commentaire" ou pas ;-)))
Bon au boulàt}
Dans ce cas, le parse est à peine plus compliqué, y compris pour les commentaires multi-lignes:
decomment: func [
    "Remove all script line starting with a comment symbol, return the script without comment"
    script [string!] {script}
    /with symbol [string! char!] { for custom comment symbol }
    /local guillemet crochet thru-newline commentaire s e
][
    unless with [symbol: #";"]
    guillement: [
        "{" crochet
    |
        {"}
    |
        skip guillement
    ]
    crochet: [
        {"} guillement
    |
        "{" crochet
    |
        "}"
    |
        skip crochet
    ]
    thru-newline: [
        {"} guillement [thru newline | thru end]
    |
        "{" crochet [thru newline | thru end]
    |
        newline
    |
        end
    |
        skip thru-newline
    
    ]
    commentaire: [
        s: any [#" " | #"^-"] symbol thru-newline e: (remove/part s e) :s
    ]
    parse/all script: copy script [
        commentaire
    |
        any [
            {"} guillement
        |
            "{" crochet
        |
            newline commentaire
        |
            skip
        ]
    ]
    script
]
Exemple :
script: {
this is a code
; un commentaire
chaine: {il fait beau.
il fait chaud ; même "très" chaud.
; c'est un commentaire ou pas ;-)))
Bon au boulàt}
; chaine: { 
blabla
blabla
blabla
; <- piege
blabla 
} aussi supprimé
}
donne
>> decomment script
== {
this is a code

chaine: {il fait beau.
il fait chaud ; même "très" chaud.
Bon au boulàt}

}

Marco.
PS. C'est vrai qu'on réécrit une partie de l'interpréteur, mais c'est aussi amusant.
Fugit tempus irreparabile (Virgile)
coccinelle | 11:24 17/02/2006
Une des choses les plus difficiles avec le parsing, c'est à mon avis lorsque l'on parse un string contenant des structures imbriquées et que l'on veut produire un block contenant aussi une structure imbriquée. Un exemple tout simple :
    parse {... [ ... [ ... ] ... ...] ...} [... rules ...]
doit retourner :
    [... [ ... [ ... ] ... ...] ...] 
C'est un cas que j'ai rencontré avec le parsing du SQL pour sql-protocol.r mais je ne suis pas vraiment satisfait de la solution.
Marco.
Fugit tempus irreparabile (Virgile)
Philippe | 11:58 17/02/2006
re-salut,
Bon, chapeau bas, maître marco.
coccinelle a dit :

PS. C'est vrai qu'on réécrit une partie de l'interpréteur, mais c'est aussi amusant.

Tout à fait d'accord. Parfois (souvent ;-)), je me pose des questions à deux balles, en me disant "tiens, pourquoi cela marche comme cela ?" et à force de creuser la question, soit je retombe sur une évidence oubliée, soit je découvre un truc assez sioux, et là, il y a beaucoup de plaisir. Je ne sais pas comment dire : arriver sur une ligne de code bien ciselée, c'est un peu comme une oeuvre d'art. Il y a un càté "esthétique" en REBOL.
Et ce genre de discussion, je trouve çà super "éducatif".
===Philippe

samedi 11 février 2006

Comparateurs de chaines (Similarity Metrics)

Comparateurs de chaines (Similarity Metrics)

Liste des forums > Forum Core

Anonyme | 16:34 11/02/2006
Bonjour,
Je suis en train d'implémenter un toolkit de comparateurs de chaînes sur base de modèles tels que Jaro, levenstein, etc...
Une première version est disponible sur www.rebol.org. Le nom du script est simetrics.r (pour Similarity Metrics).
Sont déjà implémentés les modèles suivant:
* levenshtein
* Jaro
* Jaro-Winkler
Ces modèles sont très utiles dans les applications DB pour permettre de faire des recherches sur des noms similaires à celui entré par l'utilisateur.
François
fvzv | 22:38 11/02/2006
Petit status:
J'ai ajouté le métrique "Jaccard", ce qui permet par exemple de matcher les chaines suivantes:
>> get-similarity/jaccard {François Vanzeveren
{    Avenue de Floréal, 85b3
{    1180 Bruxelles} {Vanzeveren, Francois
{    85 b3, Avenue de Floreal
{    Bruxelles 1180}
== 1
>>

--> le programme détecte que les deux chaînes sont en faites identiques (1 = match à 100%)
Je vous laisse découvrir les raffinements disponibles.
François
fvzv | 13:25 12/02/2006
Salut
A peine 2 jours après sa mise en ligne sur rebol.org, voilà que Sunanda a décidé d'exploiter simetrics pour Rebol.org, après avoir testé les métriques et constaté que les performances étaient plusieurs fois plus élevées que les méthodes qu'il utilisait jusqu'à présent pour faire des recherches sur des mots "similaires".
C'est un test grandeur nature!!
Cela fait plaisir et motive a continuer l'implémentation d'autres métriques.
François
coccinelle | 20:38 12/02/2006
Félicitation François,
C'est toujours une super initiative que de mettre en oeuvre ce genre d'algorithmes éprouvé. Et puis je suis toujours impressionné pas le peu de temps qu'il faut avec REBOL pour mettre en oeuvre ce genre de choses.
Si tu checher à gagner quelques "chouilla" en vitesses, tu peux simplifier les fonction ci-dessous, mais c'est plus parce que j'aime écrire les chaoses ainsi plutôt qu'autre chose
   sm-divide: func [
        "Returns the first value divided by the second."
        value1 [number! pair! char! money! time! tuple! none!]
        value2 [number! pair! char! money! time! tuple! none!]
    ] [
        all [
            value1 value2
            divide value1 value2
        ]
    ]
    sm-multiply: func [
        "Returns the first value multiplied by the second."
        value1 [number! pair! char! money! time! tuple! none!]
        value2 [number! pair! char! money! time! tuple! none!]
    ] [
        all [
            value1 value2
            multiply value1 value2
        ]
    ]
    sm-max: func [
        "Returns the greater of the two values."
        value1 [number! pair! char! money! date! time! tuple! series! none!]
        value2 [number! pair! char! money! date! time! tuple! series! none!]
    ] [
        all [
            value1: any [value1 value2]
            value2: any [value2 value1]
            max value1 value2
        ]
    ]

Marco.
Fugit tempus irreparabile (Virgile)
fvzv | 09:17 13/02/2006
Merci Marco,
Je n'y avais pas pensé dans ce cas-là, alors qu'ailleurs dans le script j'utilise ce tips.
Sur rebol.org, vous trouverez maintenant un nouveau field de recherche "Go to script" qui exploite simetrics pour proposer les 20 scripts dont les noms se rapprochent le plus de celui soumis par l'utilisateur.
Ex:
http://www.rebol.org/cgi-bin/cgiwrap/rebol/view-script.r?script=semitrics
l'utilisateur a fait une erreur dans le nom: il a tapé semitrics au lieu de simetrics
François
coccinelle | 11:20 13/02/2006
François,
Dis-moi, est-ce ce genre d'algorithm qui sont utilisés dans les base de données pour faire des recherches phonétiques ?
Cà m'intéresse pour sql-protocol (qui est 1er dans le classement sur rebol.org depuis 2 semaines).
Marco.
Fugit tempus irreparabile (Virgile)
johnatemps | 14:05 13/02/2006
Je suis très intéressé par ce type d'algo! Merci pour le script, et pour les noms, qui me permetront de trouver plus d'info sur le net.
---..--- JohnATemps ---..---
fvzv | 16:32 13/02/2006
Marco,
Tout d'abord, je tiens à préciser que j'ai découvert ces modèles et algorithmes il y a moins d'une semaine, donc je ne peux pas me positionner comme un expert.
Néanmoins, d'après mes lectures, je comprends qu'il existe deux grandes catégories de modèles:
* Les modèles phonétiques (soundex, phonex, etc...)
* Les modèles lexicaux. Les algo implémentés dans simetrics font partie de cette catégorie.
Le problème des modèles phonétiques, c'est qu'ils ne peuvent être généralisés. Il se basent sur des règles phonétiques qui varient selon la langue.
Les modèles lexicaux sont eux indépendants de la langue et ont une certaine efficacité "phonétique"
ex:
* Smiths et smiss obtient un score de 82% avec Jaro et de 88% avec Jaro-Winkler
* Francois et Fransois obtient un score de 85% avec Jaro et de 91% avec Jaro-Winkler
Mon sentiment est que les modèles phonétiques pures ne doivent pas être intégrés dans un outil "généraliste" comme SQL-PROTOCOL car comment vas-tu appréhender la multitude de langues de tes utilisateurs.
Par contre, les modèles lexicaux apporteraient une réelle plus-value à SQL-PROTOCOL.
C'est d'ailleurs dans l'optique d'utiliser SQL-PROTOCOL que je développe simetrics.
Evidemment, je verrais avec plaisir simetrics intégré dans sql-protocl
François
fvzv | 16:45 13/02/2006
johnatemps,
Pour ton information, je travaille actuellement sur l'implémentation en rebol de TFIDF, qui est en quelque sorte une version pondérée de Jaccard (déjà implémenté dans simetrics)
François
coccinelle | 17:11 13/02/2006
Une petite recherche sur google m'a fait découvrir l'operateur =* qui est mis en oeuvre par exemple dans DB2 et SAS. Je ne sais pas quels algorithmes sont implémentés dans ces outils.
MySQL implémente SOUNDEX et fourni les fonctions SOUNDEX(...) et dans les clauses WHERE on peut utiliser ... SOUND LIKE ...
Je suis favorable à l'utilisation d'un truc indépendant de la langue mais qui donne quand même des résultats interessants.
Qu'en pensez-vous, est-ce une bonne idée de mettre en oeuvre l'opérateur =* ou est-de mieux de faire comme dans MySql pour des raisons de compatibilité ?
Marco.
Fugit tempus irreparabile (Virgile)
fvzv | 09:16 14/02/2006
Je serais plus favorable à l'opérateur =*
François
fvzv | 12:46 18/02/2006
Bonjour,
Une nouvelle version de simetrics est disponible sur rebol.org.
La documentation est en cours de rédaction et déjà disponible sur le même site. Un forum de discussion est également ouvert sur rebol.org
A plus
François

- page 1 de 220