|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : novembre 2011 Messages : 7 ![]() |
Bonjour,
je recherche une aide pour résoudre le problème suivant : j'ai 3 tables, phrases(id,texte) mots(id,texte) mots-dans-phrases(mots_id,phrases_id) La table mots-dans-phrases est constiuée avec les id (clé primaires) des tables phrases et mots. et liste la présence des mots dans les phrases. Plusieurs entrées identiques peuvent coexister. Mon objectif est selon un jeu de mots uniques donné, trouver la phrase qui en contient le plus. Merci d'avance |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 698 ![]() |
Compter le nombre de mot dans une chaine de caractères n'est pas une fonction standard de SQL.
Cette fonction peut peut-être exister dans certains SGBD ?? Elle n'existe pas sous FIREBIRD. Il est donc impératif d'indiquer ton SGBD (comme le demande les règles du forum )Dans le cas contraire, il faut passer par une procédure stockée et utiliser la fonction POSITION (dans FIREBIRD). |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : novembre 2011 Messages : 7 ![]() |
Il ne s'agit pas de compter les mots dans la phrase mais de trouver dans la 3eme table l'id de la phrase ayant le plus de correspondances différentes avec les mots d'une liste donnée.
Je sèche! |
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Inscription : novembre 2011 Messages : 7 ![]() |
SGBD : MYSQL (j'avais oublié)
|
|
|
00
|
|
|
#5 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 698 ![]() |
Là, à ma connaissance, pas d'autres choix que de passer par une PS en utilisant la fonction POSITION (ou équivalent).
Elle retourne la position du mot dans la chaine. Si le résultat est supérieur à zéro, le mot est présent et faire ainsi de suite pour les mots de la table "mots" et pour les chaines de la table "phrases". Je ne connais pas MySql, Sorry (je ne sais même pas si les PS existe sous MySql |
|
|
00
|
|
|
#6 |
|
Invité de passage
![]() Inscription : novembre 2011 Messages : 7 ![]() |
C'est une solution mais assez lourde je pense. Mysql supporte les PS.
Merci |
|
|
00
|
|
|
#7 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 698 ![]() |
oui et non
la PS ne sera demande qu'a la création/modification d'une phrase, non |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : novembre 2011 Messages : 7 ![]() |
En fait,
je stocke dans la table 1 les phrases. Je stocke dans la table 2 les mots. Je stocke dans la table 3 les correspondances mots<=>phrase au moment ou j'enregistre une nouvelle phrase. Par exemple la phrase "papa part en voyage" ayant l'id 23 lors de son enregistrement, je stokerai l'id du mot "papa" avec id 23. et ainsi pour les autres mots. Par la suite, j'ai une liste de mots par exemple (papa, revient, de, voyage), il me faut trouver l'id de la phrase contenant le plus de ces mots. L'id 23 en contiendra 2 (papa et voyage). |
|
|
00
|
|
|
#9 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 698 ![]() |
La PS doit être déclenchée à chaque ajout/modif des tables "Mots" et "Phrases".
Attention, pour un changement de phrases, il faudrait effacer toutes les occurrences de cette phrase dans la table "mots-dans-phrases" (pour tenir compte du cas d'un mot qui disparait de la phrase). en FIREBIRD, le principe serait Code :
|
||
|
|
00
|
|
|
#10 |
|
Invité de passage
![]() Inscription : novembre 2011 Messages : 7 ![]() |
Il y a confusion.
Pour écrire les données dans les tables pas de problème. A la limite il ne faut considérer QUE la 3eme table : id_mot | id_phrase qui garde enregistré que tel mot se retrouve dans telle phrase. A partir d'une liste de id_mot, retrouver le ou les id_phrase qui a/ont le plus de id_mot de la liste liés à lui. Pour une liste de 2 ou 3 id_mot pas de problème mais au-delà les combinaisons sont exponentielles! |
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Je pense à quelque chose comme ça (non testé):
Code :
|
||
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : novembre 2011 Messages : 7 ![]() |
Je pense que c'est surement la bonne voie.
Je vais tester demain et confirmer. Bon 1er novembre |
|
|
00
|
|
|
#13 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 698 ![]() |
Il y a 2 choses :
1 Construire la table "mots-dans-phrases" 2 Compter les mots dans les phrases, etc Pour 2, c'est facile. Il faut utiliser les fonctions d’agrégation et de comptage * quel est la phrase qui a le plus de mots Code :
Mais d'après ce que j'avais compris, c'était le remplissage de la table "mots-dans-phrases" qui posait des difficultés, non ? |
||
|
|
00
|
|
|
#14 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 698 ![]() |
oups désolé j'avais effectivement mal compris la question
![]() et pourtant son libellé était clair Disons que c'est la fatigue d'un jour férié désolé encore .... |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com