none
ma fonction transforme pas tout les mots en singulier RRS feed

  • Discussion générale

  • Bonjour,mon programme s'execute son erreurs mai ma fonction enleves pas tous les 's'(pluriel au singulier) par exemple dans mon fichier il ya deux mots "computers" l'un des 2 mots il l' enlevé le 's' ,l'autre non et pourtant cest le meme mot.cest bezzare je sais pas pourquoi? ma fonction transforme les mots du pluriel au singulier et les mots qui terminent avec 'ies' a 'y' ,mon fichier est en englais.voila mon code

    String ^ indexation::remove_s (String ^word)
    { 
    
     
    StringBuilder ^mot;
    mot = gcnew StringBuilder(word);
    
    
      
    	int len=word->Length;
    	
    	if(len <= 2 || (mot[len-1] != 's')) //not plural word
    return(word);
    	
    switch (mot[len-2]) {
    
    case 'e': //still 2possibilites 'es' , 'ies'
    
    	if(len > 3 && (mot[len-3]=='i') && mot[len-4] != 'e' && mot[len-4] != 'a')
    	{// 'ies' -> 'y'
    		mot[len-3] ='y';
    		mot[len-2] ='\0';//\n
        word=mot->ToString();	
    	}
    
    	else if(len>3&& mot[len-3] != 'a' && mot[len-3] != 'e' && mot[len-3] != 'i' && mot[len-3] != 'o')
    		//'es' -> 'e'
    	{mot[len-1] ='\0'; 
     
       word=mot->ToString();
    	}
    	break;
    
    case 'u':
     break; // do not remove 's'
    case 's':
    //case '\':       
    break;
    
    
    
    default:// remove final 's'
    	mot[len-1] ='\0'; 
     
     word=mot->ToString();
    	
    
    
    }
    
    return(word);
    }

     

    merci beaucoup.

    dimanche 9 mai 2010 11:58

Toutes les réponses

  • Bonjour,

    Votre fonction est correcte, pouvez-vous nous montrer comment vous lisez votre fichier et envoyez les mots à votre méthode ?

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    dimanche 9 mai 2010 15:14
    Modérateur
  • Bonjour, mon fichier contient des documents,chaque document commence par #I pour indequer un nouveau document,jai remarqué que ma fonction tansforme le dernier mot de chaque document(pluriel->singulier).voila la le code qui appel la fonction remove_s,#w,#T ces des sections dans le document que je doit enlever le s

    void indexation::stemmer (String ^name_stemmer,String ^name_fichier,String ^name_fichier1) 
    
    {String ^word;
    indexation indexation;
    
    if(name_fichier=="doc_stoped.txt" && name_fichier1=="doc_stemmer.txt")
    {
    
    StreamReader^ f3 = gcnew StreamReader( "doc_stoped.txt");
    StreamWriter^ f5 = gcnew StreamWriter("doc_stemmer.txt");
    
    
    if( File::Exists("doc_stoped.txt") && File::Exists("doc_stemmer.txt"))
    
    { word= f3->ReadLine() ;
       while(!f3->EndOfStream)
    		 {
    		 if(word[0]=='#' && word[1]=='I')
    		 {
       f5->WriteLine(word);  
    		 word= f3->ReadLine();
    		 } 
    		 
       else 
    			 if (word == "#W" || word == "#A" || word == "#K"|| word == "#T")
    			 {f5->WriteLine(word); 
    			 while ( !f3->EndOfStream && (word= f3->ReadLine())&& word[0] !='#')
    			 {if(name_stemmer=="remove_s")
    		  {word =indexation.remove_s(word); f5->WriteLine(word);}
        else{ word=indexation.stem_no(word);f5->WriteLine(word);}
    					 
    			 }}}
    }
    f3->Close();
    
    f5->Close();
    }
    mon fichier contient un mot par ligne
    merci pour votre aide
    dimanche 9 mai 2010 15:27
  • Bonjour,

    Avez vous essayé de voir avec le débogueur ce qui se passe au niveau de la condition :

    if(name_stemmer=="remove_s")

    Ca se trouve cette condition est fausse pour l'un des mots "computers" ?

    Cordialement


    Gilles TOURREAU - MVP C# - Architecte .NET/Consultant/Formateur
    dimanche 9 mai 2010 18:36
    Modérateur
  • Bonjour Fleurs,

     

    Avez-vous des nouvelles avec le débogage de la condition mentionnée par M. Tourreau ?

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    mardi 11 mai 2010 12:59
  • Bonjour A lex,

    merci mais ca marche pas tjr,il ya pas un probleme dans la condition,tjr la fonction transforme que le dernier mot de chaque document.je sais plus ou est le probleme.merci

    mardi 11 mai 2010 13:10
  • Bonjour,

     

    Avez-vous réussi a vérifier la valeur dans la variable name_stemmer dans le cas où la condition n’est pas vérifiée ?

     

    Cordialement,

    Alex


    Appel à contribution ! http://social.msdn.microsoft.com/Forums/fr-FR/vbasicfr/thread/bd974e0e-5519-4122-b8fc-3b998207c34f
    mercredi 12 mai 2010 08:13
  • bonjour Alex,jai arrité mon projet depuis 20jour a cause des examins.je viens de redémarrer mon projet ,alors jai le meme probleme avec la fonction mais dans le cas ou la condition nest pas vérifier le else  ca marche trés bien.svp  pouvez  vous maidé.
    lundi 31 mai 2010 20:21