Collatinus  11.3
lemCore.h
Aller à la documentation de ce fichier.
1 /* lemCore.h
2  *
3  * This file is part of COLLATINUS.
4  *
5  * COLLATINUS is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * COLLATINVS is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with COLLATINUS; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * © Yves Ouvrard, 2009 - 2016
20  */
21 
22 #ifndef LEMCORE_H
23 #define LEMCORE_H
24 
25 #include <QMap>
26 #include <QString>
27 #include <QStringList>
28 #include <QtCore/QCoreApplication>
29 #include <QDir>
30 #include <QFile>
31 #include <QRegExp>
32 #include <QTextStream>
33 #include <iostream>
34 
35 #include "ch.h"
36 #include "irregs.h"
37 #include "lemme.h"
38 #include "modele.h"
39 
40 class Irreg;
41 class Lemme;
42 class Radical;
43 class Desinence;
44 
51 typedef struct
52 {
53  QString grq;
54  int morpho;
55  QString sufq;
56 } SLem;
57 
67 typedef QMap<Lemme*, QList<SLem> > MapLem;
68 
75 typedef QPair<QRegExp, QString> Reglep;
76 
118 class LemCore : public QObject
119 {
120  Q_OBJECT
121 
122  private:
123  // fonction d'initialisation
124  void ajAssims();
125  void ajAbrev();
127  QStringList abr;
128  // Pour avoir une liste d'abréviation éditable...
129  void ajContractions();
130  int aRomano(QString f);
131  void lisIrreguliers();
132  void lisFichierLexique(QString filepath);
133  void lisLexique();
134  void lisExtension();
135  void lisModeles();
136  void lisMorphos(QString lang);
137  void lisTraductions(bool base, bool extension);
138  // variables et utils
140  QMap<QString, QString> assims;
142  QMap<QString, QString> assimsq;
144  QMap<QString, QString> _contractions;
146  QMultiMap<QString, Desinence *> _desinences;
147  QString decontracte(QString d);
148  QMultiMap<QString, Irreg *> _irregs;
150  QMap<QString, QString> _cibles;
152  QMap<QString, Lemme *> _lemmes;
154  QMap<QString, Modele *> _modeles;
156  QMap<QString,QStringList> _morphos;
158  QMap<QString,QStringList> _cas;
160  QMap<QString,QStringList> _genres;
162  QMap<QString,QStringList> _nombres;
164  QMap<QString,QStringList> _temps;
166  QMap<QString,QStringList> _modes;
168  QMap<QString,QStringList> _voix;
170  QMap<QString,QStringList> _motsClefs;
171  // Les morphos doivent pouvoir être données en anglais !
173  QMultiMap<QString, Radical *> _radicaux;
175  QMap<QString, QString> _variables;
176 
178  QList<Reglep> _reglesMed; // Règles de transformation entre graphies classique et médiévale
179  void lisTransfMed();
180  QString transfMed(QString f, bool rad=false); // Exactement comme parPos, mais pour les transformations médiévales
182  bool _medieval; // Au cas où j'arrive avec le même code à traiter les deux cas.
184  QMap<QString, QString> _desMed;
186  QMap<QString, QString> _irrMed;
188  QMultiMap<QString, QString> _radMed;
189 
191  bool _extension; // = false;
193  QString _cible; // langue courante, 2 caractères ou plus
194 
196  QMap<QString, int> _tagOcc; // Nombre d'occurrences du tag.
198  QMap<QString, int> _tagTot; // Nombre total en fonction du premier caractère du tag.
200  QMap<QString, int> _trigram; // Nombre d'occurrences des séquences de 3 tags.
201  void lisTags(bool tout = false);
202 
204  QString _resDir; // Le chemin du répertoire de ressources
206  bool _extLoaded; // = true après chargement de l'extension
207  // Lorsque j'ai chargé l'extension, je dois pouvoir ignorer les analyses qui en viennent.
208 // bool _nbrLoaded; // Si les nombres ont été chargés, je dois les effacer avant de les charger à nouveau.
209 
210  public:
211  LemCore(QObject *parent = 0, QString resDir="");
212  bool estAbr(QString m);
213  // Pour remplacer Ch::abrev.contains(m) avec la liste des abréviations chargées.
214  void ajDesinence(Desinence *d);
215 // void ajModele(Modele *m);
216  void ajRadicaux(Lemme *l);
217  QString assim(QString a);
218  QString assimq(QString a);
219  QMap<QString, QString> cibles();
220  QString desassim(QString a);
221  QString desassimq(QString a);
222 // static QString deramise(QString r);
223  static bool estRomain(QString f);
224  bool inv(Lemme *l, const MapLem ml);
225  MapLem lemmatise(QString f); // lemmatise une forme
226  // lemmatiseM lemmatise une forme en contexte
227  //MapLem lemmatiseM(QString f, bool debPhr = true);
228  MapLem lemmatiseM(QString f, bool debPhr = true, int etape =0);
229  Lemme *lemme(QString l);
230  // lemmes(ml) renvoie la liste des graphies des lemmes
231  int nbOcc(QString l);
232  QStringList lemmes(MapLem ml);
233  QStringList lignesFichier(QString nf);
234  // Lit les lignes d'un fichier. Est devenu public.
235  Modele *modele(QString m);
236  QString morpho(int m);
237  // QStringList suffixes;
239  QMap<QString, QString> suffixes;
240  QString variable(QString v);
241  // Lire un fichier de césures étymologiques (non-phonétiques)
242  void lireHyphen (QString fichierHyphen);
243 
244  // Pour l'internationalisation
245  QString cas(int i);
246  QString genre(int i);
247  QString nombre(int i);
248  QString temps(int i);
249  QString modes(int i);
250  QString voix(int i);
251  QString motsClefs(int i);
252 
253  void setCible(QString c);
254  QString cible();
255  bool optExtension();
256 
257 
258 // QString tagPhrase(QString phr);
259  QString tag(Lemme *l, int m);
260  int fraction(QString listTags);
261  int tagOcc(QString t);
262  int trigram(QString seq);
263 
264  public slots:
265  void setExtension(bool e);
266  void setMedieval(bool e);
267 };
268 
269 #endif // LEMCORE_H
QMap< QString, QStringList > _cas
Liste des cas avec langue (clef) et liste lisible (valeur)
Definition: lemCore.h:158
QMap< QString, QStringList > _morphos
Liste des analyses morphologiques avec langue (clef) et liste lisible (valeur)
Definition: lemCore.h:156
QMap< QString, QString > cibles()
Renvoie la map des langues cibles.
Definition: lemCore.cpp:743
QPair< QRegExp, QString > Reglep
Une Reglep regroupe une expression rationnelle et la chaine de remplacement.
Definition: lemCore.h:75
QString grq
la forme avec quantités
Definition: lemCore.h:53
QMap< QString, QStringList > _nombres
Liste des nombres avec langue (clef) et liste lisible (valeur)
Definition: lemCore.h:162
QMap< QString, int > _tagOcc
Nombre d'occurrences du tag dans le corpus du LASLA.
Definition: lemCore.h:196
void setCible(QString c)
Permet de changer la langue cible.
Definition: lemCore.cpp:736
QString assimq(QString a)
Cherche si la chaîne a peut subir une assimilation, et renvoie cette chaîne éventuellement assimilée...
Definition: lemCore.cpp:701
QString morpho(int m)
explicite la morphologie dans la langue choisie
Definition: lemCore.cpp:1421
QString motsClefs(int i)
Accesseur des autres mots-clefs.
Definition: lemCore.cpp:1522
void lisTransfMed()
Lecture des règles de transformation entre les graphies classique et médiévale enregistrées dans le f...
Definition: lemCore.cpp:1302
QMap< QString, QStringList > _modes
Liste des modes avec langue (clef) et liste lisible (valeur)
Definition: lemCore.h:166
QMap< QString, Lemme * > _lemmes
Liste des lemmes avec forme (clef) et pointeur (valeur)
Definition: lemCore.h:152
void lisTraductions(bool base, bool extension)
Lecture des fichiers de traductions trouvés dans data/, nommés lemmes, avec un suffixe corresponant à...
Definition: lemCore.cpp:1352
QMap< Lemme *, QList< SLem > > MapLem
Une MapLem regroupe par lemme les résultats d'une lemmatisation.
Definition: lemCore.h:67
QMap< QString, QString > assims
Association des préfixes assimilés et non-assimilés sans quantité
Definition: lemCore.h:140
QMap< QString, QString > _irrMed
Associe une graphie médiévale (clef) à une graphie classique (valeur) pour un irrégulier.
Definition: lemCore.h:186
MapLem lemmatiseM(QString f, bool debPhr=true, int etape=0)
Renvoie dans une MapLem les lemmatisations de la forme f.
Definition: lemCore.cpp:1034
MapLem lemmatise(QString f)
Le cœur du lemmatiseur.
Definition: lemCore.cpp:845
int morpho
l'analyse morphologique (entier)
Definition: lemCore.h:54
QString _resDir
Le nom du répertoire contenant les données.
Definition: lemCore.h:204
La classe Radical décrit les radicaux associés aux lemmes.
Definition: lemme.h:44
void ajAbrev()
Lit le fichier d'abréviations.
Definition: lemCore.cpp:533
QMultiMap< QString, Irreg * > _irregs
Definition: lemCore.h:148
QString cas(int i)
Accesseur du cas.
Definition: lemCore.cpp:1438
QMap< QString, QStringList > _motsClefs
Liste des autres mots-clefs avec langue (clef) et liste lisible (valeur)
Definition: lemCore.h:170
void setExtension(bool e)
Active ou désactive l'extension du lexique.
Definition: lemCore.cpp:1577
QMap< QString, QStringList > _genres
Liste des genres avec langue (clef) et liste lisible (valeur)
Definition: lemCore.h:160
void ajDesinence(Desinence *d)
ajoute la désinence d dans la map des désinences.
Definition: lemCore.cpp:608
QString desassimq(QString a)
Essaie de remplacer l'assimilation de a par sa forme non assimilée, et renvoie le résultat...
Definition: lemCore.cpp:795
int aRomano(QString f)
Convertit une chaine en chiffres romains en un nombre.
Definition: lemCore.cpp:574
void ajContractions()
Établit une liste qui donne, pour chaque contraction, la forme non contracte qui lui correspond...
Definition: lemCore.cpp:558
QStringList abr
Liste des abréviations, voir LemCore::ajAbr.
Definition: lemCore.h:127
QString decontracte(QString d)
Essaie de remplacer la contractions de d par sa forme entière, et renvoie le résultat.
Definition: lemCore.cpp:753
QStringList lignesFichier(QString nf)
Lit les lignes d'un fichier.
Definition: lemCore.cpp:393
Modele * modele(QString m)
Renvoie l'objet de la classe Modele dont le nom est m.
Definition: lemCore.cpp:1404
QMultiMap< QString, Radical * > _radicaux
Liste des radicaux avec forme (clef) et pointeur (valeur)
Definition: lemCore.h:173
void setMedieval(bool e)
Gère les graphies médiévales.
Definition: lemCore.cpp:1601
QString voix(int i)
Accesseur de la voix.
Definition: lemCore.cpp:1508
void lisLexique()
Lecture du fichier de lemmes de base.
Definition: lemCore.cpp:1248
QMap< QString, int > _trigram
Nombre d'occurrences du trigramme dans le corpus du LASLA.
Definition: lemCore.h:200
int nbOcc(QString l)
Le nombre d'occurrences du lemme dans le corpus du LASLA.
Definition: lemCore.cpp:1182
bool estAbr(QString m)
Teste si le mot est une abréviation.
Definition: lemCore.cpp:546
QMap< QString, QString > suffixes
Association des suffixes sans et avec quantités.
Definition: lemCore.h:239
QString genre(int i)
Accesseur du genre.
Definition: lemCore.cpp:1452
void lisTags(bool tout=false)
Lit l'ensemble des tags.
Definition: lemCore.cpp:201
int trigram(QString seq)
Renvoie le nombre d'occurrences du trigramme.
Definition: lemCore.cpp:374
static bool estRomain(QString f)
Teste si la chaine est un nombre en chiffres romains.
Definition: lemCore.cpp:618
QString transfMed(QString f, bool rad=false)
Transforme un mot en sa forme médiévalisée.
Definition: lemCore.cpp:1328
La classe Lemme décrit les lemmes.
Definition: lemme.h:64
La classe Modele contient les désinences associées aux paradigmes de flexion.
Definition: modele.h:67
void ajAssims()
définit les débuts de mots non assimilés, et associe à chacun sa forme assimilée. ...
Definition: lemCore.cpp:514
QString cible()
Renvoie la langue cible dans sa forme abrégée (fr, en, de, it, etc.).
Definition: lemCore.cpp:717
void lisModeles()
Lecture des modèles, synthèse et enregistrement de leurs désinences.
Definition: lemCore.cpp:1272
bool _extension
Option indiquant le chargement de l'extension du lexique, voir LemCore::setExtension.
Definition: lemCore.h:191
QMap< QString, int > _tagTot
Nombre d'occurrences du POS (1er caractère du tag) dans le corpus du LASLA.
Definition: lemCore.h:198
QMap< QString, QString > assimsq
Association des préfixes assimilés et non-assimilés avec quantités.
Definition: lemCore.h:142
QString _cible
La langue choisie, voir LemCore::setCible.
Definition: lemCore.h:193
QStringList lemmes(MapLem ml)
renvoie la liste des graphies des lemmes de la MapLem lm sans signes diacritiques.
Definition: lemCore.cpp:1194
QMap< QString, QStringList > _voix
Liste des voix avec langue (clef) et liste lisible (valeur)
Definition: lemCore.h:168
QString tag(Lemme *l, int m)
Calcule le tag.
Definition: lemCore.cpp:257
bool optExtension()
Accesseur de l'option extension, qui permet de charger l'extension.
Definition: lemCore.cpp:1536
QMap< QString, QString > _variables
Liste des méta-variables du fichier modeles.la avec nom (clef) et liste de désinences (valeur) ...
Definition: lemCore.h:175
void lisExtension()
Lecture du fichier d'extension.
Definition: lemCore.cpp:1257
QMap< QString, QString > _desMed
Associe une graphie médiévale (clef) à une graphie classique (valeur) pour une désinence.
Definition: lemCore.h:184
QString nombre(int i)
Accesseur du nombre.
Definition: lemCore.cpp:1466
QMultiMap< QString, QString > _radMed
Associe une graphie médiévale (clef) à une graphie classique (valeur) pour un radical.
Definition: lemCore.h:188
void ajRadicaux(Lemme *l)
Calcule tous les radicaux du lemme l, en se servant des modèles, les ajoute à ce lemme, et ensuite à la map * des radicaux de la classe Lemmat.
Definition: lemCore.cpp:632
QMap< QString, QString > _contractions
Association des formes contractées et non-contractées.
Definition: lemCore.h:144
void lisFichierLexique(QString filepath)
Lecture des lemmes, synthèse et enregistrement de leurs radicaux.
Definition: lemCore.cpp:1230
QString modes(int i)
Accesseur du mode.
Definition: lemCore.cpp:1494
structure pour stocker le résultat d'une lemmatisation
Definition: lemCore.h:51
bool _medieval
Booléen pour traiter les graphies médiévales.
Definition: lemCore.h:182
LemCore(QObject *parent=0, QString resDir="")
Constructeur de la classe LemCore.
Definition: lemCore.cpp:48
QMap< QString, QStringList > _temps
Liste des temps avec langue (clef) et liste lisible (valeur)
Definition: lemCore.h:164
Lemme * lemme(QString l)
cherche dans la liste des lemmes le lemme dont la clé est l, et retourne le résultat.
Definition: lemCore.cpp:1174
La classe LemCore est le noyau de lemmatisation.
Definition: lemCore.h:118
int tagOcc(QString t)
Renvoie le nombre d'occurrences du tag.
Definition: lemCore.cpp:361
QString temps(int i)
Accesseur du temps.
Definition: lemCore.cpp:1480
QMap< QString, Modele * > _modeles
Liste des modèles avec nom (clef) et pointeur (valeur)
Definition: lemCore.h:154
int fraction(QString listTags)
Évalue la probabilité conditionnelle de l'analyse connaissant le POS.
Definition: lemCore.cpp:324
QString assim(QString a)
Cherche si la chaîne a peut subir une assimilation, et renvoie cette chaîne éventuellement assimilée...
Definition: lemCore.cpp:683
La classe Desinence décrit les désinences associées aux modèles.
Definition: modele.h:42
void lireHyphen(QString fichierHyphen)
Lit le fichier Hyphen.
Definition: lemCore.cpp:1664
void lisMorphos(QString lang)
Lecture des analyses morphologiques.
Definition: lemCore.cpp:425
QMap< QString, QString > _cibles
Liste des langues cibles en forme abrégée (clef) et longue (valeur)
Definition: lemCore.h:150
QList< Reglep > _reglesMed
Liste de règles pour transformer les graphies classiques en graphies médiévales.
Definition: lemCore.h:178
QMultiMap< QString, Desinence * > _desinences
Liste des désinences avec forme (clef) et pointeur (valeur)
Definition: lemCore.h:146
La classe Irreg décrit les formes irrégulières dans la flexion d'un lemme.
Definition: irregs.h:43
void lisIrreguliers()
Chargement des formes irrégulières du fichier data/irregs.la.
Definition: lemCore.cpp:1207
QString sufq
l'éventuel suffixe avec quantités
Definition: lemCore.h:55
QString desassim(QString a)
Essaie de remplacer l'assimilation de a par sa forme non assimilée, et renvoie le résultat...
Definition: lemCore.cpp:776
QString variable(QString v)
permet de remplacer la métavariable v par son contenu.
Definition: lemCore.cpp:1550
bool inv(Lemme *l, const MapLem ml)
Renvoie true si le lemme l faisant partie de la MaplLem ml est invariable.
Definition: lemCore.cpp:981
bool _extLoaded
Booléen indiquant si l'extension du lexique a été chargée.
Definition: lemCore.h:206