IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Algorithme de comptage des syllabes


Sujet :

Langage Delphi

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Algorithme de comptage des syllabes
    Bonjour,

    j'ai besoin de savoir l'algorithme de ce code Delphi parce que je travaille sur un logiciel sous vb6 et j'ai besoin de cette fonction qui compte le nombre des syllabes dans un mot.
    Quelqu'un m'aider svp !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
     procedure Syllabify(Syllables: TStringList; s: string);
      const
        Consonants   = ['b','B','c','C','d','D','f','F','g','G',
                'h','H','j','J','k','K','l','L','m','M','n','N',
                'ñ','Ñ','p','P','q','Q','r','R','s','S','t','T',
                'v','V','w','W','x','X','y','Y','z','Z'];
        StrongVowels = ['a','A','á','Á','e','E','é','É',
                        'í','Í','o','ó','O','Ó','ú','Ú'];
        WeakVowels   = ['i','I','u','U','ü','Ü'];
        Vowels       = StrongVowels + WeakVowels;
        Letters      = Vowels + Consonants;
      var
        i, j, n, m, hyphen: integer;
      begin
        j := 2;
        s := #0 + s + #0;
        n := Length(s) - 1;
        i := 2;
        Syllables.Clear;
        while i <= n do begin
          hyphen := 0; // Do not hyphenate
          if s[i] in Consonants then begin
            if s[i+1] in Vowels then begin
              if s[i-1] in Vowels then hyphen := 1;
            end else if (s[i] in ['s', 'S']) and (s[i-1] in ['n', 'N'])
                 and (s[i+1] in Consonants) then begin
              hyphen := 2;
            end else if (s[i+1] in Consonants) and
                        (s[i-1] in Vowels) then begin
              if s[i+1] in ['r','R'] then begin
                if s[i] in ['b','B','c','C','d','D','f','F','g',
                    'G','k','K','p','P','r','R','t','T','v','V']
                then hyphen := 1 else hyphen := 2;
              end else if s[i+1] in ['l','L'] then begin
                if s[i] in ['b','B','c','C','d','D','f','F','g',
                    'G','k','K','l','L','p','P','t','T','v','V']
                then hyphen := 1 else hyphen := 2;
              end else if s[i+1] in ['h', 'H'] then begin
                if s[i] in ['c', 'C', 's', 'S', 'p', 'P']
                then hyphen := 1 else hyphen := 2;
              end else
                hyphen := 2;
            end;
          end else if s[i] in StrongVowels then begin
            if (s[i-1] in StrongVowels) then hyphen := 1
          end else if s[i] = '-' then begin
            Syllables.Add(Copy(s, j, i - j));
            Syllables.Add('-');
            inc(i);
            j := i;
          end;
          if hyphen = 1 then begin  // Hyphenate here
            Syllables.Add(Copy(s, j, i - j));
            j := i;
          end else if hyphen = 2 then begin  // Hyphenate after
            inc(i);
            Syllables.Add(Copy(s, j, i - j));
            j := i;
          end;
          inc(i);
        end;
        m := Syllables.Count - 1;
        if (j = n) and (m >= 0) and (s[n] in Consonants) then
          Syllables[m] := Syllables[m] + s[n]   // Last letter
        else
          Syllables.Add(Copy(s, j, n - j + 1)); // Last syllable
      end;
     
     
    // To test the procedure yon can drop a Textbox and a Label on a form and
    //in the Change event of the Textbox write:
     
      procedure TForm1.Edit1Change(Sender: TObject);
      var
        Syllables: TStringList;
      begin
        Syllables := TStringList.Create;
        try
          Syllabify(Syllables, Edit1.Text);
          Label1.Caption := StringReplace(Trim(Syllables.Text),
            #13#10, '-', [rfReplaceAll]);
        finally
          Syllables.Free;
        end;
      end;

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 704
    Points : 5 323
    Points
    5 323
    Par défaut
    Où est exactement ton problème ?
    Tu ne comprend pas le code ?
    Tu n'arrive pas à l'adapter en VB ?
    Autre chose ?

  3. #3
    Membre éclairé Avatar de peter27x
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 029
    Points : 757
    Points
    757
    Par défaut
    Citation Envoyé par popo Voir le message
    Où est exactement ton problème ?
    Tu ne comprend pas le code ?
    Tu n'arrive pas à l'adapter en VB ?
    Autre chose ?
    Je comprends qu'il veut tout simplement qu'on traduise fissa ce code :

    1) soit directement en VB6
    2) soit vers un algorithme comme on en faisait pdt nos études

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 182
    Points : 212
    Points
    212
    Par défaut Sillabes
    A priori vioila ce que fait le code

    deux sets un avec les voyelles , un autre avec lmes voyelles accentet l'autre les consonnes (en minuscule et minuscule)


    Il gere quelques cas particuliers; momonosillabiques, mots composés

    Pour chaque mot il compte les sillables (hyphen)
    Il considere que slilable se sont des voyelles entourées de consonne

    Ex fad keaus

    attention tu as le problème des co,nsonnes doubles genre ss qui n'ont pas de variable au mlieu


    En gros voila ce qu'il fait
    (suggestion: tu commence par un upperstring ou lower etyt tu reduis les sets
    le in sera plus rapide)

    Boris
    Papy

    Nul ne pourra jamais vous empêchez d'être libre.

  5. #5
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    J'ai déjà vu la même question dans d'autres forum (dont celui de VB sur DVP me semble-t-il ?)

    Je ne sais pas quelle langue tu essaies de syllaber, mais sache qu'un algo qui découpe l'anglais ou l'allemand (je ne sais pas quelle langue est traité par l'algo que tu nous présente ?) ne sera pas efficace en français ... il existe plusieurs définition de la syllabe en français, différentes de celles utilisées dans d'autres langues, c'est un vrai casse-tête : une seule voyelle, une consonne + une voyelle, une consonne + une voyelle + une consonne ...

    bref c'est pas si simple ... courage

    info ici ou info là ou encore là si tu n'es pas rebuté par la théorie des expressions régulières ...
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  6. #6
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Clair ce genre d'algo dépend du langage...

    Exemple en allemand/anglais toutes les lettres se prononcent (si si même en allemand quand il y'a 4 ou 5 consonnes qui se suivent faut tout prononcer et laisser tomber un poumon ou une glotte)

    En français tu as des lettres muettes (ou qui le sont suivant le mot) par exemple ...

    bref cela ne sera pas forcement simple.
    bazar: http://www.improetcompagnie.com/publ...ctacles-6.html

    BÉPO la disposition de clavier francophone, ergonomique et libre: http://bepo.fr/wiki/Accueil

    Emacs Wiki: http://www.emacswiki.org/

    En attente de ce que produira: http://www.pushmid.com

Discussions similaires

  1. Algorithme pour representer des arbres quelconques
    Par yarf dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 21/08/2006, 14h49
  2. Algorithme génétique : représentation des différents éléments
    Par maniaco_jazz dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 04/08/2006, 17h08
  3. algorithme de compression des data en format PNG
    Par vbany dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 07/04/2006, 14h08
  4. [STATS] Outils de comptage des E/S
    Par BiM dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 08/08/2005, 12h00
  5. [C / API32 ] Algorithme d'indexation des couleurs
    Par elf dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 03/08/2005, 03h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo