Demande d'Aide pour Motteur de recherche - C - Programmation
Marsh Posté le 19-03-2005 à 21:32:47
zaynyy a écrit : j'aimerais savoir s'ils y avaient de gentilles personnes qui pourraient m'aider a realiser mon projet de langage C, dans le cadre de ma scolarité (ecole d'ingé). |
Il faut de 3 à 12 mois pour former un programmeur C. Tri et recherche dans le fichier indexé sont des choses simples (qsort(), bsearch()). Le problème est l'indexation qui dépend du format des fichiers de données (texte, binaire)...
Poste ton code et un exemple de fichiers à indexer avec des mots clés...
Marsh Posté le 20-03-2005 à 00:10:52
Emmanuel Delahaye a écrit : Il faut de 3 à 12 mois pour formar un programmeur C. Tri et recharche dans le fichier indexé sont des choses simples (qsort(), bsearch()). Le problème est l'indexation qui dépend du format des fichiers de données (texte, binaire)... |
Merci de ta réponse.
3 a 12 mois...!! C'est pas mal.
Voici exactement ce qui m'est demandé :
CREATION D'UN INDEX:
La premiere étape de votre projet concsiste a créer l'index de votre ensemble de fichiers. L'index associe a cq fichier un certain nombre de mots clés.
Ces mots clés doivent etre representatifs du contenu du fichier : en general le nom du fichier et les mots les plus frequents contenus dans le fichier. Les mots les plus frequents ne seront representatifs que si l'on prend pas en compte les mots d'usage courant comme les pronoms ou les articles.
L'indexation est une etape relativement couteuse, qui ne doit pas etre repetée inutilement. Il serait donc souhaitable de conserver l'index dans un fichier. Si l'ensemble des fichiers n'a pas changé, il suffira de lire l'index sans avoir a extraire de nouveau les informations clés de chq fichier.
Une fois l'index crée, la recherche a preprement parler peut etre effecteur. L'utilisateur en quete dinformation va entre un certain nombre de mots clés. Vous pourrez estimer que l'utilisateur souhaite retrouver tous ces mots clés dans les fichiers que vous lui proposerez (une autre méthode consiste a estimer qu'il souhaite retrouver un de de ces mots clés dans les fichiers). L'ordre des mots peut aussi avoir son importance.
Vous allez ensuite calculer la pertinence entre l'information cherchée et celle contenue dans les fichiers. Pour cela vous pourrez affecter a cq fichier un score (pourcentage) qui traduira l'adéquation entre les mots clés entrés par l'utilisateur et ceux qui caractérisent le fichier d'apreès l'index.
Si aucun mots-clés ne concordent le score sera nul ; si tous les mots concordent le score dependra du nombre d'occurences des mots clés dans le fichier, ou de leur place : le nom d'un fichier décrit généralement de manière succinte son contenu, si un des mots-clés fait partie du nom de fichier le score devra en tenir compte.
(pour cela le prof a donné des lignes annexes consitant a lister le contenu d'un repertoire avec la fonction opendir, readdir, closedir, que je ne connais pas encore)
A vous de definir et de justifier la façon dont vous allez sestimer ce score. C'est principalement sur ce critère que se différencient les moteurs de recherchs existants. N'hésitez pas vous memes a tester différents critères et a vérifier la pertinence des résultats obtenus.
Enfin vous indiquerez a l'utilisateur par ordre decroissant les fichiers les plus pertinents, ainsi que leur score. Limitez le nombre de fichers ainsi rendus, choississez entr eun nombre limite de fichiers qques soient leurs scores, ou un score limite qqe soit le nombre de fichiers.
INTERFACE GRAPHIQUE
Votre interface utilisera les fonctions de la bibliotheque LIBX. L'interface decra permettre a l'utilisateur d'entrer du texte (qque mots tout au plus) et de lancer la recherche a l'aide d'un bouton. Elle pourra par exemple, afficher les noms des fichiers les plus pertinents par ordre decroissant de pertinence, ainsi que leur score, une barre de défilement permettant d'acceder a l'ensemble de la liste. Vous pouvez egalement vous inspirer des moteurs de recherche existants.
Puis ensuite il y a des fonctions avancées : "et", "+", "", pour des liens entre les mots.
MAJ auto de l'index
Feedback : l'utilisateur peut lui meme indiquer si les resultats qui lui sont fournis sont pertinents a son sens. Vous pouvez inclure ce parametre pour modifier en conséquence le score de votre fichier par rapport aux mots clés qui étaient demandés.
J'ai consulté tres rapidement ton site au niveau des pointeurs mais je vois pas trop l'interet du pointeurs d'objet:
exemple :
/* Definition de la variable 'a' valant 4 */
int a = 4;
/* Definition d'un pointeur 'p' initialise' avec l'adresse de la variable 'a' */
int *p = &a;
/* Definition de la variable 'b' non initialisee */
int b;
/* recuperation de la valeur de 'a' dans 'b' via le pointeur 'p' */
b = *p;
/* 'b' vaut maintenant 4 */
Pourquoi on n'utilise pas directement la ligne suivante :
int a;
a=4;
int b;
b=a;
"un pointeur sur objet est une variable qui peut contenir l'adresse d'un objet"
Ici, la variable b contient l'adresse de a.
Pourquoi ne pas definir directement b par ce qui contient a, sans passer par le pointeur?
Autre question
J'utilise LINUX et EMACS à l'école.
Je viens d'installer MATLAB 7 et j'aimerais savoir s'il était possible de l'utiliser comme EDITEUR et COMPILATEUR et EXEC des fichiers *.c tel que sous linux avec sa console.
Marsh Posté le 20-03-2005 à 09:22:30
zaynyy a écrit : J'ai consulté tres rapidement ton site au niveau des pointeurs mais je vois pas trop l'interet du pointeurs d'objet: |
Cette partie là du site sert à répondre à des questions souvent posées, pas à faire une initiation au C. Il y a une autre partie du site qui fait un début de commencement d'initiation.
Pour apprendre le C, il faut, comme je l'ai souligné, utiliser un bon livre comme le Kernighan & Ritchie.
Citation : |
Le rôle des pointeurs est principalement de passer l'adresse d'un paamètre à une fonction, soit parce qu'on ne sait pas faire autrement (tableaux, chaines de caractères), soit pour optimiser le code (pour accéder à une structure, son adresse suffit), soit parce qu'on veut modifier une variable dans la fonction appelée. Ces notions n'ont de sens que si on connait quelques bases du langage C...
Les pointeurs ont aussi un tas de rôles en programmation 'avancée' (variables dynamiques, structures de données ...)
Réaliser en C le projet que tu décris sans aucune connaissance de ce langage me parait une tâche difficile et surtout longue. Quelles sont tes connaissances en programmation ? Le langage C n'est pas un langage de débutant total. Trop de notions complexes...
En plus, on te demande de réaliser une interface graphique sous X, ce qui est encore une autre paire de manches... Moi, je parlais du C standard...
Marsh Posté le 20-03-2005 à 10:30:51
Une bonne maniere de realiser ce projet dans le temps imparti serait de l'ecrire en Python + PythonTk (ou en Ruby).
Le Python s'apprend seul en moins d'une semaine, et me parait tout-a-fait adapte a ce projet d'etudiant, en tout cas infiniment plus que le C. Cela laissera meme le temps de tester diverses methodes d'indexation, ce qui est l'interet principal du projet.
Tu pourras continuer l'apprentissage du C dans un second temps, et au moins, tu as de bonnes chances de rendre ton projet dans les temps.
Enfin, si tu tiens absolument a faire du C pour ton projet, commence a ecrire un code qui marche en Python, a chiader ton algo d'indexation, et si tu as encore du temps a la fin, tu pourras reecrire l'algo d'indexation en C, que tu appelleras a partir de Python.
Marsh Posté le 20-03-2005 à 14:18:18
el muchacho a écrit : Une bonne maniere de realiser ce projet dans le temps imparti serait de l'ecrire en Python + PythonTk (ou en Ruby). |
Merci pour ces réponses. Le projet doit être réalisé en C, cela est imposé par le professeur.
Citation : Réaliser en C le projet que tu décris sans aucune connaissance de ce langage me parait une tâche difficile et surtout longue. Quelles sont tes connaissances en programmation ? Le langage C n'est pas un langage de débutant total. Trop de notions complexes... |
J'ai étudié les notions de base jusqu'aux boucles puis un petit apreçu des pointeurs, des structures, tableaux, et graphisme. Je pense qu'il me faut surtout un bon logiciel pour pouvoir mettre en application directe toutes les notions que j'apprendrais au fur-a-mesure. J'utilise Linux à l'école et a partir de la console de Linux, je pouvais executer directement un fichier compilé (emacs, et eterm). Il y a Matlab mais je ne sais pas si il est apte a cela. Sinon je vais rester avec dev c++ qui me compile mon programme et me génère un fichier executable. Qu'en pensez vous?
Marsh Posté le 20-03-2005 à 15:23:34
zaynyy a écrit : J'ai étudié les notions de base jusqu'aux boucles puis un petit aperçu des pointeurs, des structures, tableaux, et graphisme. |
Il n'y a pas de graphisme en C. Ce dont tu parle, c'est l'utilisation de fonctions systèmes (En l'occurence, celles de X/Motif sous unixoide).
Citation : |
Tu parles de l'environnement de développement, c'est ça ?
Citation : |
Dev-C++ fonctionne sous Linux ?
Marsh Posté le 20-03-2005 à 15:58:19
Oui, je parle de l'environnement de travail.
Actuellement, je suis sur XP avec dev c++. A l'école, il s'agit d'emacs de Linux. J'aimerais savoir quel est l'environnement (logiciel, etc...) le plus adapté.
Marsh Posté le 20-03-2005 à 16:46:07
zaynyy a écrit : Oui, je parle de l'environnement de travail. |
Si tu dois faire du développemùent graphique sous X, Dev-C++ n'ira pas. Il te faudra recréer un environnement pseudo Linux sous XP avec cygwin par exemple... Bon courage, et il faut une grosse machine...
Marsh Posté le 20-03-2005 à 16:57:50
Autant installer Linux si Cygwin a l'air trop compliquer. Non?
Marsh Posté le 20-03-2005 à 17:03:25
zaynyy a écrit : Autant installer Linux si Cygwin a l'air trop compliquer. Non? |
Oui, mais c'est toi qui parle d'XP...
Marsh Posté le 20-03-2005 à 17:34:24
Oui c'est vrai. Mais là je vais tester Cygwin : je l'installe pour le moment. Si il me convient, je le garderai sinon je prendrerai tout simplement Linux.
Marsh Posté le 20-03-2005 à 18:32:25
Voila je test actuellement cygwin, tout s'est bien installé apparemment.
En suivant le tuto sur http://www.funix.org/fr/windows/cygwin.htm
je n'arrive pas executer le programme hello world !
En effet, j'efefctue les opération suivantes :
"On va écrire le traditionnel programme hello.c qui va nous afficher Hello World !!. Pour cela placez vous dans votre home directory
cd
Puis tapez
vi hello.c
Voici le contenu du dit-fichier:
int main () {}
printf ("Hello world!\n" );
return 0;
}
"
Mais lorsque je tape vi hello.c , cygwin me renvoie
bash: vi: command not found
Idem pour gcc etc...
Par hasard, sauriez vous d'ou cela provient?
Les commandes man (par exemple man printf) marchent correctement.
Marsh Posté le 20-03-2005 à 18:50:38
Tu n'as pas configuré le chemin vers c: /cygwin/bin, c: /cygwin/usr/bin et c: /cygwin/usr/local/bin
Honnêtement, tu t'emmerderas moins en installant une distrib Linux, où tout est déjà configuré comme il faut.
Marsh Posté le 20-03-2005 à 19:02:59
Honnetement, je suis d'accord avec le muchacho, installe linux, par contre il te faut alors une partition de libre pour l'installer.
Pour la partie graphique tu vast'amuser sous linux, nous, on nous a faitdévelopper sous Gtk -- et c'était la merde car utilisable sous une seule distribution de linux
Marsh Posté le 20-03-2005 à 19:03:07
el muchacho a écrit : Tu n'as pas configuré le chemin vers c: /cygwin/bin, c: /cygwin/usr/bin et c: /cygwin/usr/local/bin |
Merci pour ta réponse. Je vais en effet installer Linux, tu as tout a fait raison. Mais une toute derniere petite tentative avec cygwin : comment puis je configurer les chemins cités stp? Je galère c'est vrai depuis un moment sur cela. Pourtant j'ai également emacs version windows installé sur mon pc.
Marsh Posté le 20-03-2005 à 19:04:50
LordHarryPotter a écrit : Honnetement, je suis d'accord avec le muchacho, installe linux, par contre il te faut alors une partition de libre pour l'installer. |
Mince alors une partition de combien faudrait il stp?
J'ai un vieux hdd de 2go. Peut être que je peux installer Linux dessus uniquement pour de la programmation. 2go c'est trop faible non?
Marsh Posté le 24-03-2005 à 22:51:47
aaahaaahahahhaaaaahhhhhaa
je cherche pas les solutions !
c'est comme chercher des cours en ligne. Je l'ai bien préciser d'ailleurs ds mon topic.
Et si ta atteris là, c'est pas par hasard! Tu cherchais quoi?
De toute façon, sa m'a trop avancé!!
Un ptit bonjour a granet de passage.
Marsh Posté le 29-03-2005 à 23:09:10
Petite question de passage
Puis je utiliser la fonction suivante pour mon moteur de recherche afin qu'il reconnaisse un mot donné :
strcmp(<s>, <t> )
compare <s> et <t> lexicographiquement et fournit un résultat:
négatif
si <s> précède <t>
zéro
si <s> est égal à <t>
positif
si <s> suit <t>
Sinon, devrais je plutot utiliser une boucle avec des if et des chaines de caracteres du genre :
int L; /*Longueur de la chaine.*/
int l; /*numéro de la ligne.*/
int c; /*numéro de la colonne.*/
char a;
char TXT[200]; /*le mot recherché.*/
char file[l][c]; /*J'ai considéré qu'on va parcourir un fichier texte pouvant être considéré comme un tableau a l lignes et c colonnes.*/
/* Saisie des données (mot a recherché)*/
printf("Entrez le mot a recherche (max.200 caractères) :\n" );
gets(TXT);
for (i=0; a!='/0';i++); (Je parcours toute une ligne d'un fichier. Je n'ai pas encore décrit parfaitement cette étape car je m'interesse ici surtout a la comparaison de caracteres)
for (c=0; a!='/0';c++); (Je parcours les colonnes)
for (L=0; TXT[L]; L++);
while (TXT[L]==file[i][j])
c++;
printf("Le mot recherché se trouve à la ligne %d et a la colonne %d,l,c);
j++;
if (c=='/0') i++;c=0;
Tout cela est encore trop trop vague pour moi. Je sais que il y a pas mal de fautes, mais je veux surtout savoir si une méthode de ce type peut correspondre a realiser ce projet...
Marsh Posté le 29-03-2005 à 23:53:28
utilise les balises fixed et cpp pour afficher des morceaux de man et du code
Marsh Posté le 30-03-2005 à 00:57:24
Ah oui, comme j'avais écris en réponse rapide, javais pas vu
Marsh Posté le 30-03-2005 à 09:06:13
zaynyy a écrit :
|
Oui, si tu cherches une correspondance exacte. Pour un moteur de recherche, c'est évidemment beaucoup trop rigide.
Citation :
|
gets() est un bug qu'il ne faut pas utilise. Je recommande ceci:
|
qui s'utilise comme ça:
|
Détails ici:
http://mapage.noos.fr/emdel/notes.htm#saisie
Marsh Posté le 30-03-2005 à 15:18:09
Petite precision :
printf("Entrez un nombre : " );
fflush (stdout);
J'ai lu sur ta page
"Il y a trois critères qui déclenchent l'émission réelle des caractères :
et parmi ces trois là, il y a ce "fflush (stdout);"
Mais si on ne met pas ce "fflush (stdout)" , on obtiendra la meme chose sur la sortie non?
printf("Entrez un nombre : " );
fflush (stdout);
Avec ou sans ce fflush, on obtient sur la sortie "Entrez un nombre : "
Ce fflush sert a passer par le tampon et c'est l'unique utilité?
Marsh Posté le 30-03-2005 à 15:23:21
[les balises 'fixed' ou 'cpp' please...]
zaynyy a écrit : Petite precision :
|
Ca dépend du système. Pour avoir un comportement portable, il faut ce forçage.
Marsh Posté le 30-03-2005 à 19:09:20
Ok j'ai essayé un petit programme de debutant qui affiche sur l'écran , le mot tapé a l'entrée standard mais je n'arrive pas à afficher le i-ème caractère de ce mot. J'ai cherché un peu partout mais je ne trouve pas pourquoi j'ai faux. Voici le code :
Code :
|
Et pour le " fflush(stdout) " , il faut le mettre donc a chaque fois qu'on rentre un printf() ?
Je teste cette fonction pointeur avec scanf() et printf(), puis je verrais la différence avec ton fgets().
Marsh Posté le 30-03-2005 à 21:32:21
zaynyy a écrit : Ok j'ai essayé un petit programme de debutant qui affiche sur l'écran , le mot tapé a l'entrée standard mais je n'arrive pas à afficher le i-ème caractère de ce mot. J'ai cherché un peu partout mais je ne trouve pas pourquoi j'ai faux. Voici le code :
|
Ce code est très faux.
Quelle salade !
Citation : Et pour le " fflush(stdout) " , il faut le mettre donc a chaque fois qu'on rentre un printf() ? |
Si la chaine n'est pas terminée par un '\n', oui.
Citation : Je teste cette fonction pointeur avec scanf() et printf(), puis je verrais la différence avec ton fgets(). |
Meuh ! Ce n'est pas 'mon' fgets(). C'est celui du langage C.
Marsh Posté le 19-03-2005 à 21:09:56
Bonjour,
j'aimerais savoir s'ils y avaient de gentilles personnes qui pourraient m'aider a realiser mon projet de langage C, dans le cadre de ma scolarité (ecole d'ingé).
Il s'agit de réaliser qui sert a retrouver une information précis au sein d'un ensemble de fichiers.
Deux étapes :
l'indexation,qui consiste a extraire des mots clés de chacun des fichiers; et l'interrogation, qui consiste a comparer les mots de la recherche avec les mots-clés.
Je ne cherche pas ce projet TOUT FAIT mais surtout de comprendre et de maitriser ce langage qui est le C. Je consulte pour le moment un site de cours en ligne. Mais, ce projet qui doit etre rendu dans 1 mois et demi, vous parait il long a realiser pour un novice?
J'ai qque petites bases mais j'apprends avec dev c++ et le cours en ligne. Combien d'heures estimez vous (en moyenne pour un eleve moyen, ni mauvais ni bon) nécessaires a la réalisation du projet?
Merci
Message édité par zaynyy le 24-03-2005 à 23:51:01