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 |
|
|
| Demande d'une nouvelle fonction dans kgf. | |
| | Auteur | Message |
---|
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 13:12 | |
| Bonjour.
@Klaus.
J'aurais besoin d'une fonction qui rechercherait les items semblables dans un très grand fichier texte. Je m'exlique:
Je possède un dictionnaire français-anglais, qui contient plus de 700.000 définitions, comme suit (exemple):
ta (adj poss) [qui est à toi] = your ta (locution) = merci ta (poss) [archaic or poetic] (adj) = sens annulé ta (poss adj) [archaic or poetic] = sens annulé
La fonction devrait identifié tous les items du fichier, commençant par une chaîne de caractères donnée.
Exemple
La chaîne est égale à 'ta'.
La fonction identifie la 1ère occurrence correspondante, ici: ta (adj poss) [qui est à toi] = your
Elle lit ensuite chaque item qui suit, et s'arrête au 1er item ne commençant pas par 'ta'. Attention, à la lecture de chaque item, elle doit supprimer les sous-chaînes entre parenthèses et crochets, afin de bien réaliser la comparaison.
Dans l'exemple ci-dessus, elle devrait trouver 4 items.
La liste des items trouvé devra être enregistré dans un objet combo, ou autre.
Cette fonction est donc différente de la fonction SearchStringInTextFile.
Merci de ta réponse pour la faisablité. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 14:57 | |
| Oui, c'est possible. Je vais clôner SearchStringInTextFile et en dériver la nouvelle fonction.Et pourquoi n'utiliserais-tu pas la fonction: - Code:
-
res% = dll_call6("SearchStringInTextFile",adr(fic$),adr(crit$),LineNumbers%, AtStartOnly%, OutType%, handle(obj%)) en mettant 1 dans le paramètre AtStartOnly% (le 4ème paramètre). Cela devrait résoudre ton problème, non ? | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 15:35 | |
| Bonjour.
Merci d'avoir regardé Klaus.
En fait, la solution que tu préconises ne résouds pas le problème. Cela est dû au fait que les items peuvent contenir des sous-chaînes entre parenthèses et crochets.
Dans l'exemple ci-dessus, la fonction devrait rechercher tous les items débutant par 'ta = ', après suppression de ces sous-chaînes justement.
Ce que ne réalise pas la fonction SearchStringInTextFile. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 15:52 | |
| Et pourquoi ne cherches-tu pas simplement "ta ", avec juste un espace après "ta". Ca donne le même résultat, non ? | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 16:48 | |
| Bonjour.
@Klaus.
Ce serait trop simple. Mais le dictionnaire comporte des milliers d'expressions commençant par 'ta' !!
Comme suit:
ta caméra n'est pas aussi bonne que la mienne (locution) (*) = your camera is not as excellent as my camera ta carrière sera pénible. (locution) = your career will be difficult. ta chambre doit toujours être en ordre (locution) (*) = your room must always be kept clean ta chambre, c'est un vrai chantier [désordre] = your bedroom is a total shambles ou looks like a bomb's hit it
Et ce que je recherche à faire, c'est d'établir la liste des items correspond uniquement au pronom possessif 'ta'. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 17:09 | |
| Et donc, le critère pourraît être "ta (", non ? | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 18:30 | |
| Bonjour.
Malheureusement, il n'est pas possible de connaître à l'avance le critère exact à rechercher. Donc, retour au point de départ. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 18:47 | |
| Donc, résumons: Pour chaque ligne: - j'élimine tout ce qui est entre (...), y compris ces parenthèses, - j'élimine tout ce qui est entre [...], y compris ces parenthèses, - je recompacte la ligne en éliminant les doubles espaces - puis je vérifie si la ligne commence par le critère fourni suivi d'un "="
Est-ce exact ? Franchement, je ne vois pas la différence avec la recherche de "ta (". Peux-tu le donner un exemple plus parlant pour cela, stp ? | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 20:08 | |
| Bonsoir.
Oui, c'est exactement cela, tu as bien résumé ma requête.
Mon but est le suivant: traduire un texte de longueur quelconque en anglais, allemand ou espagnol.
Chacun des mots du texte est recherché individuellement dans les dictionnaires.
Mais on ne sait jamais si, dans un dictionnaire, le mot cherché est suivi d'un crochet, d'une parenthèse, ou d'un autre caractère . Et voilà le problème !
La fonction SearchStringInTextFile fonctionne parfaitement, mais fournit des milliers de correspondances pour certains mots, alors que le dictionnaire n'indique que quelques traductions !!
Comme je te l'ai signalé plus haut, pour le mot 'ta'.
Il en est de même pour le mot 'je'.
je (devant voyelle et 'h' muet j' ) (pron) = I je (me) fais des inhalations avec ce produit (locution) = I use this product as an inhalant je (me) fais des inhalations avec ce produit [traitement] = I use this product as an inhalant je (ne) rigole pas! [sens: plaisanter] (locution) = to it's no joke!
Pour ce mot simple, une seule traduction doit être prise en compte, alors que la fonction SearchStringInTextFile indique des milliers de lignes !!
On ne peut pas rechercher 'je(' car on ne sais pas quel caractère se trouve après 'je' dans le dico.
Merci de la suite.
| |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 21:20 | |
| Donc, en réalité, je dois chercher si, toutes parenthèses éliminées, le critère de rercherche est suivi uniquement du signe "=" (égal), puis du texte quelconque derrière.
Bon, je vais voir cela. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande d'une nouvelle fonction dans kgf. Jeu 23 Nov 2017 - 22:26 | |
| J'ai créé une fonction qui pourait résoudre cela. C'est une fonction dérivée de SearchStringInTextFile et elle s'appelle SpecialSearchStringInTextFile. Voici comment elle est appelée: - Code:
-
res% = dll_call5("SpecialSearchStringInTextFile",adr(fic$),adr(crit$),LineNumbers%,OutType%, handle(obj%)) Comme tu vois, elle garde les mêmes paramètres que la fonction d'origine, avec le paramètre AtStartOnly en moins. A part cela, elle s'utilise exactement de la même manière. Tu lui indiques le critère SANS l'espace à la fin, et SANS le signe "=" (égal). De façon interne, la fonction élimine tout ce qui est entre (...) et [...], ces parenthèses y compris, supprime les espaces doubles, puis cherche le critère indiqué suivi d'un espace puis du signe "=". Si cette combinaison est trouvée en position 1 (début de ligne), alors le résultat est signalé exactement comme dans la fonction d'origine, sinon la ligne est ignorée. Tu peux télécharger KGF.dll sur mon site ou mon WebDav. La doc n'est pas encore à jour, et le numéro de version est pour le moment inchangée. J'aimerais que tu puisses faire un essai réel. | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande d'une nouvelle fonction dans kgf. Ven 24 Nov 2017 - 7:40 | |
| Bonjour. @Klaus. Je viens de tester la nouvelle fonction, avec la dernière version de kgf.dll, trouvée dans ta signature. J'obtiens un message d'erreur: Not correct arithmetic expression: error in function line11.Aurais-je omis quelque chose dans le code ? - Code:
-
dim res%, fic$, crit$, l%, o%, obj%
dll_on "kgf"
fic$="dico_français_anglais.txt" crit$="ta" l%=1
combo 1
res%=dll_call5("SpecialSearchStringInTextFile",adr(fic$),adr(crit$),l%,2,handle(1)) Tu peux télécharger le dictionnaire complet français-anglais ici: https://mon-partage.fr/f/rT6Hz79H/ | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande d'une nouvelle fonction dans kgf. Ven 24 Nov 2017 - 10:53 | |
| J'ai trouvé et corrigé. Tu peux recharger la DLL, et tu peux essayer avec cette version modifiée du code de démo: - Code:
-
dim res%, fic$, crit$, l%, o%, obj%
dll_on "kgf"
fic$="dico_français_anglais.txt" crit$="ta" l%=1
combo 1 combo 2 : left 2,200
res%=dll_call5("SpecialSearchStringInTextFile",adr(fic$),adr(crit$),l%,2,handle(1)) res%=dll_call6("SearchStringInTextFile",adr(fic$),adr(crit$),l%,1,2,handle(2))
end
La combo de gauche montre le résultat de la nouvelle fonction, et la combo de droite celui de l'ancienne fonction. EDIT à 11:36:J'ai fait de sorte que la fonction retourne la ligne d'origine, non la version "épurée" construite pour la comparaison. C'est certainement mieux ainsi... EDIT à 12:20:La doc a été complétée pour la fonction SearchStringInTextFile. | |
| | | Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande d'une nouvelle fonction dans kgf. Ven 24 Nov 2017 - 15:03 | |
| Bonjour. @Klaus. Cette nouvelle commande est tout simplement géniale. Un grand merci Klaus pour cette nouveauté très appréciée. J'ai réalisé un test avec le mot ' je'. Résultats:. avec la nouvelle commande: 0 sec. . avec l'ancienne commande: 8 sec. Le gain de temps est vraiment très appréciable, ce qui va me permettre de donner un véritable coup de fouet à mon module de traduction. - Code:
-
dim res%, d1$, d2$, fic$, crit$, l%, o%, obj%
dll_on "kgf"
fic$="dico_français_anglais.txt" crit$="je" l%=1
combo 1:width 1,500:font_size 1,12:font_bold 1 combo 2:left 2,600:width 2,500:font_size 2,12:font_bold 2
d1$=time$ res%=dll_call5("SpecialSearchStringInTextFile",adr(fic$),adr(crit$),l%,2,handle(1)) message d1$+":"+time$ d2$=time$ res%=dll_call6("SearchStringInTextFile",adr(fic$),adr(crit$),l%,1,2,handle(2)) message d2$+":"+time$ end | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande d'une nouvelle fonction dans kgf. Ven 24 Nov 2017 - 17:41 | |
| | |
| | | Contenu sponsorisé
| Sujet: Re: Demande d'une nouvelle fonction dans kgf. | |
| |
| | | | Demande d'une nouvelle fonction dans kgf. | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |