Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment découpé une chaîne de caractère en syllabe?

26 mars 2011 à 12:36:35

Bonjour,
j'émerai créer un logiciel pour des enfents dyslexique qui décompose chaque mots en syllabe a fin de pouvoir faire un système de son couleur par exemple tout les on en couleur marron tout les e en couleur bleus.
Le problème c'est que pour y arrivé il faudré que j'ai un dictionnaire de mots déjà découpé en syllabe ou alors il faudré utiliser une boucle while qui le fasse automatiquement a partir de cette liste: http://www.lexique.org/listes/liste_syllabes.php
Le problème c'est que sa m'a l'air tros compliqué à réaliser.
Par exemple si je cherche en premier la syllabe an est que je tombe sur un mot du style anneau sa pose probleme car sa n'a rien a voir avec le son an et sa risque d'être découpé comme se si: an_neau .

  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2011 à 14:23:23

Salut,

Il semblerait que ton lien ne fonctionne pas. Pourrais-tu nous faire parvenir le bon ?

Bonne journée,
Lucas-84
  • Partager sur Facebook
  • Partager sur Twitter
Staff désormais retraité.
26 mars 2011 à 14:50:30

Par fonctionne pas tu veut dire quoi? c'est bizzard car moi j'ai bien la liste qui s'affiche :
http://www.lexique.org/listes/liste_syllabes.txt
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mars 2011 à 15:02:09

Le C c'est quand même pas le must pour faire ce type de chose, moi je te conseil de faire sa avec un autre langage plus adapter, par exemple le Perl et très pratique pour manipuler les chaine de caractères.
  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2011 à 15:15:42

Bien que le le c soi pas pratique pour les chaines les programme écrit en c sont plus rapid, et comme plus tard je compte ajoutter d'autre fonctionalité il faut mieux utiliser se langage surtout qu'avec avec la glib est gtk on peut faire pas mal de chose.
je sais déja en gros comment faire dans ma tête mais il me faudré juste un dictionnaire de mot découpé en syllabes.
Au pire j'ai prevu de proposer a differente personne de constitituer se dictionnaire via une base de données grasse à php.
Et plus tard je prevois aussi de créer une version simplifié en php.

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mars 2011 à 15:30:11

La base de donné est une solution mais le problème c'est qu'il faut la crée, la remplir, l'entretenir et après il vas y avoir le problème du temps de recherche dans la base. Distinct devant ton problème je me tournerait vers l'heuristique même si c'est très compliquée est difficile a mettre en place, et que je n'est aucun connaissance dans ce domaine.
En analysent le mot avec diverse règle, avec ton exemple anneaux, un 'a' suivit d'un 'n' normalement sa fait la syllabe 'en', mais dans anneaux il y a un deuxième 'n' derrière donc sa ne peut pas faire 'en'. Si tu passe par cette solution c'est la que les regexp de Perl (accessible en C grace a la glib), peuvent être utile.
  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2011 à 15:58:37

L'orthographe française me parait trop anarchique pour faire ça avec des expressions régulières.

Typhon
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mars 2011 à 16:08:38

Je pense qu'avec, beaucoup de test et d'expression régulière, globalement en montant une machine a gaz, on peut arriver a monter un truc qui fonctionne avec tout les mots. Et pas selement ce qui sont dans la base de donnée.
  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2011 à 22:05:57

Franchement, pas besoin d'une telle usine à gaz, en tout cas, l'expression régulière ne serait pas si compliquée.
Comment fais-tu pour compter les syllabes d'un mot en français ?
Il me semble que ça se fait linéairement, avec le découpage syllabes/consonnes comme repère, plus des syllabes plus compliquées. Un automate fini peut le faire très bien (ça reviendrait d'ailleurs à peu près à des expressions régulières, mais en en comprenant la logique...).
Sinon, après consultation d'un moteur de recherche :
découpage pour l'anglais (similaire pour le français).
Des articles plus théoriques : ici, ou .
Les mots clés "syllabation automatique du français" pourraient donner des résultats pertinents.
  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2011 à 22:46:42

Citation : programLyrique

Franchement, pas besoin d'une telle usine à gaz, en tout cas, l'expression régulière ne serait pas si compliquée.
Comment fais-tu pour compter les syllabes d'un mot en français ?
Il me semble que ça se fait linéairement, avec le découpage syllabes/consonnes comme repère, plus des syllabes plus compliquées.



C'est complètement faux. Le mot "question" ne se syllabe pas "qu/es/ti/on", par exemple, mais "ques/tion". Entre les lettres muettes, les consonnes doubles, les digraphes et les trigraphes, il y a trop de cas particuliers.

L'orthographe française est fondamentalement illogique et truffée d'exceptions (et c'est ça qui pose de gros problèmes aux dyslexiques). D'une manière générale, un mot ne se prononce pas comme il s'écrit. Or, la syllabation est un phénomène phonologique, donc on ne peut pas se contenter de faire des codes qui trient les mots en fonction des lettres avec lesquelles ils s'écrivent.

On ne peut pas couper au fait qu'il faut, à un moment où un autre, coder en dur tout les cas particuliers, soit directement dans le logiciel de syllabation, soit dans un logiciel de transcription phonémique dont la sortie peut ensuite être analysée par le logiciel de syllabation.

Typhon
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mars 2011 à 23:23:14

On peut essayer de trouver une solution intermédiaire, il y a un certain nombre de mots qu'on peut arriver a découper avec la solution de programLyrique, mais tu a raison on ne peut appliquer sa a l'ensemble du dictionnaire et certain mots ne seront pas dé-coupable avec cette méthode, c'est la qu'intervient la base de donner avec l'ensemble des mots qui ne peuvent pas être découper par l'algorithme.

Je vois la chose comme suis :
*1 : On récupéré le mots
*2 : On vérifie qu'il n'est pas dans notre base de donnée des mots blacklistés : Si il y est on renvoie le découpage qui correspond. Sinon le fait passer par l'algorithme, qui renvoie le découpage.

Avec cette méthode on réduit considérablement la taille de la base de donnée, et donc les problème inérant a sa taille, entretient création ect ... . Et pour la création de la base on fait juste passez l'algorithme sur un fichier qui contient le dictionnaire, et on relève les mots qui ne corresponde pas.

Bon bah y reste plus qu'a ce mettre au boulot bon courage ^^.

EDIT : J'ai fait 2 3 petit recherche, j'ai notamment trouver cette page, qui est assez intéressante, apparemment (j'ai lut en diagonale) il travaille sur un syllabation automatique du français parler est non du français écrit. Mais sur la fin il dise, si j'ai tout compris, qu'il ont réussi a détecter 93% des coupure syllabique, avec d'après eux des règle simple. Il y a donc bonne espoirs d'arriver a faire un truc fonctionnelle avec très peu d'exception.
  • Partager sur Facebook
  • Partager sur Twitter
26 mars 2011 à 23:29:15

Ça fait quand même une base de donnée de plusieurs milliers de mots. Et il y a des mots dont ne peut même pas donner de syllabation satisfaisante orthographiquement comme "croyant".

Typhon
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 mars 2011 à 23:47:02

Cf edit

Et puis plusieurs milliers de mots c'est toujours mieux qu'un dico entier.
  • Partager sur Facebook
  • Partager sur Twitter
27 mars 2011 à 0:18:05

Je crois que leurs 93 %, c'est sur le corpus dédié du site, et ils expliquent eux-mêmes que le corpus manque de cas marginaux. En plus ils emploient des règles bizarres, comme syllaber "pavement" en "pa/ve/ment" ou "pa/vement", alors que j'aurais tendance à le syllaber "pave/ment" (tel qu'il se prononce).

Mais bon, ce n'est pas une science exacte.

Typhon
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
27 mars 2011 à 13:40:18

Bon d'accord c'est du francais parler avec leur propre corpus, y applique des règle bizzard mais si on arrive a ne syllabe que 80% c'est deja un bon score. Et au debut il parle de 2 type qui ont fait réussi a découper du français écrit Duchesne-Degey, j'avais regarder rapide sur google mais je vais approfondire la recherche aujourd'hui.
  • Partager sur Facebook
  • Partager sur Twitter
27 mars 2011 à 18:46:43

@Typhoeus : Je ne vois pas en quoi ce que j'ai dis est complétement faux : je ne parle pas pour rien de "syllabes plus compliquées".
De plus, le contre-exemple avec "qu" est particulièrement mal choisi, puisque "qu" constitue en français une pseudo-consonne.
Les articles présentés dans mon premier post expliquaient comment traiter ces cas plus complexes.
  • Partager sur Facebook
  • Partager sur Twitter
27 mars 2011 à 21:12:04

Citation : programLyrique

@Typhoeus : Je ne vois pas en quoi ce que j'ai dis est complétement faux : je ne parle pas pour rien de "syllabes plus compliquées".
De plus, le contre-exemple avec "qu" est particulièrement mal choisi, puisque "qu" constitue en français une pseudo-consonne.



Quand est-ce qu'un nombre de contre-exemples est suffisant pour détruire une généralité, selon toi ?
Il y a des myriades de mots qui ne peuvent pas se syllaber selon une règle facile à répercuter sur le plan orthographique pour la bonne raison que le français ne s'écrit généralement pas comme il se prononce. Par exemple, "gu" constitue aussi une pseudo-consonne orthographique... sauf quand ça n'est pas le cas. De même "tion" constitue une syllabe spéciale qui se prononce "sion", mais pas toujours. Il y a un nombre de combinaisons trop élevé pour qu'une simple expression régulière puisse faire efficacement le boulot. Comme si ça ne suffisait pas, il faut rajouter la notation complètement incohérente des semi-consonnes et les lettres qui font partie de plusieurs syllabes (comme le y des verbes en "-oyer")


Citation

Les articles présentés dans mon premier post expliquaient comment traiter ces cas plus complexes.



Non, ils proposent des méthodes de syllabation qui fonctionnent sur des transcriptions phonémiques. Ce qui a plus de chance d'aboutir, mais n'est pas d'un grand secours aux dyslexiques.

Typhon
  • Partager sur Facebook
  • Partager sur Twitter
27 mars 2011 à 22:22:18

Citation : Typhoeus


Quand est-ce qu'un nombre de contre-exemples est suffisant pour détruire une généralité, selon toi ?



La syllabation est sans doute assez complexe (quelques semaines de travail) mais ça me paraît pas un problème vraiment insurmontable même s'il est certainement inenvisageable de traiter tous les cas.


Par exemple, j'ai pris les premières phrases du cours C officiel :


Vous aimeriez apprendre à programmer, mais vous ne savez pas par où commencer ?
(autrement dit : vous en avez marre des cours trop compliqués que vous ne comprenez pas ?



et ça ne me paraît pas trop dur à syllaber de façon automatique :


Vous ai-me-riez a-ppren-dre à pro-gra-mmer, mais vous ne sa-vez pas par où co-mmen-cer ?
(au-tre-ment dit : vous en a-vez marre des cours trop com?pli-qués que vous ne com-pre-nez pas ?



D'ailleurs, il serait intéressant de connaître le nombre de syllabes possibles en français, pas si important j'ai l'impression. Fondamentalement, les voyelles (au sens large, au ou ai an im etc sont des voyelles) déterminent le découpage.
  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2011 à 0:08:36

Citation : candide


Vous ai-me-riez a-ppren-dre à pro-gra-mmer, mais vous ne sa-vez pas par où co-mmen-cer ?
(au-tre-ment dit : vous en a-vez marre des cours trop com?pli-qués que vous ne com-pre-nez pas ?



Y a des pho-tes!
Vous ai-me-riez ap-pren-dre à pro-gram-mer, mais vous ne sa-vez pas par où com-men-cer ?
(au-tre-ment dit : vous en a-vez mar-re des cours trop com-pli-qués que vous ne com-pre-nez pas ?


Sinon j'avais un jour eu dans l'idée de faire un TTS en enregistrant la prononciation de toutes les syllables possibles (bon je l'avais pas fait mais j'y avais réfléchi) et je pense qu'avec un bon fichier de syllables (celui que tu cites a pas l'air exclusivement francais, me souvient pas de mot contenant "bORktk 1 0.03" par exemple!) mais je pense qu'en recherchant d'abord les syllables les plus longues dans un mot , on dois pouvoir le décomposer de façon potable.
  • Partager sur Facebook
  • Partager sur Twitter
** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
28 mars 2011 à 0:34:46

Citation : breizhbugs


Y a des pho-tes!

Vous ai-me-riez ap-pren-dre à pro-gram-mer, mais vous ne sa-vez pas par où com-men-cer ?
(au-tre-ment dit : vous en a-vez mar-re des cours trop com-pli-qués que vous ne com-pre-nez pas ?




C'est discutable (mar-re par exemple), largement affaire de conventions et ne change pas fondamentalement la complexité de l'algorithme.
  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2011 à 1:26:25

Citation : candide

Citation : Typhoeus


Quand est-ce qu'un nombre de contre-exemples est suffisant pour détruire une généralité, selon toi ?



La syllabation est sans doute assez complexe (quelques semaines de travail) mais ça me paraît pas un problème vraiment insurmontable même s'il est certainement inenvisageable de traiter tous les cas.



Oui, ça parait probable.


Citation


D'ailleurs, il serait intéressant de connaître le nombre de syllabes possibles en français, pas si important j'ai l'impression. Fondamentalement, les voyelles (au sens large, au ou ai an im etc sont des voyelles) déterminent le découpage.



Fondamentalement, les voyelles au sens phonémique du terme déterminent le découpage. C'est à dire /i/ /y/ /u/ /e/ /ø/ /o/ /ə/ /ɛ/ /ɔ/ /a/ /ɑ/ plus les trois nasales.

Le problème, c'est qu'il n'y a pas de correspondances entre les phonèmes et les lettres ou combinaisons de lettres. La lettre i ne correspond pas tout le temps à la voyelle /i/ et réciproquement la voyelle /i/ n'est pas toujours notée "i".

Ceci dit, j'ai trouvé une page intéressante sur le sujet : Liste_des_graphies_des_phonèmes_du_français

Tu m'en diras des nouvelles.

Typhon
  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2011 à 10:22:35

Ce n'est pas si compliqué que cela et peut très bien se faire avec des expressions régulières.
Ce n'est juste pas à la portée de tout le monde.

L'analyse est quasi-identique à celle qu'effectue un compilateur (en plus simple mais sans doute plus longue).

Prenez le caractère * et le nombre de cas tordus possibles que vous pouvez faire si vous pensez que les cas particuliers empêchent une bonne analyse.
  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2011 à 12:35:38

Citation : candide

Citation : breizhbugs


Y a des pho-tes!

Vous ai-me-riez ap-pren-dre à pro-gram-mer, mais vous ne sa-vez pas par où com-men-cer ?
(au-tre-ment dit : vous en a-vez mar-re des cours trop com-pli-qués que vous ne com-pre-nez pas ?




C'est discutable (mar-re par exemple), largement affaire de conventions et ne change pas fondamentalement la complexité de l'algorithme.


Si par exemple on fait un algorithme pour faire des césures, alors non: il y a des règles "une ma-re" mais "j'en ai mar-re!"
Si par contre on s'en sert pour trouver la prononciation, alors oui peut être qu'on obtient le même phonème!
sinon consulter le wiki donne quelques piste de réflexion: http://fr.wikipedia.org/wiki/Syllabe , http://fr.wikipedia.org/wiki/Coupure_de_mot
  • Partager sur Facebook
  • Partager sur Twitter
** La doc, c'est comme le PQ: ça sert à se démerder tout seul **
28 mars 2011 à 13:48:21

Citation : dimitry


Prenez le caractère * et le nombre de cas tordus possibles que vous pouvez faire si vous pensez que les cas particuliers empêchent une bonne analyse.



Comment traiter "gu" ? Le plus souvent, il faut le traiter comme une consonne, mais pas toujours (cf "aiguille", "figure").

Il n'y a pas de règle. On ne peut pas dire que "CguV" doit être syllabé "C-gu-V" par exemple. En fait, ça pose même des problèmes de prononciations, puisqu'il y a des mots où le digraphe "gu" a changé de prononciation : "arguer" "aiguiser".

Des cas comme ça, il y en probablement des dizaine en français, dont certains sont très répandus.

Typhon
  • Partager sur Facebook
  • Partager sur Twitter
28 mars 2011 à 14:14:19

Tu t'y prend mal : il ne faut pas découper le mot à la volée mais l'analyser dans son ensemble pour trouver les syllabes.
Dans ton exemple, pour figure, on voit que "gu" est suivi de la lettre "r". Elle forme donc une syllabe.
Pour aiguille, "gu" est suivi de "i" puis de "lle".
On sait donc que la syllabe n'est pas "gui" mais "gu" puis "ille".

Cela reste qu'une analyse classique d'un langage. C'est possible et relativement simple quand on s'y connaît un minimum.
  • Partager sur Facebook
  • Partager sur Twitter
13 novembre 2011 à 12:42:13

Bonjour à tous !
Ce sujet m’a intéressé, et je me permets d’y revenir bien qu’il soit un peu ancien — ne serait-ce que parce que d’une part ça n’est pas non plus très ancien, d’autre part en cherchant sur Google par exemple on peut tomber dessus et avoir la curiosité de le lire — comme ç’a été mon cas, et ça m’a bien intéressé !
Je vais essayer de faire en sorte, donc, que ce soit lisible.


Il me semble que plusieurs choses ont été mélangées, et que pour les uns et les autres le terme “syllabation” ne recouvre pas la même réalité pour les uns et les autres.
Il faut bien distinguer par exemple l’écrit et l’oral. L’exemple de pavement m’a frappé. Pour l’écrit, la seule syllabation est pa-ve-ment. Si l’on peut envisager pave-ment et pa-vement, c’est uniquement parce que la voyelle -e- [ə] est instable en français (on parle parfois de schwa) et peut disparaître. Il est important de remarquer que c’est peut, et non pas doit.
Prenez le mot revenir ; syllabation écrite (même si ce concept, je vais y revenir, est lui-même flou) : re-ve-nir ; mais à l’oral, certains disent r'venir, d’autres rev'nir. Il me paraît donc bien téméraire de vouloir légiférer à l’écrit une syllabation orale, dans la mesure où l’écrit est fixe et l’oral fluctuant.

Syllabation et langue des vers


Je suis arrivé ici parce que je me préoccupe de la syllabation dans la versification classique (XVIIe–XVIIIe siècles, voire une bonne partie du XIXe). Dans ce domaine, il y a ce que l’on peut appeler une langue des vers qui fixe la prononciation. Dans la langue des vers, par exemple, il n’y a pas de [ljɔ˜], il n’y a que des [liɔ˜] (li-on), de même qu’il n’y a pas de [ʃiɛ˜] (chi-en) et seulement des [ʃjɛ˜] (chien). C’est comme ça, l’usage est fixe. Il y a également les règles d’ « élision » du e instable, et la disjonctivité du h. Bref, peu importe le détail, l’important est qu’en précisant bien toutes les règles (ce qui implique effectivement une liste de vocabulaire parce que la réalisation de la graphie i+V ne dépend en rien ou presque rien de la graphie effective du mot, mais de l’étymologie principalement), on peut syllaber de manière univoque des vers de la période classique. Il n’y a qu’une et une seule façon de "compter" tels vers de Racine, Corneille, Voltaire, même Musset et Baudelaire…

Deux exemples situés aux antipodes l’un de l’autre
Boileau, Art poétique :
C’est / en / vain / qu’au / Par- / nass(e) / un / té- / mé- / rair(e) / au- / teur
Pren- / se / de / l’art / des / vers / at- / tein- / dre / la / hau- / teur

Verlaine, Poèmes saturniens :
Bai- / ser / ro- / se / tré- / mièr(e) / au / jar- / din / des / ca- / res- / ses
Vif / ac- / com- / pa- / gne- / ment / sur / le / cla- / vier / des / dents
(et jamais cla-/vi-/er, p. ex.)


Mettre des tirets en fin de ligne


En ce qui concerne la "syllabation écrite", la césure, ce qu’on appelle en anglais hyphenation (hypen, tiret) est dicté par d’autres règles encore, qui sont bien sûr liées à la prononciation, mais pas uniquement. Par exemple, même si dans certains contextes ont prononce li-on, on n’a pas le droit de couper en fin de ligne li-
on, pas plus qu’attenti-
on, ou que li-
en. Mais ces règles sont liées, elles aussi, à l’étymologie et à la tradition. Ça se voit particulièrement bien en anglais, où l’on coupe gov-
ernment. En réalité, autant que de règles linguistiques cela relève de règles typographiques. D’ailleurs si quelqu’un voulait utiliser ces règles, je pense qu’il devrait se tourner vers les algorithmes de césure de LaTeX, qui sont maintenant très largement répandus (il me semble avoir lu ou entendu qu’Open/LibreOffice les utilisaient).
C’est uniquement quand on met des tirets pour couper le mot qu’apprendre est ap-prendre et non a-pprendre, parce que pour beaucoup de gens, c'est a-prendre et la double consonne n’est pas réalisée dans la prononciation.

Aiguille, anguille, aiguise


Enfin, oui, il restera toujours en français des cas où la prononciation (la syllabation) doit être précisée par un “dictionnaire”, et aiguille en ferait à mon avis partie.
Le fait qu’on prononce ai-gu-ille (en détachant le u) n’a rien avoir avec le ille, puisqu'on dit bien an-guille, et qu’inversement on entend aussi bien ai-gu-i-ser qu’ai-gui-ser.



Je pense donc, pour conclure, que oui il est possible de syllaber un texte français par l’informatique, dans un certaine mesure et avec certaines restrictions, mais qu’une intervention qui ne relève pas de la pure algorithmique à partir de la graphie (recours à un dictionnaire) est nécessaire parce que la graphie en français (comme en anglais d’ailleurs) n’est pas suffisante, voire consistante, pour décrire la prononciation.
  • Partager sur Facebook
  • Partager sur Twitter
26 février 2018 à 22:47:17

Bonjour, alors oui, bouh, hein, c'est mal ! je sais, je déterre un vieux poste. Mais il est très bien indexé dans google et on tombe très vite dessus quand on commence à faire des recherches et il contient déjà pleins d'info intéressantes sur le sujet :) 

J'ai fais un Syllabateur (je pense que c'est le mot correct pour définir l'algorithme) Je le test avec la Base de donnée Lexique trouvée sur www.lexique.org, on y trouve le mot et sa version syllabisée donc je peux vérifier que c'est bien le résultat attendu. Il arrive à atteindre 95.53% de bonne syllabations. A savoir que quand elle sont mauvaises. La plupart du temps, ce n'est pas tellement parce qu'il y a une erreur mais plutôt parce que je suis en désaccord avec eux quand à la façon de découper un mot : "indexer" chez eux donne "in-dexer", chez moi "in-de-xer". Il est de toute façon loin d'être parfait. J'aimerai en tout cas avoir votre avis à son sujet ? est-ce que je pourrais améliorer des choses ?  Je partage rarement mes codes ici.. 

Il doit certainement y avoir des dizaines de simplification de regex possibles. Cela dit, c'est assez clair quand on modifier une regle. Plus elle se trouve haut dans la liste, plus elle sont prioritaire pour l'algorithme. 

Bien à vous

def getConsonneVoyelle(word):
    voyelle  = [u"a", u"à", u"â", u"e", u"é", u"è",
                u"ê", u"i", u"ï", u"î", u"o", u"ô", 
                u"u", u"ü", u"û", u"y"]

    consonne = [u"b", u"c", u"ç", u"d", u"f", u"g", 
                u"h", u"j", u"k", u"l", u"m", u"n", 
                u"p", u"q", u"r", u"s", u"t", u"v", 
                u"w", u"x", u"z"]

    consonneVoyelleForm = ""
    for i, l in enumerate(word):
        if l in voyelle:
            consonneVoyelleForm += "v"
            
        if l in consonne:
            consonneVoyelleForm += "c"

    return consonneVoyelleForm

def changeForm(toChange, base):
    """
    cas spéciaux 
    """
    to_match_c = [u"bl", u"br", u"ch", u"cl", u"cr", u"dr", 
                  u"fl", u"fr", u"gh", u"gl", u"gn", u"gr", u"gu",  
                  u"kl", u"kr", u"kh", u"kn", u"ph", u"pl", u"pr", u"rh", 
                  u"qu", u"tr", u"th", u"vr" ] # u"st",u"sc", u"sp", u"pt",, 

    # oo - > doit rester oo pour "coordonées"
    for m in to_match_c:
        toChange = replaceOn(toChange, base,  m, "gg" )
    
    to_match_c = [ u"oo", u"oé" ]
    for m in to_match_c:
        toChange = replaceOn(toChange, base,  m, "oo" )
    toChange = replaceOn(toChange, base,  "gu", "gu" )
    return toChange

def replaceOn(onThis, base, toFind, by,):
    """
    cherche et remplace des chaînes de caractere dans une chaîne 
    en fonction de positions trouvées dans une autre chaine

    -Usage- 
    replaceOn(getConsonneVoyelle(a), "chat chien",  "ch", "gg" )
    """

    pos = [(m.start(), m.end()) for m in re.finditer(toFind, base) ]

    for start, end in pos:
        onThis = onThis[0:start] + by + onThis[end:]
    
    return onThis

r"ggvvv(?=gg)",     # -chaou-ch

r"cvvv(?=gg)",       #cha-teau-briand

def getSyllabation(word):
    consonneVoyelleForm = getConsonneVoyelle(word)
    finalForm = changeForm(consonneVoyelleForm, word)
    #print "final form =", consonneVoyelleForm
    subRules = [ r"(?=vc)ccv(?=gg)",     #chan-sti-quer
                 r"\bvvc\b",              # aic
                 r"\bvvvc\b",             # aies
                 r"\bcvvc\b",             # feuj
                 r"\bvvcc\b",             # airs
                 r"\bvcc\b",              # abc
                 r"\bccvc\b",             # ksar
                 r"\bcvcc\b",             # jack
                 r"\bggvvvvcc\b",         # frayeur
                 r"\bcvccgg\b",           # kitsch
                 r"\bcvc(?=gu)",          # -lon-guet
                 r"gu(?=cv)",             # la-gu-ne
                 r"guv(?=cv)",            # lar-gue-ra
                 r"guv(?=gg)",            # 
                 r"guvc\b",               # al-gues 
                 r"guvc(?=cv)",           # 
                 r"\cvvc(?=gu)",          # -four-gu
                 r"gu\b",                 #
                 r"guv\b",                #
                 r"guvv\b",               #
                 r"guvvc\b",              #
                 r"guvvcc\b",             #
                 r"guvc\b",               #
                 r"guvcc\b",              #
                 r"cvc(?=gu)",            # alanguis
                 r"\bvc(?=co)",           # -al-cooli
                 r"coo(?=cv)",            # al-coo-lisé
                 r"cooc\b",                # alcool
                 r"(?=vv)guc\b",           # -ai-gu 
                 r"(?=vv)guv\b",           # -ai-gu 
                 r"\bvv(?=gu)",           # -ai-gu 
                 r"\bvv\b",               # ai
                 r"\bvc\b",               # ah
                 r"\bv\b",                # a 
                 r"\bv(?=gg)",            # -i-vraie
                 r"\bc\b",                # a 
                 r"\bco",                 # -co-ordonnée
                 r"\bggvvvvc\b",          # -choyait-
                 r"ggvc(?=gu)",           # -frin-gue
                 r"ggvvv\b",              # le-vreau-
                 r"ggvvvv\b",             # lam-proie-
                 r"ggvvvvc\b",            # lam-proies-
                 r"\bggvvc\b",            # -clair-
                 r"\bggvvv\b",            # -cloué-
                 r"\bggvcc\b",            # -click-
                 r"\bggcv(?=gg)",         # -chro-no
                 r"\bggcv(?=cv)",         # -phra-se
                 r"ggvvc(?=gg)",          # con-train-dra
                 r"cvggc\b",              # -right-
                 r"ocv",                  # co-opé-ration
                 r"oc",                   # co-or-donnée
                 r"\bvc(?=gg)",           # -as- phixiant       
                 r"(?=c)ggvvcc\b",        # as-treins- 
                 r"ggvvccc\b",            # con-traints-
                 r"\bvvvcc\b",            # aient
                 r"\bggvvvc(?=cv)",       # -crayon-naient
                 r"\bggcv(?=cv)",         # -chré-tiens  
                 r"\bcvvvvc(?=cv)",       # couaille
                 r"\bcvvv(?=gg)",         # -coua-quait
                 r"\bcvcc(?=gg)",         # -cons-tuisons
                 r"cvgg\b",               # con-cept-
                 r"ccv\b",                #chap-ska-
                 r"ccvc\b",               #chap-skas-
                 r"gg\b",                 # conti-gu-
                 r"(?=cv)gg(?=cv)",       # confi-guré- #space
                 r"cvvv\b",               # ap-puyé
                 r"cvvvv\b",              # ap-puyée
                 r"cvvvvc\b",             # ap-puyées
                 r"ggvvvcc\b",            # acca-blaient-
                 r"cvvccc\b",             # at-teints-  
                 r"ggvvc(?=cv)",          # ac-quies-ce
                 r"ggvv(?=gg)",           # bi-blio-graphie
                 r"ggvvcc\b",             # abs-traits-
                 r"ggcv\b",               # algori-thme-
                 r"ggcvc\b",              # algori-thmes-
                 r"gggvc(?=cv)",          # dé-struc-turer
                 r"cvvvv(?=cv)",          # joyeu 
                 r"cvvvvcc\b",            # accen-tuaient-
                 r"cvvcc\b",              # accen-tuant-
                 r"cvvv\b",               # accen-tuai-
                 r"cvvvcc\b",             # accen-tuai-
                 r"cvvvvc\b",             # a-boyait-
                 r"cvvvvvcc\b",           # a-boyaient-
                 r"cvvvc\b",              # accen-tuais-
                 r"cvvvc(?=cv)",          # a-boyan-te
                 r"cvvv(?=c)",            # a-boie-ment
                 r"\bvcc(?=cv)",          # abs-tient
                 r"\bvvc(?=c)",           # -ail-le
                 r"cvvc(?=gg)",           # abs-tien-dront 
                 r"vc(?=gg)",             # -ab-scons
                 r"ggvvcc\b",             # -chiant-
                 r"ggvvvc\b",             # -truie-
                 r"ggvccc\b",             # aca-blants-
                 r"ggvvc\b",              # -chien-
                 r"ggvv(?=c)",            # -chaî-non
                 r"ggv\b",                # va-che-
                 r"ggvcc\b",              # quand
                 r"ggvc\b",               # chat
                 r"ggvc(?=cv)",           # auguille
                 r"ggvc(?=cc)",           # ? 
                 r"ggvc(?=gg)",           # -char-treuse
                 r"ggv(?=c)",             # -sta-ble 
                 r"vc(?=gg)",             # -an-gle
                 r"vcc(?=gg)",            # abs-trait
                 r"vcc(?=cv)",            # abs-tien
                 r"ggvv(?=c)",            # plau-sible
                 r"ggvv\b",               # mor-bleu-
                 r"ggv(?=gg)",            # re-blo-chon
                 r"cvccc\b",              # aba-tants
                 r"cvcc\b",               # gar-çons-
                 r"cvcc(?=cv)",           # -ping-pong
                 r"cvvc(?=c)",            # -ban-que
                 r"cvvc\b",               # poissoine-ries-
                 r"\bvc(?=cv)",           # -ac-cidentel
                 r"\bccv(?=c)",           # -mne-monique
                 r"cvc(?=c)",             # -ban-que
                 r"cvc\b",                # poi-son-
                 r"cvv(?=c)",             # -poi-sonnerie
                 r"cvv(?=gg)",            # a-bou-chement
                 r"cvc(?=c)",             # poi-son-nerie
                 r"cvc(?=gg)",            # rhodo-den-dron
                 r"cvv\b",                # poisonne-rie
                 r"\bvvv",                # -eau-
                 r"\bvv(?=cv)",           # aut
                 r"\bv(?=gg)",            # aut
                 r"cvv(?=cv)",            # -ton-ton
                 r"cv(?=cv)",             # tata
                 r"cv\b",                 # 
                 r"vv(?=gg)",
                 r"cv",
                 r"v(?=cv)", 
                 r"gg", 
                 r"cc",                   # -cm-
                 
                 ]         

    # Assemble les règles                
    regle = r"(" 
    
    for sR in subRules[:-1]:
        regle += sR + "|"

    regle +=  subRules[-1]
    regle +=  r")"

    syllabes = [ word[gr.start():gr.end()] for gr in re.finditer(regle, finalForm)]
    
    return syllabes, finalForm



-
Edité par Stilnoxx 26 février 2018 à 22:59:42

  • Partager sur Facebook
  • Partager sur Twitter
10 janvier 2019 à 1:21:04

Oups une question... sur le code de stilnoxx.

Quelqu'un saurait m'aider à réécrire ce bout de python2 en js sivouplait?

ça dépasse largement mes concompétences.

Je comprends getConsonneVoyelle, je suis pas sûr du sens de la deuxième quand à la troisième (je comprends pas ce qui se passe)...

merci plein

-
Edité par mrbbp 10 janvier 2019 à 12:20:48

  • Partager sur Facebook
  • Partager sur Twitter
Qui mange un noix de coco entière fait confiance à son anus
30 juin 2019 à 20:43:45

Hello

Je teste ce code très intéressant qui marche la plupart du temps!

Les lettres avec tréma (ë de noêl, ï  ou ü) ne figurent pas dans la liste des voyelles (un oubli?)

Le découpage de "chateau" est correct, mais pas celui de "chateaubriand" qui donne chez moi (python 2.7) cha-te-au-briand (??!!)

J'avais un souci avec l'encodage pour les mots contenant des accents ainsi qu'un unicode warning mais tout est résolu en tapant

word=u"échancré"

Merci de vos idées éventuelles pour améliorer ce beau travail de Stilnoxx

-
Edité par EljojEljoj 30 juin 2019 à 21:01:20

  • Partager sur Facebook
  • Partager sur Twitter
29 juillet 2019 à 11:21:25

Bonjour tout le monde,

Voyant que ce topic a été ré-ouvert récemment je me permets de vous partager ma correspondance en JavaScript de l'aglo de Stilnoxx.

Il est un peu brut mais il fonctionne !

Enjoy :)

=> https://jsfiddle.net/kevinbalicot/yz8sa1j0/

-
Edité par Vek69 29 juillet 2019 à 11:24:11

  • Partager sur Facebook
  • Partager sur Twitter