![]() |
Collatinus
11.3
|
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>
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... | |
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é).
Scandeur::Scandeur | ( | QObject * | parent = 0 , |
LemCore * | l = 0 , |
||
QString | resDir = "" |
||
) |
Créateur de la classe pour scander des textes.
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.
|
private |
Recherche de dactyles et de spondées dans le schéma métrique d'un vers.
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. |
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.
|
private |
Détermine le nombre de syllabes et la nature (paroxyton ou proparoxyton) du mot.
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 |
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).
|
private |
Scande ou accentue une forme.
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. |
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 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ë.
|
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.
f | : la forme sans quantité |
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.
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 |
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 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é.
QString Scandeur::txt2csv | ( | QString | texte, |
int | accent = 9 , |
||
bool | majAut = false |
||
) |
Transforme un texte en CSV.
texte | : le texte à scander et accentuer |
accent | : les paramètres pour l'accentuation |
majAut | : booléen qui autorise les majuscules initiales |
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 :
|
private |
Un pointeur vers le noyau de lemmatisation qui peut être partagé.
|
private |
La liste des règles pour déterminer les quantités par position.
|
private |
Le nom du répertoire contenant les données.