Opération de mise sous forme normale d'un graphe. More...
#include "cogitant/openormalform.h"
Public Types | |
enum | NormalizationType { GRAPHROOT, LOCAL, OPTIMIZED } |
Type de normalisation. More... | |
Public Types inherited from cogitant::OperationBase | |
typedef unsigned int | Error |
Résultat de la vérification des arguments d'une opération. More... | |
Public Member Functions | |
Error | check () |
Vérification des paramètres. More... | |
void | run () |
Lancement de l'opération. More... | |
nSet | getResultMerges () const |
Nombre de fusions réalisées par l'opération. More... | |
Constructeurs - destructeur. | |
OpeNormalForm (Environment *env) | |
Constructeur. More... | |
~OpeNormalForm () | |
Destructeur. More... | |
Entrée des paramètres. | |
void | setParamG (Graph *g) |
Fixer le graphe à normaliser. More... | |
void | setParamNormalizationType (NormalizationType t) |
Fixer type d'opération de normalisation à effecteur. More... | |
void | setParamConjunctiveTypes (bool ct) |
Utilisation de types conjonctifs (par défaut) ou pas dans la normalisation. More... | |
void | setParamMergeCoreferenceClass (bool mcc) |
Fusionner les sommets qui sont dans la même classe de coréférence. More... | |
void | setParamSubset1 (GraphSubset const *subset1) |
Fixer le premier sous-ensemble de sommets. More... | |
void | setParamSubset2 (GraphSubset const *subset2) |
Fixer le second sous-ensemble de sommets. More... | |
Public Member Functions inherited from cogitant::Operation | |
Environment * | environment () const |
Environnement. More... | |
void | setEnvironment (Environment *env) |
Modification de l'environnement sur lequel est défini l'opération. More... | |
Operation (Environment *env) | |
Constructeur. More... | |
Operation (Operation const &o) | |
Constructeur par recopie. More... | |
~Operation () | |
Destructeur. More... | |
Public Member Functions inherited from cogitant::OperationBase | |
void | stop () |
Stopper l'opération dès que possible. More... | |
bool | isStopped () const |
Est-ce que l'opération a été stoppée. More... | |
OperationBase () | |
Constructeur. More... | |
OperationBase (OperationBase const &o) | |
Constructeur par recopie. More... | |
~OperationBase () | |
Destructeur. More... | |
Public Member Functions inherited from cogitant::ObservableObject | |
ObservableObject () | |
Constructeur. More... | |
ObservableObject (ObservableObject const &o) | |
Constructeur par recopie. More... | |
~ObservableObject () | |
Destructeur. More... | |
ObserverSet const & | observers () const |
Accès à l'ensemble des observateurs. More... | |
bool | hasObservers () const |
Existence d'observateurs. More... | |
bool | hasObservers (ObserverMessage::Type mt) const |
Existence d'observateurs qui écoutent le type de message passé. More... | |
void | attachObserver (Observer *obs) |
Ajoute un nouvel observateur à l'objet. More... | |
void | detachObserver (Observer *obs) |
Supprime le lien entre l'observateur et l'objet. More... | |
void | notifyObservers (ObserverMessage const *msg) |
Envoie le message de modification à tous les observateurs. More... | |
Public Member Functions inherited from cogitant::CogitantObject | |
CogitantObject () | |
Constructeur. More... | |
CogitantObject (CogitantObject const &o) | |
Constructeur par recopie. More... | |
virtual | ~CogitantObject () |
Destructeur. More... | |
PropertySet * | properties () |
Accès à l'ensemble des propriétés. More... | |
virtual std::string | toString () const |
Transformation en chaîne de caractères. More... | |
std::string | className () const |
Nom de la classe. More... | |
PropertySet const * | properties () const |
Accès en lecture seule à l'ensemble des propriétés. More... | |
bool | hasProperties () const |
Existence de propriétés. More... | |
CogitantObject & | operator= (CogitantObject const &ob) |
Affectation. More... | |
Protected Member Functions | |
virtual void | merge (iSet i1, iSet i2) |
Fusionne le sommet i2 dans le sommet i1. More... | |
bool | normalizeLocal (iSet root) |
Normalise sous forme normale locale l'InternalGraph identifié par root. More... | |
bool | normalizeOptimized () |
Normalise en utilisant la méthode optimisée avec les deux GraphSubset. More... | |
Protected Member Functions inherited from cogitant::Operation | |
void | setProgress (unsigned int current, unsigned int max) |
Progression actuelle de l'opération. More... | |
Protected Member Functions inherited from cogitant::ObservableObject | |
virtual ObserverSet * | allocObservers () const |
Fonction créant l'instance d'une sous classe de ObserverSet pour la représentation de l'ensemble des observateurs de l'objet. More... | |
ObserverSet & | observers () |
Accès à l'ensemble des observateurs. More... | |
Protected Member Functions inherited from cogitant::CogitantObject | |
virtual PropertySet * | allocProperties () const |
Fonction créant l'instance d'une sous classe de PropertySet pour la représentation des propriétés de l'objet. More... | |
Protected Attributes | |
Graph * | i_g |
Le graphe à mettre sous forme normale. | |
NormalizationType | i_type |
Type de normalisation. | |
bool | i_conjunctivetypes |
Utilisation de types conjonctifs pour la normalisation. | |
bool | i_mergecoref |
Fusionner les sommets qui sont dans la même classe de coréférence. | |
GraphSubset const * | i_subset1 |
Le premier ensemble de sommets à comparer aux sommets du deuxième ensemble. Si NULL, considère tous les sommets. | |
GraphSubset const * | i_subset2 |
Le deuxième ensemble de sommets à comparer aux sommets du premier ensemble. Si NULL, considère tous les sommets. | |
nSet | o_merges |
Nombre de fusions réalisées par l'opération. | |
Protected Attributes inherited from cogitant::OperationBase | |
bool | m_stop |
Arrêt de l'exécution de l'opération demandé. More... | |
Additional Inherited Members | |
Static Public Attributes inherited from cogitant::Operation | |
static const Error | PROJBACKTRACKCHOICE_EMPTYLIST |
Impossible d'enlever un élément à une liste vide. More... | |
static const Error | OBJECTTYPE |
Un (identifiant d') objet parmi les paramètres n'est pas du bon type. More... | |
static const Error | WRONGEDGES |
Un graphe parmi les paramètres de l'opération possède des arêtes pendantes. More... | |
Static Public Attributes inherited from cogitant::OperationBase | |
static const Error | CHECKOK |
Pas d'erreur. More... | |
static const Error | ARGUMENTS |
Certains paramètres de l'opération n'ont pas été fixés. More... | |
static const Error | UNUSED |
Symbole d'erreur inutilisé. More... | |
Opération de mise sous forme normale d'un graphe.
Cette opération normalise le graphe i_g , ce qui a donc pour effet de modifier le graphe. Cette modification entraîne la suppression de certains sommets de i_g, et comme toute opération qui supprime des sommets, les iSet qui repéraient précédemment des sommets sont invalidés (le même iSet peut, après appel à cette opération, repérer un autre sommet, ou plus aucun sommet). La normalisation peut être configurée : si i_type vaut GRAPHROOT, seule la racine (du graphe emboîté) est mise sous forme normale, si i_type vaut LOCAL, chacun des graphes emboîtés est mis sous forme normale locale, et ... TODO (d'autres types de normalisation sont à prévoir).
Par défaut, tous les sommets concepts individuels sont pris en compte, mais dans certains cas, afin de normaliser de façon plus efficace, on peut être intéressé par une recherche plus fine : Si le graphe a été obtenu par somme disjointe d'un graphe (de taille n) qui était déjà sous forme normale avec un graphe (de taille m) qui était déjà sous forme normale, il est inutile de comparer tous les sommets du graphe obtenus entre eux ((n+m) * (n+m)), mais simplement les sommets issus du premier graphe avec les sommets du second graphe (n * m). Pour cela, il faut définir i_subset1 et i_subset2. Evidemment, il faut garder à l'esprit que si dans i_subset1 (ou i_subset2 ) il y a plusieurs sommets concepts qui ont le même marqueur individuel, ils ne seront pas fusionnés, car aucune comparaison n'est faite "à l'intérieur" de ces deux ensembles. Pour que cette optimisation soit prise en compte, il faut que i_type soit défini à OPTIMIZED.
Par défaut, cette opération fusionne aussi les sommets concepts qui figurent dans la même classe de coréférence. Ce comportement peut être changé en appelant la méthode setParamMergeCoreferenceClass(). L'opération de normalisation peut créer des sommets concepts munis de types conjonctifs. Pour empêcher ce comportement, appeler la méthode setParamConjunctiveTypes() avec le paramètre false
. Mais dans ce cas, si deux sommets munis de types différents sont fusionnés, le type résultat ne sera qu'un des deux types. Dans le cas du comportement par défaut, il est possible que la mise sous forme normale crée des sommets concepts munis de types bannis. La vérification doit être lancée par ailleurs si nécessaire.
Type de normalisation.
cogitant::OpeNormalForm::OpeNormalForm | ( | Environment * | env | ) |
Constructeur.
cogitant::OpeNormalForm::~OpeNormalForm | ( | ) |
Destructeur.
|
virtual |
Vérification des paramètres.
Retourne Operation::CHECKOK si l'opération peut être exécutée (méthode run()) ou un code d'erreur dans le cas contraire.
Implements cogitant::OperationBase.
|
inline |
Nombre de fusions réalisées par l'opération.
Fusionne le sommet i2 dans le sommet i1.
Par défaut, cette méthode se contente d'appeler Graph::merge(), mais il est possible de faire une sous-classe de OpeNormalForm pour redéfinir le comportement, par exemple pour fusionner d'une façon particulière les propriétés des deux sommets.
Dans le cas d'une redéfinition de la méthode dans une sous-classe, le plus simple est d'appeler la super-méthode, ou d'appeler directement Graph::merge(), dans ce dernier cas, penser à appeler Graph::merge() avec false
comme troisième paramètre parce que l'opération OpeNormalForm s'attend à ce que la méthode OperationNormalForm::merge() ne compacte pas le graphe, l'appel à Graph::compact() étant fait une seule fois (si nécessaire) à la fin d'exécution de l'opération.
|
protected |
Normalise sous forme normale locale l'InternalGraph identifié par root.
|
protected |
Normalise en utilisant la méthode optimisée avec les deux GraphSubset.
|
virtual |
Lancement de l'opération.
Cette méthode ne retourne rien mais le résultat de l'opération peut être récupéré avec les méthodes getResultxxx() (différentes selon les sous classes de Operation).
Implements cogitant::OperationBase.
|
inline |
Utilisation de types conjonctifs (par défaut) ou pas dans la normalisation.
Quand deux sommets concepts sont fusionnés dans la normalisation, l'union des types est réalisée (si true
) ou le type du premier sommet est conservé (si false
). Par défaut, l'union des types est réalisée.
|
inline |
Fixer le graphe à normaliser.
|
inline |
Fusionner les sommets qui sont dans la même classe de coréférence.
Par défaut, de tels sommets sont fusionnés.
void cogitant::OpeNormalForm::setParamNormalizationType | ( | NormalizationType | t | ) |
Fixer type d'opération de normalisation à effecteur.
|
inline |
Fixer le premier sous-ensemble de sommets.
subset1 | Pointeur sur un GraphSubset de i_g ou NULL. Il n'est pas nécessaire d'appeler cette méthode dans le cas où on ne désire pas profiter de l'optimisation : setParamNormalizationType() avec autre chose qu'OPTMIZED met à NULL i_subset1 et i_subset2. |
|
inline |
Fixer le second sous-ensemble de sommets.
subset2 | Pointeur sur un GraphSubset de i_g ou NULL. Il n'est pas nécessaire d'appeler cette méthode dans le cas où on ne désire pas profiter de l'optimisation : setParamNormalizationType() avec autre chose qu'OPTMIZED met à NULL i_subset1 et i_subset2. |