![]() |
Eulexis
1.2
|
La classe Lemmat regroupe les fonctions nécessaires à la lemmatisation et à la consultation des dictionnaires. Plus de détails...
#include <lemmatiseur.h>
Fonctions membres publiques | |
Lemmat (QString rep) | |
Créateur de la classe Lemmat. Plus de détails... | |
void | lireData () |
lit les index des dictionnaires Plus de détails... | |
QStringList | lemmatise (QString f, bool beta=true) |
lemmatise une forme Plus de détails... | |
QStringList | lem2csv (QString f, bool beta=true) |
Lemmatise une forme pour préparer un CSV. Plus de détails... | |
QString | beta2unicode (QString f, bool beta=true) |
convertit une forme de betacode en unicode Plus de détails... | |
QString | uni2betacode (QString f) |
convertit une forme de l'unicode en betacode Plus de détails... | |
QString | nettoie (QString f) |
retire d'une forme ses signes diacritiques Plus de détails... | |
QString | nettoie2 (QString res) |
retire d'une forme ses signes diacritiques Plus de détails... | |
void | majLSJ (QString nom) |
mise à jour du LSJ Plus de détails... | |
void | lireAbrBailly () |
Charge en mémoire l'index de l'abrégé du Bailly. Plus de détails... | |
void | lireBailly () |
Charge en mémoire l'index du Bailly. Plus de détails... | |
void | lireLSJ () |
Charge en mémoire l'index du LSJ. Plus de détails... | |
void | lirePape () |
Charge en mémoire l'index du Pape. Plus de détails... | |
QStringList | consLSJ (QString f) |
consultation du LSJ Plus de détails... | |
QStringList | consAbrBailly (QString f) |
consultation de l'abrégé du Bailly Plus de détails... | |
QStringList | consBailly (QString f) |
consultation du Bailly Plus de détails... | |
QStringList | consPape (QString f) |
consultation du Pape Plus de détails... | |
QStringList | consAsterisk (QString f, QMultiMap< QString, QString > *dicIndex) |
consultation d'un dictionnaire avec des caractères de substitution Plus de détails... | |
QStringList | consRegExp (QString f, QMultiMap< QString, QString > *dicIndex) |
consultation d'un dictionnaire par une expression rationnelle Plus de détails... | |
QStringList | cherchIndex (QString f, QMultiMap< QString, QString > *dicIndex) |
cherche une forme dans l'index d'un dictionnaire Plus de détails... | |
void | majPape (QString nom) |
mise à jour du Pape Plus de détails... | |
void | majAbrBailly (QString nom) |
mise à jour de l'Abrégé du Bailly Plus de détails... | |
void | majBailly (QString nom) |
mise à jour du Bailly Plus de détails... | |
void | majAnalyses (QString nom) |
transformation des analyses Plus de détails... | |
QStringList | consult (QString nom, QStringList llem, QString prefix) |
consultation d'un dictionnaire Plus de détails... | |
void | indexCommun () |
construit l'index commun aux quatre dictionnaires pour la version web d'Eulexis Plus de détails... | |
QString | traduction (QString lem) |
donne la traduction du lemme dans la langue-cible Plus de détails... | |
void | setCible (int lang) |
change la langue-cible Plus de détails... | |
int | cible () |
accesseur de Lemmat::_cible Plus de détails... | |
void | lireAnalyses () |
lecture des analyses dans le fichier "analyses_gr.txt" Plus de détails... | |
void | lireTraductions () |
lecture des traductions dans le fichier "trad_gr_en_fr_de.csv" Plus de détails... | |
bool | toInit () |
accesseur de Lemmat::_toInit Plus de détails... | |
void | initData () |
lit les fichiers d'analyse et de traduction Plus de détails... | |
void | repairTransl (QString nom) |
réparation des traductions non-trouvées ou qui peuvent sembler incomplètes Plus de détails... | |
QString | chTrad (QString bla) |
cherche une traduction Plus de détails... | |
QString | reconcil (QString beta) |
essaie de réconcilier les préfixes et le lemme Plus de détails... | |
Attributs publics | |
QString | voyelles = "aehiouw" |
Fonctions membres privées | |
QString | lierRenvois (QString article, QString renvoi) |
lie les renvois à d'autres mots Plus de détails... | |
void | verif (QString ligne) |
verifie l'ordre des balises dans l'article Plus de détails... | |
Attributs privés | |
QString | _rscrDir |
Chemin complet pour le répertoire des ressources. Plus de détails... | |
QMap< QString, QString > | _formes |
Liste des formes. Plus de détails... | |
QMap< QString, QString > | _trad |
Liste des traductions anglaises, françaises et allemandes. Plus de détails... | |
int | _cible |
Choix de la langue 0 = Anglais ; 1 = Français ; 2 = Allemand. Plus de détails... | |
QMultiMap< QString, QString > | _LSJindex |
Index du LSJ. Plus de détails... | |
QMultiMap< QString, QString > | _PapeIndex |
Index du Pape. Plus de détails... | |
QMultiMap< QString, QString > | _AbrBaillyIndex |
Index de l'abrégé du Bailly. Plus de détails... | |
QMultiMap< QString, QString > | _BaillyIndex |
Index du Bailly. Plus de détails... | |
QString | _LSJname |
Nom du fichier contenant le LSJ. Plus de détails... | |
QString | _PapeName |
Nom du fichier contenant le Pape. Plus de détails... | |
QString | _AbrBaillyName |
Nom du fichier contenant l'abrégé du Bailly. Plus de détails... | |
QString | _BaillyName |
Nom du fichier contenant le Bailly. Plus de détails... | |
QStringList | _beta |
Liste des caractères grecs en betacode pour la conversion en unicode. Plus de détails... | |
QStringList | _uni |
Liste des caractères grecs en unicode pour la conversion en betacode. Plus de détails... | |
QRegExp | rePonct |
Expression rationnelle pour la ponctuation. Plus de détails... | |
QRegExp | reLettres |
Expression rationnelle pour les lettres. Plus de détails... | |
QStringList | _refLSJ |
QStringList | _tmpLSJ |
QStringList | _renLSJ |
bool | _toInit |
Un booléen pour me dire qu'il faut encore initialiser les analyses et traductions. Plus de détails... | |
int | _maxList |
Pour choisir à un seul endroit, le nombre max de réponses aux caractères de substitution. Plus de détails... | |
La classe Lemmat regroupe les fonctions nécessaires à la lemmatisation et à la consultation des dictionnaires.
Il n'y a ici ni module de scansion ou ni tagueur. Il n'y a donc pas lieu de séparer un noyau de lemmatisation des autres outils qu'ils soient la lemmatisation d'un texte ou la scansion. La consultation des dictionnaires pourrait être séparée de la lemmatisation, mais il reste des outils communs comme la conversion entre unicode et betacode.
Dans Eulexis, la lemmatisation se distingue radicalement de la lemmatisation de Collatinus dans son principe même. Ici, j'utilise une liste de formes prise, avec l'autorisation de l'auteur, dans Diogenes, liste elle-même tirée de Perseus. Pour pouvoir afficher les traductions dans d'autres langues que l'anglais, j'ai séparé le lien entre la forme et son lemme du lien entre le lemme et ses traductions. J'ai donc deux fichiers :
Les traductions en français et en allemand ont d'abord été obtenues par une traduction automatique de l'anglais. Toutefois, beaucoup de corrections ont été faites depuis. De plus, l'arrivée du Bailly, numérisé par Gérard Gréco, m'a permis d'enrichir les traductions françaises. Dans cette version d'Eulexis, il y a une interface spéciale pour vérifier les traductions anglaises, françaises et allemandes de tous les lemmes. Cela répond à une collaboration avec Alpheios qui, pour l'instant, n'a pas porté ses fruits.
Lemmat::Lemmat | ( | QString | rep | ) |
Créateur de la classe Lemmat.
rep | : le chemin complet du dossier contenant les ressources |
J'initialise ici quelques variables et je lis le tableau de conversion entre le betacode et l'unicode. Je ne lis plus les index des dictionnaires ni les listes de formes et de traductions. Partant du constat que c'est surtout pour consulter les dictionnaires que l'on utilise Eulexis, je ne lis les listes de formes et de traductions que lorsque l'on demande une lemmatisation ou une traduction. On attend moins au démarrage, mais on attend une deuxième fois quand on demande une analyse.
QString Lemmat::beta2unicode | ( | QString | f, |
bool | beta = true |
||
) |
convertit une forme de betacode en unicode
f | : la forme en betacode à convertir |
beta | : booléen pour distinguer les deux bêtas |
La forme f est ici un mot isolé. S'il se termine par un "s", c'est un sigma final "ς" qu'il faudra mettre à la fin du mot en caractères grecs.
Si le booléen beta est true
, on distinguera le bêta initial "β" du bêta intérieur "ϐ". Sinon, tous les bêtas seront écrits "β". La distinctions des bêtas semble être une tradition française.
QStringList Lemmat::cherchIndex | ( | QString | f, |
QMultiMap< QString, QString > * | dicIndex | ||
) |
cherche une forme dans l'index d'un dictionnaire
f | : la forme à chercher |
dicIndex | : un pointeur vers l'index du dictionnaire |
La forme à chercher dans l'index peut être données en caractères grecs ou latins. Dans ce dernier cas (et dans ce cas seulement), la forme peut contenir des expressions rationnelles ou des caractères de substitution.
QString Lemmat::chTrad | ( | QString | bla | ) |
cherche une traduction
bla | : une chaine qui peut donner un indice |
int Lemmat::cible | ( | ) |
accesseur de Lemmat::_cible
QStringList Lemmat::consAbrBailly | ( | QString | f | ) |
consultation de l'abrégé du Bailly
f | : la forme à chercher |
Cette fonction appelle la fonction générique Lemmat::consult et essaie ensuite d'ajouter des liens à chaque fois qu'elle pense avoir trouvé un renvoi (dont la forme dépend du dictionnaire).
QStringList Lemmat::consAsterisk | ( | QString | f, |
QMultiMap< QString, QString > * | dicIndex | ||
) |
consultation d'un dictionnaire avec des caractères de substitution
f | : la forme à chercher avec ses caractères de substitution ("*" et "?") |
dicIndex | : un pointeur vers l'index du dictionnaire |
QStringList Lemmat::consBailly | ( | QString | f | ) |
consultation du Bailly
f | : la forme à chercher |
Cette fonction appelle la fonction générique Lemmat::consult et essaie ensuite d'ajouter des liens à chaque fois qu'elle pense avoir trouvé un renvoi (dont la forme dépend du dictionnaire).
QStringList Lemmat::consLSJ | ( | QString | f | ) |
consultation du LSJ
f | : la forme à chercher |
Cette fonction appelle la fonction générique Lemmat::consult et essaie ensuite d'ajouter des liens à chaque fois qu'elle pense avoir trouvé un renvoi (dont la forme dépend du dictionnaire).
QStringList Lemmat::consPape | ( | QString | f | ) |
consultation du Pape
f | : la forme à chercher |
Cette fonction appelle la fonction générique Lemmat::consult et essaie ensuite d'ajouter des liens à chaque fois qu'elle pense avoir trouvé un renvoi (dont la forme dépend du dictionnaire).
QStringList Lemmat::consRegExp | ( | QString | f, |
QMultiMap< QString, QString > * | dicIndex | ||
) |
consultation d'un dictionnaire par une expression rationnelle
f | : l'expression rationnelle à chercher |
dicIndex | : un pointeur vers l'index du dictionnaire |
QStringList Lemmat::consult | ( | QString | nom, |
QStringList | llem, | ||
QString | prefix | ||
) |
consultation d'un dictionnaire
nom | : le nom du fichier pour le dictionnaire |
llem | : la liste des entrées de l'index que l'on souhaite afficher |
prefix | : un préfixe pour s'y retrouver dans les liens sur la page finale. |
La consultation d'un dictionnaire se prépare en trois temps. D'abord, on cherche une forme dans l'index du dictionnaire. Ensuite, on prend la liste des entrées correspondantes et on va chercher, dans le fichier contenant le dictionnaire, les articles correspondants. Enfin, on essaie d'identifier des renvois dans chaque article.
La liste retournée a un format un peu particulier. Si elle n'est pas vide (la forme a été trouvée dans le dictionnaire), elle contient au moins quatre éléments. Les trois premiers sont respectivement le mot avant, le mot après et la liste de liens. Ils permettront donc la navigation entre les articles. Ensuite viennent les articles de dictionnaires.
void Lemmat::indexCommun | ( | ) |
construit l'index commun aux quatre dictionnaires pour la version web d'Eulexis
Dans la version web, j'utilise un index unique qui regroupe les index des quatre dictionnaires, séparés ici. Pour que la version web bénéficie des mise à jour sur les dictionnaires, je construis ici cet index commun que j'exporte ensuite avec les autres fichiers concernés.
void Lemmat::initData | ( | ) |
lit les fichiers d'analyse et de traduction
Cette fonction a été reportée au moment où une lemmatisation est demandée. Elle prend du temps et ne doit se faire qu'une seule fois. Elle bascule donc le booléen Lemmat::_toInit à false
.
QStringList Lemmat::lem2csv | ( | QString | f, |
bool | beta = true |
||
) |
Lemmatise une forme pour préparer un CSV.
f | : la forme à lemmatiser |
beta | : pour avoir des beta intérieurs dans les formes |
Il s'agit de reprendre la routine Lemmat::lemmatise, mais on ne veut garder que les lemmes pour les mettre dans un fichier csv délimité par des tab. Il n'y a donc plus de balise HTML, mais je dois distinguer une forme exacte d'une forme approchée.
QStringList Lemmat::lemmatise | ( | QString | f, |
bool | beta = true |
||
) |
lemmatise une forme
f | : la forme qui peut être en caractères latins ou grecs |
beta | : booléen pour distinguer les deux bêtas. |
Je cherche la forme sans accent ni diacritique dans ma liste Lemmat::_formes qui contient les formes de Diogenes avec leurs lemmatisation(s) et analyse(s). Toutes les formes qui partagent les mêmes caractères sans tenir compte des diacritiques sont groupées dans Lemmat::_formes et je vais donc les séparer pour faire les items de la liste. Une forme particulière peut, à son tour, venir de plusieurs lemmes et/ou avoir plusieurs analyses possibles. Donc chaque item contient une liste avec ces lemmatisations et analyses.
Si la forme a été donnée en caractères grecs avec ses signes diacritiques et que, parmi les formes trouvées, il y en a une qui correspond exactement, elle sera placée en début de liste et la forme sera en rouge. Si elle ne diffère que par une majuscule, elle sera en orangé.
|
private |
lie les renvois à d'autres mots
article | : un article du dictionnaire |
renvoi | : une forme qui introduit parfois un renvoi, par exemple " v. " |
void Lemmat::lireAbrBailly | ( | ) |
Charge en mémoire l'index de l'abrégé du Bailly.
void Lemmat::lireAnalyses | ( | ) |
lecture des analyses dans le fichier "analyses_gr.txt"
Comme le chargement prend du temps, j'affiche une fenêtre avec une barre de progression.
void Lemmat::lireBailly | ( | ) |
Charge en mémoire l'index du Bailly.
void Lemmat::lireData | ( | ) |
lit les index des dictionnaires
Pour essayer de faire paraître le temps de chargement moins long, je ne charge les index des dictionnaires que lorsque j'ai créé la fenêtre principale du programme. Je ne suis pas sûr que ça marche.
void Lemmat::lireLSJ | ( | ) |
Charge en mémoire l'index du LSJ.
void Lemmat::lirePape | ( | ) |
Charge en mémoire l'index du Pape.
void Lemmat::lireTraductions | ( | ) |
lecture des traductions dans le fichier "trad_gr_en_fr_de.csv"
Comme le chargement prend du temps, j'affiche une fenêtre avec une barre de progression.
void Lemmat::majAbrBailly | ( | QString | nom | ) |
mise à jour de l'Abrégé du Bailly
nom | : le chemin complet du nouveau fichier |
Dans Eulexis, les dictionnaires sont simplement en HTML. N'importe qui peut donc les corriger à chaque fois qu'une erreur est trouvée. Quand on est satisfait des corrections apportées sur une copie de travail, on peut l'importer dans Eulexis. Cette routine fait suite à MainWindow::majAB qui a recopié la copie de travail au bon endroit et elle va lire le dictionnaire et reconstruire l'index correspondant.
void Lemmat::majAnalyses | ( | QString | nom | ) |
void Lemmat::majBailly | ( | QString | nom | ) |
mise à jour du Bailly
nom | : le chemin complet du nouveau fichier |
Dans Eulexis, les dictionnaires sont simplement en HTML. N'importe qui peut donc les corriger à chaque fois qu'une erreur est trouvée. Quand on est satisfait des corrections apportées sur une copie de travail, on peut l'importer dans Eulexis. Cette routine fait suite à MainWindow::majB qui a recopié la copie de travail au bon endroit et elle va lire le dictionnaire et reconstruire l'index correspondant.
void Lemmat::majLSJ | ( | QString | nom | ) |
mise à jour du LSJ
nom | : le chemin complet du nouveau fichier |
Dans Eulexis, les dictionnaires sont simplement en HTML. N'importe qui peut donc les corriger à chaque fois qu'une erreur est trouvée. Quand on est satisfait des corrections apportées sur une copie de travail, on peut l'importer dans Eulexis. Cette routine fait suite à MainWindow::majL qui a recopié la copie de travail au bon endroit et elle va lire le dictionnaire et reconstruire l'index correspondant.
void Lemmat::majPape | ( | QString | nom | ) |
mise à jour du Pape
nom | : le chemin complet du nouveau fichier |
Dans Eulexis, les dictionnaires sont simplement en HTML. N'importe qui peut donc les corriger à chaque fois qu'une erreur est trouvée. Quand on est satisfait des corrections apportées sur une copie de travail, on peut l'importer dans Eulexis. Cette routine fait suite à MainWindow::majP qui a recopié la copie de travail au bon endroit et elle va lire le dictionnaire et reconstruire l'index correspondant.
QString Lemmat::nettoie | ( | QString | f | ) |
retire d'une forme ses signes diacritiques
f | : la forme en caractères grecs |
QString Lemmat::nettoie2 | ( | QString | res | ) |
retire d'une forme ses signes diacritiques
f | : la forme en betacode |
QString Lemmat::reconcil | ( | QString | beta | ) |
essaie de réconcilier les préfixes et le lemme
beta | : le lemme et ses préfixes en betacode |
Perseus a séparé les préfixes et ne considère que la traduction du lemme racine. Dans la vérification des traductions, j'essaie de trouver les formes composées dans les dicos. Mais les préverbes changent de forme. Par exemple, su/n-p... devient sump...
void Lemmat::repairTransl | ( | QString | nom | ) |
réparation des traductions non-trouvées ou qui peuvent sembler incomplètes
nom | : nom d'un fichier contenant des traductions se terminant avec un mot outil |
void Lemmat::setCible | ( | int | lang | ) |
change la langue-cible
lang | : un entier (0 = Anglais ; 1 = Français ; 2 = Allemand) |
bool Lemmat::toInit | ( | ) |
accesseur de Lemmat::_toInit
true
si les données n'ont pas encore été lues. QString Lemmat::traduction | ( | QString | lem | ) |
donne la traduction du lemme dans la langue-cible
lem | : le lemme |
Si la traduction n'existe pas dans la langue demandée, j'essaie l'anglais, puis le français (si ce n'est pas déjà fait).
Le lem que je passe ici est celui trouvé dans le fichier d'analyses : il peut contenir un "-" ou/et une "," que je dois éliminer. Si l'indication contient un "-", on trouve le lemme à sa droite et le (ou les) préverbe(s) à sa gauche, éventuellement séparés par des virgules. Mais il y a aussi des cas où la forme avec détails est donnée ! 19 préverbes avec 97 141 occurrences 14 125 formes avec 22 401 occurrences
QString Lemmat::uni2betacode | ( | QString | f | ) |
convertit une forme de l'unicode en betacode
f | : la forme en caractères grecs (unicode) à convertir |
|
private |
verifie l'ordre des balises dans l'article
ligne | : un paragraphe du fichier dictionnaire |
Lorsque je mets à jour un dictionnaire, je vérifie que chaque ligne (c'est à dire chaque article du dictionnaire) est correctement formé du point de vue de l'ouverture et de la fermeture des balises HTML. Il y a un problème si on rencontre une balise fermante sans que la balise ouvrante associée soit la dernière vue (les paires ouvrantes-fermantes imbriquées sont éliminées au fur et à mesure) ou qu'il reste des balises ouvertes à la fin de l'article.
|
private |
Index de l'abrégé du Bailly.
|
private |
Nom du fichier contenant l'abrégé du Bailly.
|
private |
Index du Bailly.
|
private |
Nom du fichier contenant le Bailly.
|
private |
Liste des caractères grecs en betacode pour la conversion en unicode.
|
private |
Choix de la langue 0 = Anglais ; 1 = Français ; 2 = Allemand.
|
private |
Liste des formes.
|
private |
Index du LSJ.
|
private |
Nom du fichier contenant le LSJ.
|
private |
Pour choisir à un seul endroit, le nombre max de réponses aux caractères de substitution.
|
private |
Index du Pape.
|
private |
Nom du fichier contenant le Pape.
|
private |
|
private |
|
private |
Chemin complet pour le répertoire des ressources.
|
private |
|
private |
Un booléen pour me dire qu'il faut encore initialiser les analyses et traductions.
|
private |
Liste des traductions anglaises, françaises et allemandes.
|
private |
Liste des caractères grecs en unicode pour la conversion en betacode.
|
private |
Expression rationnelle pour les lettres.
|
private |
Expression rationnelle pour la ponctuation.
QString Lemmat::voyelles = "aehiouw" |