Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Etude sur la saisie prédictive | |
| | Auteur | Message |
---|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Etude sur la saisie prédictive Ven 2 Déc 2016 - 20:42 | |
| Bonsoir à tous ! Nous avons parlés récemment de ce principe dans un un des posts du forum... Petit rappel : La saisie prédictive est une technique permettant de proposer du texte proche de celui tapé par l'utilisateur pour éviter la saisie complète d'un mot. Vous tapez par exemple : PARet l'ordinateur vous propose : PARIER , PARDON , PARCELLE... Le principe étant très intéressant, je réfléchis à une éventuelle 'intégration dans GPP pour la frappe des mots clés. J'ai recherché quelques pistes pour un développement en Panoramic et voila ce que ça donne. 1) Commencez par cliquer sur la ligne blanche tout en haut 2) Tapez un texte (les mots reconnus ici commencent tous par la lettre 'P' et sont automatiquement passés en MAJUSCULES 3) Sélectionnez un des mots correspondant à votre choix ! Le principe est à améliorer mais c'est un début... - Code:
-
' -------------------------------------------------------------------------------- ' ----------------------- SAISIE PREDICTIVE par MiNiBuG ----------------------- ' --------------------------------------------------------------------------------
DIM t$ , n% , nn% , pos% , txt$
LABEL saisie_predictive , selection_texte
DATA "PRINT" , "PAPA" , "PARIER" , "PRUNE" , "PRUNEAUX" , "PARLER" , "PARLOIR" , "PERLES" , "PERE"
EDIT 1 : WIDTH 1,300 : ON_CHANGE 1,saisie_predictive LIST 2 : HIDE 2 : TOP 2,30 : WIDTH 2,150 : HEIGHT 2,20 : COLOR 2,250,200,100 : ON_CLICK 2,selection_texte DLIST 3 : FOR n%=1 TO 9 : READ t$ : ITEM_ADD 3,t$ : NEXT n% : SORT 3
END
saisie_predictive:
txt$=UPPER$(TEXT$(1)) : IF txt$="" THEN RETURN pos%=LEN(txt$) : CLEAR 2
FOR n%=LEN(txt$) TO 1 STEP -1 IF MID$(txt$,n%,1)=" " THEN pos%=LEN(txt$)-n% : nn%=TEXT_WIDTH(LEFT$(txt$,n%),2) : EXIT_FOR NEXT n%
IF pos%=0 THEN RETURN
FOR n%=1 TO 9 IF LEFT$(ITEM_READ$(3,n%),pos%)=RIGHT$(txt$,pos%) AND LEN(ITEM_READ$(3,n%))>pos% ITEM_ADD 2,ITEM_READ$(3,n%) : HEIGHT 2,COUNT(2)*20 END_IF NEXT n%
IF COUNT(2)>0 : SHOW 2 : LEFT 2,nn% : ELSE : HIDE 2 : END_IF RETURN
selection_texte:
t$=LEFT$(TEXT$(1),LEN(TEXT$(1))-pos%)+ITEM_INDEX$(2) : TEXT 1,t$
RETURN
Dernière édition par Minibug le Sam 3 Déc 2016 - 15:37, édité 4 fois | |
| | | Ouf_ca_passe
Nombre de messages : 285 Age : 76 Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France Date d'inscription : 21/12/2015
| Sujet: FORMIDABLE Sam 3 Déc 2016 - 9:05 | |
| La prochaine étape est tutoriels vidéos.
Courage Minibug. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 9:14 | |
| Salut Ouf_ca_passe !
On en est pas encore là... Il s'agit juste d'un test et on est loin d'un fonctionnement correct !
Pour l'instant seul fonctionne l'ajout de texte. Mais si tu efface le texte existant cela ne donne plus rien ! De plus, le test ne porte que sur quelques mots, imaginons maintenant une base de 600 ou 700 mots clé par exemple et là tout est différent...
Il reste donc encore de nombreuses choses à voir... | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 9:17 | |
| PS : Tu peut découvrir une variante de ce type de recherche dans GPP. En regardant dans l'onglet des 'mots clé', tu peut effectuer une recherche de différentes manières ou j'applique cette méthode... | |
| | | Froggy One
Nombre de messages : 598 Date d'inscription : 06/01/2012
| Sujet: Re: Etude sur la recherche prédictive Sam 3 Déc 2016 - 12:02 | |
| En tous cas, merci pour ces lignes de programmation qui sont pour moi une vraie leçon: l'utilisation du item_read$, et le count que j'avais oublié ! Bonne continuation, je suis ça de près ! | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 12:32 | |
| Bonjour Froggy One Content de t'avoir rafraîchi la mémoire ! Le but de cette étude est d'intégrer la recherche prédictive des mots clé dans GPP. Mais là c'est plus compliqué car on utilise les fenêtres SYNEDIT par l'intermédiaire de KGF ! L'autre problème est le nombre de mots clé dans Panoramic qui oscille entre 600 et 700 instructions sur la dernière version. Je pense faire apparaître la recherche uniquement si ne nombre des mots clé détectés est inférieur à 10. Au delà cela semble impossible (temps d'attente à l'affichage, affichage trop important...). L'ensemble est complexe mais j'espère bien y arriver. J'ai quelques idées qui doivent mûrirent encore un peu... | |
| | | Ouf_ca_passe
Nombre de messages : 285 Age : 76 Localisation : Villeneuve d'Ascq (59-Dpt du NORD) France Date d'inscription : 21/12/2015
| Sujet: AUTOCOMPLETION Sam 3 Déc 2016 - 14:20 | |
| | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 14:38 | |
| Oui autant pour moi ! Je corrige cette erreur, il s'agit de saisie et non de recherche ! Quoique le but soit bien de trouvé certains mots, il s'agit donc indirectement d'une recherche... | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 15:17 | |
| - Citation :
- Mais là c'est plus compliqué car on utilise les fenêtres SYNEDIT par l'intermédiaire de KGF !
As-tu essayé de frapper F2 en cours de saisie d'un mot-clé ? | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 15:32 | |
| @Minibug Tu as édité trois fois ton 1er post, il te restes encore au moins une fois de plus. Ligne 11 - Code:
-
EDIT 1 : WIDTH 1,300 : ON_CHANGE 1,recherche_predictive
C’est : saisie_predictive ; c’est toi qui l’as dit, non ? | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 15:35 | |
| Aucun résultat avec F2 !
Comme tout les mots clé sont dans un LIST au départ (lié a la création des fenêtres SYNEDIT), il suffit de chercher dans toute la liste mais c'est pas si simple.
j'ai réussi un début de saisie avec un FORM contenant un LIST des mots clé correspondants mais je suis loin d'un résultat correct ! De plus si je souhaite garder la fenêtre SYNEDIT active, je ne peux pas avoir un FORM visible pas dessus sinon la saisie dans la fenêtre SYNEDIT est bloquée.
Enfin bref, pour le moment je patauge...
| |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 15:38 | |
| Merci papydall ! Oupsss ! C'est corrigé. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 15:49 | |
| Alors, essaie Synedit_Editor: Le curseur est placé en ligne 4, derrière "mess". | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 15:58 | |
| oui, je comprends mieux comme ca ! et c'est l'appui sur F2 qui te fait apparaître la liste des mots clé détectés...
Dans mes onglets sur GPP, j'ai déjà quelque chose comme cà. Mais là, j'aimerai plutôt avoir un affichage automatique des mots clés détectés.
Je vais voir s'il est possible de décalé la fenêtre SYNEDIT dans le FORM et d'afficher sur la partie de droite de ce FORM la liste des mots clé détecté et si aucun mots clé avoir la fenêtre SYNEDIT reprendra sa place en FULL_SPACE. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 15:59 | |
| Voici l'extrait de Synedit_Editor qui gère cela: - Code:
-
' ===== évènement déclenché par Synedit, quelque soit la page ' l'objet invisible 95 (un EDIT) contient: ' Cnnn = la page nnn a changé ' Hnnn = on a frappé F1 dans la page nnn ' Nnnn o a frappé ctrl/N dans la page nnn ' Snnn o a frappé ctrl/S dans la page nnn ' Dnnn o a frappé ctrl/alt/S dans la page nnn ' Onnn o a frappé ctrl/O dans la page nnn syneditalert: : ' ON_CHANGE sur EDIT no 95 salert$ = text$(95) : ' EDIT 95 contient l'identifiant de l'évènement nalert% = instr("CHNSDOAMKEmeakd",left$(salert$,1)) : ' déterminer le code envoyé par la DLL select nalert% case 1: ' une page a changé syneditchange(mid$(salert$,2,3)) case 2: ' on a frappé F1 synedithelp(mid$(salert$,2,3),mid$(salert$,5,len(salert$))) case 3: ' on a frappé ctrl/S gosub nouveau case 4: ' on a frappé ctrl/N gosub sauver case 5: ' on a frappé ctrl/alt/S gosub sauverdans case 6: ' on a frappé ctrl/O gosub ouvrir case 7: ' on a obtenu un ON_ACTIVATE if DoOnActivate%=0 : ' uniquement si ON_ACTIVATE est géré par KGF.dll k% = val(right$(salert$,3)) if k%<>act% : ' est-elle différente de la fenêtre active précédente ? mark_off 300+act% : ' alors changer le marquage du menu mark_on 300+k% act% = k% end_if to_foreground 100+act% res% = dll_call3("SyneditFunction",SE%(act%),2,0) : ' donner le focus à Synedit end_if case 8: ' on a obtenu un ON_MOVESIZE : ' la fenêtre a bougée ou est redomensionnée act% = val(right$(salert$,3)) : ' mémoriser le numéro de la fenêtre active res% = dll_call5("SyneditGeometry",SE%(act%),M1%,M1%,M1%,M1%) : ' ajuster la taille de Synedit à celle de la fenêtre case 9: ' on a frappé F12 (codes personnels) gosub codespersonnels case 10: ' on a frappé F9 (exécuter normal) gosub executer_normal case 11: ' on a obtenu un ON_MOVESIZE pour minimiser/maximiser k% = 100 +act% if width(100+act%)<screen_x : ' maximiser une page item_delete 93,act% : ' supprimer les anciennes dimensions de la page : ' et mémoriser la position et les dimensions actuelles: item_insert 93,act%,str$(top(k%))+","+str$(left(k%))+","+str$(width(k%))+","+str$(height(k%)) top k%,60 : left k%,0 width k%,screen_x height k%,screen_y-60 else : ' normaliser une page s$ = item_read$(93,act%) : ' relire les anciennes dimensions de la page if s$="*" then return : ' pas d'anciennes dimensions connues ? sep$ = "," s1$ = string$(20," ") res% = dll_call4("KGFDelimitedTextExtract",adr(s$),adr(sep$),1,adr(s1$)) left k%,val(trim$(s1$)) s1$ = string$(20," ") res% = dll_call4("KGFDelimitedTextExtract",adr(s$),adr(sep$),2,adr(s1$)) top k%,val(trim$(s1$)) s1$ = string$(20," ") res% = dll_call4("KGFDelimitedTextExtract",adr(s$),adr(sep$),3,adr(s1$)) width k%,val(trim$(s1$)) s1$ = string$(20," ") res% = dll_call4("KGFDelimitedTextExtract",adr(s$),adr(sep$),4,adr(s1$)) height k%,val(trim$(s1$)) item_delete 93,act% : ' supprimer les anciennes dimensions de al page item_insert 93,act%,"*" : ' et mémoriser les nouvelles end_if act% = val(right$(salert$,3)) : ' mémoriser le numéro de la fenêtre active res% = dll_call5("SyneditGeometry",SE%(act%),M1%,M1%,M1%,M1%) : ' ajuster la taille de Synedit à celle de la fenêtre res% = dll_call3("SyneditFunction",SE%(act%),2,0) : ' donner le focus à Synedit case 12: ' on a frappé F8 (exécuter debug) if (actsyntax$<>"Panoramic") and (actsyntax$<>"FBPano") then return : ' debug est uniquement disponible avec Panroamic gosub executer_debug case 13: ' on a frappé F2 (auto-complete Panoramic) autocomplete(0) case 14: ' on a frappé ctrl/F2 (auto-complete KGF.dll) autocomplete(1) case 15: ' on a frappé alt/F2 (auto-complete autre DLL) autocomplete(2) end_select return Et la sub autocomplete: - Code:
-
' ===== compléter automatiquement sub autocomplete(quoi%) dim_local s$ select quoi% case 0: ' F2 - Panoramic caption 4500,"Complément automatique de mots-clé pour Panoramic/FBPano" if FlagAutoCompleteKGF%<>0 FlagAutoCompleteKGF% = 0 clear 4502 for i%=1 to count(3403) item_add 4502,item_read$(3403,i%) next i% end_if case 1: ' ctrl/F2 - KGF.dll res% = dll_call2("SetKeyboardState",17,0) : ' annuler la touche "contrl" caption 4500,"Complément automatique de mots-clé pour KGF.dll" if FlagAutoCompleteKGF%<>1 res% = dll_call2("GetExportedNamesFromDLL",adr(kgf$),handle(99)) FlagAutoCompleteKGF% = 1 clear 4502 for i%=1 to count(99) item_add 4502,item_read$(99,i%) next i% end_if case 2: ' alt/F2 - autre DLL res% = dll_call2("SetKeyboardState",18,0) : ' annuler la touche "alt" if AutreDLL$="" message "Aucune DLL externe n'a été choisie (menu "+chr$(34)+"Outils"+chr$(34)+")" exit_sub end_if caption 4500,"Complément automatique de mots-clé pour "+file_extract_name$(AutreDLL$) if FlagAutoCompleteKGF%<>2 res% = dll_call2("GetExportedNamesFromDLL",adr(AutreDLL$),handle(99)) FlagAutoCompleteKGF% = 2 if res%<1 message "Pas de noms exportés pour "+file_extract_name$(AutreDLL$) exit_sub end_if clear 4502 for i%=1 to count(99) item_add 4502,item_read$(99,i%) next i% end_if end_select sauto0$ = trim$(mid$(salert$+" ",5,100)) : ' récupérer le mot à compléter text 4501,sauto0$ : ' charger la fenêtre AutoComplete show 4500 : ' et la montrer FlagAutoComplete% = 1 : ' signaler "AutoComplete a été demandé" inactive 0 : ' désactiver la form 0 set_focus 4501 res% = dll_call5("SendSingleKey",handle(4501),35,0,0,0) : ' VK_END end_sub ainsi que la sub qui crée la fenêtre nécessaire: - Code:
-
' ===== création de la fenêtre de complément automatique sub FormAutoComplete() form 4500 : hide 4500 : caption 4500,"Complément automatique de mots-clé" border_small 4500 : command_target_is 4500 top 4500,0 : left 4500,width(0) : border_small 4500 width 4500,420 : height 4500,screen_y-100 : on_close 4500,close4500 res% = dll_call5("SetNormalWindowPosition",handle(4500),width(0),0,420,screen_y-100) create_show list 4502 : full_space 4502 : height 4502,height(4502)-25 : top 4502,25 : on_click 4502,AutoReplaceWord edit 4501 : width 4501,width(4502) : on_change 4501,ChangeAutoCompleteWord create_hide end_sub
Voilà comment c'est implémenté... Ce qui est important, c'est de savoir que F2, ctrl-F2 et alt-F2 retournent des codes spécifiques dans le EDIT associée au SYNEDIT, afin de pouvoir traiter l'évènement. Maintenant, si tu veux aoir un affichage dynamique, au fil de la saisie, sans aucune intervention de l'utilisateur, tu vas droit vers une usine à gaz intersidérale. Pour cela, en-dehors d'autres considérations, il faudrait tenir compte du contexte syntaxique, comme par exemple "est-ce qu'on est dans une chaîne de caractères", ou "est-ce qu'on est dans un commentaire", pour ce citer que ces deux aspects. | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 16:53 | |
| Merci Klaus je vais étudier tout çà ! Concernant l'usine à gaz intersidérale ça fait bien longtemps que j'ai passé cette étape... J'en suis maintenant à la centrale nucléaire !! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 17:06 | |
| Eh bien, j'espère que ton scaphandre est de la dernière génération et que tu as ta ration de pillules d'iode ! | |
| | | Invité Invité
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 17:13 | |
| Bon tant-pis. J'avais fait un essai sur une idée pour voir vite-fait, mais Klaus t'as répondu. Comme ça fonctionne, je met le code même si ça ne sert à rien (histoire de ne pas avoir travaillé pour rien) - essai:
- Code:
-
' teste remplacement de départ de mot label teste , copie dim mot_clef$,a$,v% , a% ,x$ , b$ ,lig% , w% , cherche$ list 10:height 10,300:width 10,200:font_size 10,8 list 21:left 21,250:font_size 21,8 :width 21,150:height 21,200: on_click 21,copie edit 30 : top 30,350 : font_size 30,8 : width 30,280 : on_change 30,teste mot_clef$ = "ITEM_ADD ITEM_READ$ ITEM_INSERT ITEM_DELETE ITEM_INDEX ITEM_INDEX$ ITEM_COINCOIN EDIT LIST LABEL ALPHA AND $$$" x$ = mot_clef$ lig%= 1 : cherche$ = "#" v%=0 repeat v% = instr_pos(mot_clef$," ",v%+1) x$=right_pos$(x$,w%+1) w% = instr(x$," ") if w% > 0 then item_add 10,left$(x$,w%-1) a$ = item_read$(10,count(10)) until a$ = "$$$" or scancode = 27 or v% = 0 if a$ = "$$$" then item_delete 10,count(10) ' on trie pour avoir les mots à la suite sort 10
mot_clef$ = "" for a% = 1 to count(10) mot_clef$ = mot_clef$ + " "+item_read$(10,a%) next a%
x$ = mot_clef$ v%=1 for a% = 1 to count(10) a$ = item_read$(10,a%) cherche$ = cherche$+str$(v%)+"@"+str$(a%)+"#" v% = v%+len(a$)+1 next a% set_focus 30 end ' ==================== teste: b$ = upper$(text$(30)) clear 21 v% = instr(mot_clef$," "+b$) w% = instr(cherche$,"#"+str$(v%)+"@") x$= right_pos$(cherche$,w%+1) x$ = left$(x$,instr(x$,"#")-1) v% = instr(x$,"@")+1 x$ = right_pos$(x$,v%) if x$ <> "" v% = val(x$) if v% > 0 repeat a$ = item_read$(10,v%) if instr(a$,b$) > 0 then item_add 21,a$ v%=v%+1 until instr(a$,b$) = 0 or v% > count(10) end_if end_if return
copie: ' faudra voir avec caret_position() sur edit pour remplacer le mot dans une phrase ' faire une sélection et remplacer le texte text 30,item_index$(21) set_focus 30 return
Je me retire |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Etude sur la saisie prédictive Sam 3 Déc 2016 - 17:25 | |
| Salut Cosmos70 ! Merci pour ton passage et ton humour (ITEM_COINCOIN ) Je regarderai tout ça un peu plus tard, je dois m'absenter... | |
| | | Contenu sponsorisé
| Sujet: Re: Etude sur la saisie prédictive | |
| |
| | | | Etude sur la saisie prédictive | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |