Collatinus  11.3
Fonctions membres publiques | Fonctions membres privées | Attributs privés | Liste de tous les membres
Référence de la classe Scandeur

La classe Scandeur regroupe les fonctions nécessaires à la scansion et à l'accentuation des formes ou des textes. Plus de détails...

#include <scandeur.h>

Graphe de collaboration de Scandeur:
Collaboration graph
[légende]

Fonctions membres publiques

 Scandeur (QObject *parent=0, LemCore *l=0, QString resDir="")
 Créateur de la classe pour scander des textes. Plus de détails...
 
QString parPos (QString f)
 détermine les quantités par position. Plus de détails...
 
QString scandeTxt (QString texte, int accent=0, bool stats=false, bool majAut=false)
 Scande ou accentue le texte. Plus de détails...
 
QString txt2csv (QString texte, int accent=9, bool majAut=false)
 Transforme un texte en CSV. Plus de détails...
 

Fonctions membres privées

void lisParPos ()
 Lecture des règles de quantité par position. Plus de détails...
 
QStringList cherchePieds (int nbr, QString ligne, int i, bool pentam)
 Recherche de dactyles et de spondées dans le schéma métrique d'un vers. Plus de détails...
 
QStringList formeq (QString forme, bool *nonTrouve, bool debPhr, int accent=0)
 Scande ou accentue une forme. Plus de détails...
 
QString code (QString PC, int accent)
 Détermine le nombre de syllabes et la nature (paroxyton ou proparoxyton) du mot. Plus de détails...
 

Attributs privés

LemCore_lemCore
 Un pointeur vers le noyau de lemmatisation qui peut être partagé. Plus de détails...
 
QString _resDir
 Le nom du répertoire contenant les données. Plus de détails...
 
QList< Reglep_reglesp
 La liste des règles pour déterminer les quantités par position. Plus de détails...
 

Description détaillée

La classe Scandeur regroupe les fonctions nécessaires à la scansion et à l'accentuation des formes ou des textes.

Actuellement, dans Collatinus, elle est appelée par MainWindow qui gère l'affichage et les lectures/écritures des fichiers. Elle partage donc le noyau de lemmatisation, LemCore, avec d'autres classes intermédiaires. Toutefois, cette classe pourrait être autonome, avec une autre interface, si on voulait, par exemple, n'avoir qu'un programme spécialisé dans la scansion et l'accentuation.

Les points d'entrée sont les deux fonctions publiques Scandeur::scandeTxt et Scandeur::txt2csv. Elles prennent toutes les deux un texte en entrée et elles le préparent respectivement pour l'affichage à l'écran (scandé ou accentué) et pour la sauvegarde dans un fichier de type CSV (scandé et accentué).

Documentation des constructeurs et destructeur

Scandeur::Scandeur ( QObject *  parent = 0,
LemCore l = 0,
QString  resDir = "" 
)

Créateur de la classe pour scander des textes.

Paramètres
parent: Un pointeur vers l'objet qui crée cette classe.
l: Un pointeur vers un moteur de lemmatisation (LemCore).
resDir: Le chemin complet du dossier contenant les fichiers de donnée.

La classe Scandeur propose les outils nécessaires pour scander un texte. Elle utilise le moteur de lemmatisation de Collatinus (LemCore) qui lui est passé en paramètre. Si ce moteur ne lui est pas donné, elle le crée ici. Si l'application envisagée utilise plusieurs modules intermédiaires (Tagueur, Lemmatiseur...), il vaut mieux créer un seul moteur commun.

Le paramètre optionnel resDir donne le chemin complet du dossier contenant les fichiers de donnée. Par défaut, il s'agit du fichier "data" placé à côté de l'exécutable.

Attention
Il s'agit ici de scander un texte : on marquera donc la quantité des syllabes et pas la longueur des voyelles. Pour les syllabes ouvertes, les deux se confondent, mais pas pour les syllabes fermées (qui se terminent avec une consonne). On peut avoir une voyelle brève dans une syllabe longue !

Documentation des fonctions membres

QStringList Scandeur::cherchePieds ( int  nbr,
QString  ligne,
int  i,
bool  pentam 
)
private

Recherche de dactyles et de spondées dans le schéma métrique d'un vers.

Paramètres
nbr: Nombre de mètres recherchés.
ligne: Le schéma métrique du vers.
i: Point de départ en nombre de caractère.
pentam: Pour la recherche de pentamètres.
Renvoie
La liste de toutes les combinaisons de dactyles et spondées trouvées.

Le but est de déceler d'éventuels hexamètres ou pentamètres dans de la prose. Si la fin de vers n'est pas répérée, on ne peut pas appliquer la méthode habituelle de scansion qui consiste à commencer par la fin.

Le schéma métrique ne contient que les longueurs des syllabes. Ici, les longues sont notées + et les brèves -. Les mots sont séparés par un espace et on a gardé une trace des élisions avec un `. Une grande partie de la difficulté vient des voyelles communes ou indéterminées, notées *. S'il n'y avait que des + et des -, on n'aurait que D = + - - et S = + +. Avec l'* en plus, il faut considérer toutes les possibilités : s = * +, + * ou d = * - -, + * -, + - *, + * *,  - ,  * - ou * * . Le découpage en mètres n'est plus nécessairement univoque.

cherchePieds est une routine récursive qui construit la liste de toutes les combinaisons possibles de dactyles et de spondées en commençant par le caractère d'indice i. Elle est récursive car chaque fois qu'elle a trouvé un D (ou d) ou un S (ou s), elle va chercher toutes les combinaisons possibles à partir du caractère d'indice i+3 ou i+2.

Un hexamètre sera représenté par une séquence de cinq mètres, dactyles (D ou d) ou spondées (S ou s) suivi d'un sixième noté X (presque spondée: deux syllabes dont la première est longue, la dernière étant indifférente). Le pentamètre est lui composé de deux groupes de deux mètres, dactyles ou spondées, séparés par une longue (notée Y ou y) et terminé par une syllabe indifférente (notée Z).

Le paramètre pentam est false au début de la recherche, qui va donc chercher indifféremment pentamètres et hexamètres. Après avoir trouvé deux mètres et une longue supposés former le début d'un pentamètre, il ne faut plus que chercher une fin de pentamètre : pour cela, pentam bascule à true.

QString Scandeur::code ( QString  PC,
int  accent 
)
private

Détermine le nombre de syllabes et la nature (paroxyton ou proparoxyton) du mot.

Paramètres
PC: Le mot réduit à ses quantités selon le codage de PedeCerto
accent: un entier qui détermine le comportement si la pénultième est commune
Renvoie
un code qui donne la longueur du mot et la position de l'accent

Le code est composé d'un entier (le nombre de syllabes) et de "p" si le mot est paroxyton ou "pp" s'il est proparoxyton. Lorsque l'avant-dernière syllabe est commune, la position de l'accent est problématique et le comportement est déterminé par la variable accent (voir Scandeur::scandeTxt pour les détails ; ici, seuls les deux bits de poids faible sont pris en compte).

Les routines pour réduire un mot à ses quantités sont dans l'espace de nommage Ch. Les syllabes longues sont notées +, les brèves - et les voyelles communes ou indéterminées sont notées *.

En général, un mot est paroxyton, c'est à dire accentué sur la pénultième, si cette syllabe est longue. Si elle est brève, le mot sera proparoxyton, c'est à dire accentué sur l'anté-pénultième (3e syllabe en partant de la fin).

QStringList Scandeur::formeq ( QString  forme,
bool *  nonTrouve,
bool  debPhr,
int  accent = 0 
)
private

Scande ou accentue une forme.

Paramètres
forme: la forme à scander ou à accentuer.
nonTrouve: booléen qui indique que la forme a été reconnue.
debPhr: booléen qui indique que l'initiale peut être en majuscule.
accent: entier qui détermine le comportement de l'accentuation.
Renvoie
Renvoie une liste avec la forme scandée (ou accentuée) de toutes les manières possibles.

Cette fonction commence par lemmatiser la forme donnée en utilisant le lemmatiseur de Collatinus. Elle renvoie alors une liste avec la forme scandée (ou accentuée) de toutes les manières possibles en appliquant les quantités données par les dictionnaires et les règles prosodiques. Si le mot n'est pas reconnu, seules les quantités déterminables par leur position sont indiquées. Les solutions sont ordonnées en fonction de leur fréquence, la plus probable venant en premier.

Le paramètre accent détermine le comportement de la fonction. S'il vaut 0, la forme est scandée. Non nul, la forme sera accentuée et plusieurs options sont possibles :

  • Les valeurs 1, 2 et 3 gèrent le comportement de l'accent lorsque l'avant dernière syllabe est commune.
  • La valeur 4 (ajoutée aux précédentes) conduira à marquer les syllabes.
  • La valeur 8 (ajoutée aux précédentes) introduit "l'exception illius" qui est toujours paroxyton quand son i est commun (supplante les valeurs 2 et 3)

Les options et le groupe d'options sont additifs. Les valeurs permises sont 0 (forme scandée), 1-3 et 9-11 forme accentuée, 5-7 et 13-15 forme accentuée avec les syllabes marquées. Les valeurs non-nulles règlent le comportement de l'accent si la pénultième est commune : 1, 5, 9 et 13 la considère comme longue, 2, 6, 10 et 14 comme brève (sauf pour illius avec les valeurs 10 et 14), 3, 7, 11 et 15 ne place pas l'accent car la pénultième est ambiguë.

A faire:
Lorsque l'on cherche à accentuer une forme qui n'a pas été reconnue, je retourne la forme telle qu'elle est. Or si la avant-dernière syllabe est fermée (double consonne), je sais que le mot est paroxyton. Il est souvent proparoxyton si les deux dernières voyelles se suivent. Le nom propre María est une exception (pas la seule ?). Pas sûr que ça vaille le coup...
void Scandeur::lisParPos ( )
private

Lecture des règles de quantité par position.

Les règles de quantité par position sont enregistrées dans le fichier data/parpos.txt. Elles se présentent comme une expression rationnelle, suivie par la chaine de remplacement. Elles sont utilisées dans la fonction parPos.

QString Scandeur::parPos ( QString  f)

détermine les quantités par position.

Paramètres
f: la forme sans quantité
Renvoie
la forme avec les quantités déterminables par position.

Quand une forme n'est pas reconnue, on essaie quand même de trouver les quantités. Ça n'est possible que pour les quantités définies par position. On ne peut pas deviner les quantités par nature. Les règles utilisées sont données dans le fichier parpos.txt qui est lu par la routine lisParPos.

QString Scandeur::scandeTxt ( QString  texte,
int  accent = 0,
bool  stats = false,
bool  majAut = false 
)

Scande ou accentue le texte.

Paramètres
texte: le texte à scander ou à accentuer
accent: un entier qui détermine si le résultat est scandé ou accentué.
stats: booléen qui affiche ou non les statistiques
majAut: booléen qui autorise les majuscules initiales
Renvoie
le texte scandé ou accentué.

Cette fonction scande ou accentue le texte donné.

Le paramètre accent détermine le comportement de la fonction. S'il vaut 0, le texte est scandé. Non nul, le texte sera accentué et plusieurs options sont possibles :

  • Les valeurs 1, 2 et 3 gèrent le comportement de l'accent lorsque l'avant dernière syllabe est commune.
  • La valeur 4 (ajoutée aux précédentes) conduira à marquer les syllabes.
  • La valeur 8 (ajoutée aux précédentes) introduit "l'exception illius" qui est toujours paroxyton quand son i est commun (supplante les valeurs 2 et 3)

Les options et le groupe d'options sont additifs. Les valeurs permises sont 0 (texte scandé), 1-3 et 9-11 texte accentué, 5-7 et 13-15 texte accentué avec les syllabes marquées. Les valeurs non-nulles règlent le comportement de l'accent si la pénultième est commune : 1, 5, 9 et 13 la considère comme longue, 2, 6, 10 et 14 comme brève (sauf pour illius avec les valeurs 10 et 14), 3, 7, 11 et 15 ne place pas l'accent car la pénultième est ambiguë.

Les valeurs >15 sont tronquées à leur quatre bits de poids faibles. Les valeurs 4, 8 et 12 pourraient conduire à des résultats inattendus, bien qu'aujourd'hui elles donnent le même résultat que la valeur 0 (texte scandé).

Lorsque le texte est scandé (accent = 0) et que le booléen stats est true, quelques statistiques seront faites sur les schémas métriques des vers (séquences des longues et des brèves). Une recherche des hexamètres et des pentamètres sera aussi effectuée, même si le texte est en prose.

Si un mot est ambigu et que cela conduit à des formes accentuées ou scandées différentes, elles seront toutes données. La plus probable sera la première et les autres seront données entre parenthèses. Pour la scansion, les règles usuelles d'allongement et d'élision sont appliquées. Les voyelles élidées sont conservées pour que le texte reste lisible, mais elles sont placées entre crochets droits [ ], sans quantité.

Note
Une inexactitude subsiste dans l'élision : le e de l'auxiliaire est est plus faible que les autres voyelles et c'est lui qu'il faudrait élider. Il faudrait écrire dōctā [e]st plutôt que dōct[a] ēst.
QString Scandeur::txt2csv ( QString  texte,
int  accent = 9,
bool  majAut = false 
)

Transforme un texte en CSV.

Paramètres
texte: le texte à scander et accentuer
accent: les paramètres pour l'accentuation
majAut: booléen qui autorise les majuscules initiales
Renvoie
Une chaine avec le contenu du fichier CSV à créer. La gestion des fichiers est laissée à la routine qui appelle cette fonction, actuellement MainWindow::txt2csv ou MainWindow::exportCsv.

Cette routine est assez proche de Scandeur::scandeTxt. Toutefois, elle s'en distingue car elle donne à la fois la forme scandée et la forme accentuée, ainsi que les séparateurs des mots. À partir du fichier CSV, on peut donc reconstruire le texte d'origine, le texte scandé et le texte accentué, en choisissant la forme appropriée dans chaque ligne que l'on fait suivre par les séparateurs trouvés sur cette même ligne.

Pour la forme accentuée, les options sont déterminées par le paramètre accent qui a les mêmes significations que dans Scandeur::scandeTxt.

Le séparateur de champs dans le CSV est la tabulation. Les colonnes en sont :

  1. un numéro d'ordre
  2. le numéro du paragraphe (ou vers)
  3. le numéro du mot dans ce paragraphe (ou vers)
  4. la forme du texte
  5. le séparateur (tout ce qu'il y a après ce mot et avant le mot suivant)
  6. la forme scandée
  7. le mot réduit à ses quantités
  8. la forme accentuée
  9. le rythme (voir Scandeur::code)

Documentation des données membres

LemCore* Scandeur::_lemCore
private

Un pointeur vers le noyau de lemmatisation qui peut être partagé.

QList<Reglep> Scandeur::_reglesp
private

La liste des règles pour déterminer les quantités par position.

QString Scandeur::_resDir
private

Le nom du répertoire contenant les données.


La documentation de cette classe a été générée à partir des fichiers suivants :