Technologie Phoseg, stockage et analyse de données phonétiques transcrites

25
14
déc.
2012
Technologie

Bonjour à tous,
dans le cadre d'un projet j'ai besoin d'un module pour stocker et analyser des données phonétiques transcrites, par exemple avec l'alphabet phonétique international. Mon code commence à devenir (vaguement) utilisable : je le publie donc sous une licence GLPv3 : Phoseg est un module pour Python3 que vous trouverez à cette adresse.

J'ai essayé de coller à certains principes facilitant le travail en communauté ainsi que l'écriture de code lisible : tests unitaires, code et commentaires écrits en anglais, surveillance de la qualité du code par pylint, documentation fournie.

Concrètement, je cherche d'autres personnes susceptibles d'utiliser ou d'améliorer mon module. Si vous êtes un spécialiste de la phonétique, j'ai aussi de nombreuses questions à vous poser… De façon générale, n'hésitez pas à faire remonter vos remarques, je n'attends que ça, surtout si elles sont négatives !

Concrètement, Phoseg est un module Python qui se pilote avec la classe PhoSegObject :

from phoseg import PhoSegObject

Il s'agit d'abord de créer un objet PhoSegObject, par exemple avec des données de type IPA :

# Rōma = [ɾoːma] en latin
obj = PhoSegObject( ipa = "ɾoːma" )

Ces données phonétiques sont alors analysées et syllabisées automatiquement. La fonction de syllabation peut être celle de Phoseg ou une autre, que l'utilisateur fournira.

Si l'on veut imposer une syllabation particulière, on utilisera un format maison, le format SIPA :

obj = PhoSegObject( sipa = "(ɾ,oː,)(m,a,)" )

On peut aussi utiliser les noms décrivant les sons, séparés par un point-virgule :

# [a] "open front unrounded vowel"
# [ĭ] "overshort close front unrounded vowel"
# [r̥] "voiceless alveolar trill"
# [t] "voiceless alveolar plosive"
sounds = ["open front unrounded vowel",
          "prenasalized overshort close front unrounded vowel",
          "voiceless alveolar trill",
          "voiceless alveolar plosive",
         ]
obj = PhoSegObject(soundsnames = ";".join(sounds) )

Une fois l'objet initialisé, il peut alors nous donner les informations attendues :

# structure (1)
# ici, on vérifie que [ɾoːma] a une consonne, une voyelle, ce qu'on veut, une voyelle :
print( obj.cv_struct_identical_to(['c','v', '*', 'v']) )


# structure (2)
# ici on vérifie que la deuxième voyelle de [ɾoːma] est longue :
print( obj.cv_struct_identical_to(['*','vː', '*', '*']) )


# syllabes et phonèmes :
print( obj.number_of_phonemes() ) # =4 : [ɾoːma] possède 4 phonèmes.
print( len(obj) )                 # =2 : [ɾoːma] possède 2 syllabes.


# syllabe ouverte, syllabe lourde :
# "une princesse turque" : [yn pʀɛ᷉sɛs tyʀk]
myobj = PhoSegObject( sipa = "(,y,n)(pʁ,ε̃,)(s,ɛ,s)(t,y,ʁk)" )
print( myobj[0].is_open() )     # False : (,y,n) est une syllabe fermée.
print( myobj[0].is_heavy() )    # True : (,y,n) est une syllabe lourde.

Voilà : il reste encore beaucoup de travail mais j'espère intéresser quelques curieux !

  • # Android ?

    Posté par (page perso) . Évalué à  3 .

    Intéressant.

    Par contre, je n'ai pas bien compris le rapport avec Android (premier mot du titre).

    blog.rom1v.com

    • [^] # Re: Android ?

      Posté par (page perso) . Évalué à  3 .

      Bonjour ®om,
      je suis l'auteur de l'article et j'ai dû commettre une erreur en proposant cette dépêche… C'est la première fois que j'en propose une. A moins que le responsable ne soit un des modérateurs ? Phoseg n'a bien sûr pas grand chose à voir avec Android.

      Trust the Python !

  • # archive corrompue

    Posté par (page perso) . Évalué à  1 .

    Je viens de me rendre compte que l'archive est corrompue : celle présente sur le serveur est normale, c'est lors du téléchargement par l'utilisateur qu'un problème survient. J'ai ouvert un fil de discussions pour trouver une solution.

    Trust the Python !

    • [^] # Re: archive corrompue

      Posté par (page perso) . Évalué à  1 .

      En fait, l'archive est bonne : c'est de mon côté qu'il y a un problème, quand je télécharge l'archive avec un navigateur.

      Trust the Python !

  • # Intégration dans Gramps?

    Posté par . Évalué à  3 . Dernière modification : le 14/12/12 à 15:07

    Intéressant !

    Il y a quelques années, j'avais regardé pour générer l'équivalent de l'ensemble "Dragon Naturally didact© de Mysoft® + winfamily + Visual Dbase© d’Imprise® + Excel2000© de Microsoft® + Biodem" via Gramps.

    source => Deux logiciels : Sygap et Analypop
    => http://histoiremesure.revues.org/docannexe/image/132/img-3.png

    Il y avait bien Orca, GnoneVoiceControl, perlbox, etc … mais rien en python pouvant s'intégrer aux éditeurs (notes, individus, relations, événements, etc …) et l'API de Gramps.

    • [^] # Re: Intégration dans Gramps?

      Posté par (page perso) . Évalué à  2 .

      Peut-être est-ce la fatigue mais je ne vois rien dans Phoseg pouvant avoir un lien avec ta remarque. Est-ce que je me trompe ?

      Trust the Python !

      • [^] # Re: Intégration dans Gramps?

        Posté par . Évalué à  2 .

        Gramps utilise un module 'soundex' appelé par certains utilitaires. Mais les saisies, transcriptions des données se font à la main.

        Une saisie "phonétique" est sûrement possible, mais l'analyse et la correspondance de ces sons nécessitent un module spécifique qui pour l'instant ne se limite qu'au classique "soundex" de base.

        On peut imaginer un module plus avancé avec "phonex" et séquences via 'Phoseg', pour les noms de famille, une saisie phonétique des données, une meilleure précision lors des recherches, non ?

        • [^] # Re: Intégration dans Gramps?

          Posté par (page perso) . Évalué à  3 .

          Toutes mes excuses, ta remarque était au contraire très intéressante. A lui seul Phoseg n'apporterait pas grand chose à Soundex mais tu as raison sur le fond : on peut imaginer qu'autour de Phoseg soit ajouté du code pour automatiser la conversion des noms propres vers une transcription phonétique. D'ailleurs Phoseg fait lui-même partie d'un projet plus vaste qui permettrait une telle automatisation - en fait, cet autre projet vise justement à établir des liens entre la transcription orthographique et leur transcription phonétique. S'il y a des intéressés…

          Trust the Python !

          • [^] # Re: Intégration dans Gramps?

            Posté par (page perso) . Évalué à  3 .

            C’est quoi le projet plus vaste, on peut avoir des détails ? ^

            • [^] # Re: Intégration dans Gramps?

              Posté par (page perso) . Évalué à  3 .

              Dans un premier temps, Phoseg me permet d'enrichir un projet que je présenterai vers février, lié à un formateur de dictionnaire (un outil s'assurant qu'un dictionnaire est cohérent) ainsi qu'à un dictionnaire utilisant cet outil (dictionnaire grec ancien -> français).
              Dans un second temps, et sans savoir quand je pourrai présenter ces projets, Phoseg est associé à une "liseuse" de textes (anciens, pourquoi pas modernes) permettant de lire facilement des textes en consultant aisément la traduction et des notes lexicales et sémantiques. Phoseg est enfin lié à dernier projet me permettant d'analyser automatiquement des textes et d'en établir la construction en vue de la traduction.

              Voilà, j'ai tout dit, …

              Trust the Python !

              • [^] # Re: Intégration dans Gramps?

                Posté par (page perso) . Évalué à  5 .

                Tout cela semble fort intéressant, mais pourquoi tant de mystère plutôt qu’un dépôt, un wiki, un site, une liste de diffusion ? Release soon, release often :)

                • [^] # Re: Intégration dans Gramps?

                  Posté par (page perso) . Évalué à  3 .

                  Merci pour ces encouragements : j'ai vu tant de projets décevoir les attentes en n'étant jamais aboutis que j'adopte la politique inverse - j'attends d'avoir quelque chose de sérieux avant d'en parler sérieusement. Pour ceux qui connaissent, ma devise pourrait être pauca sed matura… Ceci dit, ce que tu me dis me fait réfléchir. Disons qu'en février j'y verrai plus clair car je sortirai un autre de mes projets (le formateur de dictionnaire, puis le dictionnaire grec ancien->français). Je demanderai conseil à la communauté à ce moment-là.

                  Trust the Python !

  • # Intéressant :)

    Posté par . Évalué à  3 .

    J'ai pas tout compris le but du projet et du module (je dirais effectuer de la sythèse vocale ?)

    D'ailleurs les moteurs TTS utilisent des dictionnaires phonétiques ? Sur wikipedia ils ont l'air de dire que oui (pour la synthèse vocale en générale) or quand j'écoute mon téléphone (android) je trouve ça toujours aussi moche.

    • [^] # Re: Intéressant :)

      Posté par (page perso) . Évalué à  4 . Dernière modification : le 14/12/12 à 15:31

      J'aurais dû être plus explicite : malgré le tag que je n'arrive pas à enlever, Phoseg n'a pas vocation à faire passer du texte à la parole; ce module utilise des données phonétiques déjà transcrites (voix -> texte transcrivant la voix) pour les analyser. Par contre, Phoseg fait partie d'un projet plus vaste qui lui, vise à établir un lien entre le texte écrit "normalement" et sa transcription phonétique.

      Trust the Python !

  • # Possibilité d’utiliser sur le wiktionnaire ?

    Posté par (page perso) . Évalué à  5 .

    Justement en ce moment sur le wiktionnaire on parle syllabation automatisée de l'espéranto, le fil de discussion pourrait peut-être t’intéressé, voir test scripts pourraient servir au wiktionnaire, ne serait-ce que pour récupérer les algos. Sur les wiki wikimedia, c’est du php si on fait une extension, du javascript si on fait un « gadget », ou l’infâme langage de template (bientôt remplacé par lua), donc nul python en vu.

  • # On est pas le 20 Mars, mais bon...

    Posté par (page perso) . Évalué à  1 .

    Projet intéressant, par contre concernant l'article, serait il possible d'avoir une préférence pour les liens Wikipédia en Français, je pense que ça serait plus accessible pour la majorité d'entre nous (à commencer par moi !).

    Ou au moins préciser quand un lien pointe vers le wiki anglophone, si tout est mélangé, ça donne vraiment l'impression que le Français est une option…

    En ce qui concerne le projet, je m'interroge sur les applications pratiques.
    Par exemple si l'on tape une lettre en trop ou en moins, on a vite fait de changer la phonétique d'un mot, et donc son analyse, peut être serait il utile avant analyse phonétique de vérifier la validité d'un mot par un dictionnaire (mais je suppose que ça va poser problème avec les noms propres…).

    Je sais pas si je suis clair mais si, après une faute grossière (ça arrive), j'ai sur le texte un truc genre "acent" au lieu d'"accent", le résultat devrait être totalement différent, donc la traduction également.
    Tandis qu'utiliser un dictionnaire comme celui ci: http://packages.debian.org/wheezy/wfrench pourrait permettre de repérer les mots pouvant poser problème.

    Voilou, c'est juste une idée comme ça, je sais pas si c'est utile au projet à terme et même si c'est le cas, peut être que l'auteur y a pensé, mais en tout cas c'est pas précisé.

    • [^] # Re: On est pas le 20 Mars, mais bon...

      Posté par (page perso) . Évalué à  2 .

      Merci pour tes remarques sur les références au wikipedia anglais, j'en tiendrai compte pour mon prochain journal. Pour le reste, Phoseg ne vise pas à corriger la frappe des mots - le dictionnaire dont tu donnes le lien serait un outil bien plus intéressant - mais à lire et à analyser une transcription phonétique, et non orthographique.
      A titre d'exemple, je travaille sur un programme permettant de produire les différentes formes d'un mot (conjugaison, déclinaison); j'ai besoin que le programme fasse le lien entre la trace écrite et une trace phonétique qu'il doit reconstituer : c'est ce lien que Phoseg permet d'établir. Par exemple, si tu veux expliquer au programme que le mot grec (ancien) ánthropos peut devenir anthrópou, il ne s'agit pas que de modifier la finale (-os -> -ou) mais tu dois aussi expliquer comment se déplace l'accent tonique; pour cela, il faut analyser la longueur de certaines voyelles et découper le mot en syllabes accentuées ou non.

      J'espère avoir été plus clair : merci encore pour tes remarques.

      Trust the Python !

  • # Commentaire supprimé

    Posté par . Évalué à  -3 . Dernière modification : le 18/12/12 à 13:20

    Ce commentaire a été supprimé par l'équipe de modération.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.