| Demande de fonction spécifique avec KGF. | |
|
|
|
Auteur | Message |
---|
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 9:27 | |
| Bonjour.
@Klaus.
J'aurais vraiment besoin d'une fonction ultra-rapide de recherche d'éléments dans une chaine.
Je m'explique:
Un memo contient la chaine suivante:
El murciélago de herradura de Willard fue descubierto en la República Democrática del Congo en 2013 y lo más probable es que se extinga en unas décadas. Con él, hasta la mitad de las especies endémicas del corazón de África estarán amenazadas en los próximos 50 años. Hasta ahora tenían que lidiar con el avance de los humanos, su agricultura y su ganadería, que les iban comiendo su territorio. Ahora el cambio climático ha tomado el relevo y les arrebatará hasta dos tercios del que les queda. A algunos animales, como este quiróptero, los dejará literalmente sin espacio.
Je dois rechercher la présence de chaque mot, pris individuellement, dans un fichier texte. Le numéro de la ligne trouvée, éventuellement, dans le fichier doit être sauvegardé dans un combo.
On ne doit pas rechercher les mots se trouvant dans la chaîne suivante:
*a*con*de*des*dos*el*en*este*la*las*le*les*lo*los*que*se*sin*su*un*une*y*
Ni les mots commençant par un chiffre, ni les ponctuations évidemment.
Et de plus, on doit avoir la possibilité de rechercher plusieurs mots qui se suivent (à séparer d'un espace évidemment), et non pas limiter à un seul mot.
J'imagine la fonction suivante:
res%=dll_call5("Search", adr(chaine_depart$), adr(nom_fichier$), handle(combo), adr(exception$), adr(nombre_mots%))
Est-ce faisable ?
Merci de la suite. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 10:08 | |
| C'est complexe, mais c'est faisable. A quoi servira la variable nombre_mots ? | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 10:12 | |
| Bonjour.
Comme je l'ai précisé dans mon post, la variable nombre_mots% indique justement le nombre de mots qui se suivent que l'on souhaite rechercher dans le fichier.
On peut donc avoir la possibilité de rechercher un seul mot, et dans ce cas la variable nombre_mots%=1, ou alors plusieurs mots qui se suivent, cette variable permettant la lecture de ces mots pour la recherche.
Suis-je clair ? | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 10:23 | |
| Parfaitement. Je vais analyser l'algorithme. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 10:56 | |
| Autre précision à demander: tu dis qu'il faut écarter les signes de ponctuation. Dans le cas d'une recherche de groupes de mots de plus de 1 mot, est-ce qu'on autorise des groupes de mots à cheval sur un ou plusieurs signes de ponctuation, ou est-ce que ces signes représentent des "frontières" dans l'identification des groupes de mots ? Est-ce que, dans ton texte - Citation :
El murciélago de herradura de Willard fue descubierto en la República Democrática del Congo en 2013 y lo más probable es que se extinga en unas décadas. Con él, hasta la mitad de las especies endémicas del corazón de África estarán amenazadas en los próximos 50 años. Hasta ahora tenían que lidiar con el avance de los humanos, su agricultura y su ganadería, que les iban comiendo su territorio. Ahora el cambio climático ha tomado el relevo y les arrebatará hasta dos tercios del que les queda. A algunos animales, como este quiróptero, los dejará literalmente sin espacio.
on peut chercher "años Hasta" ou "años hasta", ou encore "animales como este quiróptero dejará" ? Es-ce qu'il faut différencier les minuscules des majuscules ou non ? EDIT Et qu'est-ce qu'on fait des guillemets rencontrés dans le texte ? Ce sont des signes de ponctuation ou est-ce qu'il faut simplement les ignorer ? | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 11:02 | |
| Bonjour.
1. Oui Klaus, les signes de ponctuation éventuels représentent des frontières entre les mots, donc on ne doit pas traiter plusieurs mots séparés par un signe de ponctuation.
2. De plus, on doit passer les chaînes en minuscules.
3. Et ignorer les guillemets.
Merci de la suite. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 13:35 | |
| Ok.
Dernière question: est-ce qu'un trait d'union ou un apostrophe peut arriver et qu'est-ce que j'en fais ? Virtuellement remplacer par des espaces, par exemple ? Ou est-ce que ces signes font partie des mots, comme dans "aujourd'hui" ou "grand-mère" ?
Dernière édition par Klaus le Mer 28 Mar 2018 - 14:11, édité 1 fois | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 13:56 | |
| Concernant ces deux signes, ils doivent demeurer tels quels, car ils font partie des mots.
Merci. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 14:14 | |
| Je vois. Est-ce qu'il faut envisager une situation du type: "Je ne veux pas - en tout cas pas maintenant - entrer dans cette discussion" Tu vois ce que je veux dire: un trait d'union ne reliant pas deux mots ou parties de mots, mais servant de délimiteur. | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 14:28 | |
| Non, il n'y a pas lieu de traiter les traits d'union.
Dans la phrase suivante:
Je ne veux pas - en tout cas pas maintenant - entrer dans cette discussion.
Les mots 'pas' et 'en' sont à traiter séparément.
Merci de la suite. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 14:45 | |
| Donc, je vais garder les trais d'union lorsqu'ils sont entourés directement par du texte sans expaces, tout comme les apostriphes, mais je vais les éliminer s'ils sont entourés d'espaces. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 14:59 | |
| Peux-tu me poster un exemple ou un extrait du fichier dans lequel je dois chercher ces mots ou groupes de mots ? Pour commencer les tests... | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 15:03 | |
| Voici un extrait du fichier dans lequel il faut rechercher les mots ou groupes de mots.
agradecidos los servicios prestados #23358;8;1 agradecidos los servicios prestados #23358;8;2 agradecidos los servicios prestados #23358;8;3 agradecidos los servicios prestados #23358;8;4 agradecidos los servicios prestados #23358;8;5 agradecidos los servicios prestados #23358;8;6
J'ai omis un point important. Le mot ou groupe de mots est suivi d'un séparateur, ici ' #". Ce séparateur doit figurer en paramètre supplémentaire dans la fonction. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 15:13 | |
| | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 16:15 | |
| J'ai un doute, Pedro. Tu dis au début qu'il faut chercher chaque mot, individuellement. Puis,tu parles de groupes de mots, et il y a la notion de nombre de mots. Dans ton texte intial, si l'élimine les mots à ne pas considérer, j'arrive à ceci, pour la première phrase: - Citation :
- murciélago herradura willard fue descubierto República Democrática del Congo 2013 más probable es que extinga unas décadas
D'ailleurs, pour faire une parenthèse, est-ce qu'il faut exclure "del" également ? Il n'est pas dans la liste... Pour un nombre de mots égal à deux, est-e que je dois chercher: "murciélago" et "herradura" devant figurer dans la même ligne du fichier, puis "murciélago" et "willard" devant figurer dans la même ligne du fichier, etc, ou est-ce que je dois chercher: murciélago herradura", puis "murciélago willard" etc, pour toutes les combinaisons possibles de deux mots ? | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 16:18 | |
| Bonjour.
Dans la phrase suivante:
murciélago herradura willard fue descubierto República Democrática del Congo 2013 más probable es que extinga unas décadas.
Il faut rechercher murciélago herradura, puis herradura willard.
C'est-à-dire qu'il faut rechercher, si nombre_mots%>1, les mots contigus de la phrase.
Oui, il faut bien exclure del.
Mais la liste des mots à exclure se trouve dans une chaîne, à passer à la dll.
| |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 16:26 | |
| D'accord. Il s'agit bien d'un nombre imposé de mots consécutifs dans la phrase. Ce qui veut dire que pour une phrase de m mots et un nombre n imposé de mots consécutifs, il faut chercher m-n+1 combinaisons. Ca marche... | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Mer 28 Mar 2018 - 21:41 | |
| J'ai fait une première version que je voudrais te soumettre. Elle est dans KGF.dll placée dans le WebDav, dossier DLLs. I y a la fonction - Code:
-
res% = dll_call6("SearchMultipleStringsInTextFile",adr(t$),adr(fichier$),handle(combo%),adr(interdit$),nombre%,adr(marqueur$)) t$ = chaîne de caractères dont les différents mots sont à analyser fichier$ = chemin et nom du fichier à consulter combo% = numéro de la combo recevant les numéros des lignes trouvées interdit$ = chaîne de caractères contenant les mots à exclure, séparés et entourés de "*" nombre% = nombre de mots consécutifs à chercher marqueur$ = "#" (je ne sais pas vraiment à quoi ça peut servir dans ce contexte...) res% = -1 si erreur ou 0 si ok Je fais comme ceci: - Code:
-
' test_SearchMultipleStringsInTextFile.bas
dim res%
dim t$ t$ = "El murciélago de herradura de Willard fue descubierto en la República " t$ = t$ + "Democrática del Congo en 2013 y lo más probable es que se extinga en unas " t$ = t$ + "décadas. Con él, servicios prestados hasta la mitad de las especies endémicas del corazón de " t$ = t$ + "África estarán amenazadas en los próximos 50 años. Hasta ahora tenían " t$ = t$ + "que lidiar con el avance de los humanos, su agricultura y su ganadería, " t$ = t$ + "que les iban comiendo su territorio. Ahora el cambio climático ha tomado " t$ = t$ + "el relevo y les arrebatará hasta dos tercios del que les queda. A algunos " t$ = t$ + "animales, como este quiróptero, los dejará literalmente sin espacio."
dim interdit$ interdit$ = "*a*con*de*del*des*dos*el*en*este*la*las*le*les*lo*los*que*se*sin*su*un*une*y*"
dim fichier$ fichier$ = "....." : ' <=== mettre ici le nom du fichier en question
dim nombre% nombre% = 2
dim marqueur$ marqueur$ = "#"
dim combo% combo% = 100 combo combo: top 100,30 : left 100,10 : width 100,500
dll_on "KGF.dll"
res% = dll_call6("SearchMultipleStringsInTextFile",adr(t$),adr(fichier$),handle(combo),adr(interdit$),nombre%,adr(marqueur$)) message str$(res%)
end
Si une ligne est détectée plus d'une fois, elle ne sera signalée qu'une seule fois, pour autant. J'espère que ce fonctionnement est correct, mais je peux facilement supprimer ce test de doublons. | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Jeu 29 Mar 2018 - 7:56 | |
| Bonjour. Je viens de tester le code suivant, et aucun résultat n'apparaît dans la combo. La valeur de res% n'est pas affichée ! Un extrait du fichier est placé en fin de programme. Merci de la suite. - Code:
-
' test_SearchMultipleStringsInTextFile.bas
dim res%
dim t$ t$="vende a domicilio ." t$=lower$(t$)
dim interdit$ interdit$ = "*a*con*de*del*des*dos*el*en*este*la*las*le*les*lo*los*que*se*sin*su*un*une*y*"
dim fichier$ fichier$="fichiers\formes_verbales_espagnol_français_avec_complement.txt"
dim nombre% nombre% = 3
dim marqueur$ marqueur$ = " #"
dim combo% combo% = 100 combo combo%: top 100,30 : left 100,10 : width 100,500
dll_on "KGF.dll"
res% = dll_call6("SearchMultipleStringsInTextFile",adr(t$),adr(fichier$),handle(combo%),adr(interdit$),nombre%,adr(marqueur$)) message str$(res%)
end
' tengo que #329872;1;1 ' tengo que hacer #329861;1;1 ' tengo que hacer algo #329860;1;1 ' tengo que ser #329867;1;1 ' tengo que ser evacuada #329863;1;1 ' tengo que ser evacuadas #329864;1;1 ' tengo que ser evacuado #329865;1;1 ' tengo que ser evacuados #329866;1;1 ' tengo que tratar con #329868;1;1 ' vende a domicilio #348982;6;2 ' vende a domicilio #348982;6;3 ' vende a domicilio #348982;6;4 | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Jeu 29 Mar 2018 - 10:58 | |
| C'est corrigé. Reprends la DLL sur le WebDav, dossier DLLs.
Le problème venait d'un cas particulier: le critère recherché commençait au premier mot de la ligne dans le fichier. Or, tous les autres mots sont précédés d'un espace, sauf le premier. Et comme je suis obigé de faire précéder chaque mot du critère d'un espace afin d'éviter de m'arrêter sur une fin de mot qui serait identique au critère donné, je ne pouvais pas trouver le critère, dans le cas que tu as présenté.
Mais c'est corrigé, et la fonction trouve bien les 3 lignes concernées. | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Jeu 29 Mar 2018 - 11:40 | |
| Bonjour. Klaus, je ne parviens pas à réaliser ce que je voudrais. Voici un extrait du fichier: tengo que #329872;1;1 tengo que hacer #329861;1;1 tengo que hacer algo #329860;1;1 tengo que ser #329867;1;1 tengo que ser evacuada #329863;1;1 tengo que ser evacuadas #329864;1;1 tengo que ser evacuado #329865;1;1 tengo que ser evacuados #329866;1;1 tengo que tratar con #329868;1;1Le 1er mot de chaque ligne n'est pas précédé d'un espace. et le code: - Code:
-
' test_SearchMultipleStringsInTextFile.bas
dim res%, ticks
dim t$
t$="tengo que hacer ."
dim interdit$:interdit$="*a*con*de*del*des*dos*el*en*este*la*las*le*les*lo*los*que*se*sin*su*un*une*y*"
dim fichier$:fichier$="fichiers\formes_verbales_espagnol_français_avec_complement.txt"
dim nombre%:nombre%=3
dim marqueur$:marqueur$=" #"
combo 100:width 100,500
dll_on "KGF.dll"
ticks=number_ticks
res%=dll_call6("SearchMultipleStringsInTextFile",adr(t$),adr(fichier$),handle(100),adr(interdit$),nombre%,adr(marqueur$)) text 100,item_read$(100,1) message str$(number_ticks-ticks)
end
Le code bloque désespérément au niveau de l'appel de la DLL, même après téléchargement de la nouvelle version de kgf. Aurais-je omis quelque chose ? | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Jeu 29 Mar 2018 - 12:16 | |
| C'est normal, Pedro. Tu t'es fait piéger par tes propres règles... Tu donnes une phrase de 3 mots, et tu imposes un critère de 3 mots. Bien. Mais le mot "que" au milieu de ta phrase fait partie des mots à écarter. Et donc, le critère à rechercher devient: " tengo hacer " y compris l'espace au début et à la fin, servant de délimiteur. Et, forcément, cette chaînen n'est jamais trouvée... Deux solutions: 1. tu "étoffes" ton fichier afin d'y inclure les mêmes lignes mais sans les mots à exclure 2. tu modifies la liste des mots à exclure | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Jeu 29 Mar 2018 - 12:38 | |
| J'ai vu que tu essaies de mesurer les performances. Mais ma surcharge de Panoramic fausse les mesures. J'ai mis une nouvelle version de KGF.dll dans le WebDav, dossier DLLs. Maintenant, la fonction retourne: -1 en cas d'erreur n>=0 en cas de réussite, avec n étant le nombre de ticks globalement consommé par la fonction. En affichant ta valeur et la valeur de res%, tu peux mesurer, en plus, la surcharge due à Panoramic.
Je l'ai essayé sur ""vende a domicilio .". Le résultat est de 16 cycles. | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Demande de fonction spécifique avec KGF. Jeu 29 Mar 2018 - 13:37 | |
| Preuve que la fonction marche telle qu'elle est: j'ai modifié la liste des mots à exclure en rempla_ant "que" par "qxue". Résultat: 2 lignes trouvées en 15 à 16 cycles ! | |
|
| |
Pedro
Nombre de messages : 1594 Date d'inscription : 19/01/2014
| Sujet: Demande de fonction spécifique avec KGF. Jeu 29 Mar 2018 - 13:55 | |
| Bonjour.
OK, je comprends mieux maintenant.
Mais là, un problème subsiste.
Les mots contenus dans la liste des mots interdits ne doivent pas être traités, oui mais uniquement dans le cas où ces mots figurent en 1ère position dans le critère de recherche.
Donc, dans la phrase tengo que hacer, 'que' doit être pris en compte.
Si on avait la phrase suivante: que hacer ahora, dans ce cas, on ne tient pas compte de 'que'.
Pourrais-tu modifier la fonction en conséquence ?
Merci d'avance. | |
|
| |
Contenu sponsorisé
| Sujet: Re: Demande de fonction spécifique avec KGF. | |
| |
|
| |
| Demande de fonction spécifique avec KGF. | |
|