/* *Copyright 2007, 2011 CCLS Columbia University (USA), LIFO University of Orl��ans (France), BRGM (France) * *Authors: Cyril Nortet, Xiangrong Kong, Ansaf Salleb-Aouissi, Christel Vrain, Daniel Cassard * *This file is part of QuantMiner. * *QuantMiner is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. * *QuantMiner is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. * *You should have received a copy of the GNU General Public License along with QuantMiner. If not, see <http://www.gnu.org/licenses/>. */ package src.apriori; import java.util.*; import src.database.*; import src.tools.dataStructures.*; public class AttributQualitative { public String m_sNomAttribut; public int m_iNombreValeurs = 0; public String [] m_tTableauValeurs = null; // Table contains every value associated with that attribute // index�es par leur identificateur unique. public boolean [] m_tTableauPriseEnCompte = null; // Tableau mettant en relation every value avec un bool�en dont // la valeur indique s'il doit �tre pris en compte ou non lors du proc�d� d'extraction de r�gles public DataColumn m_colonneDonnees = null; // Colonne correspondant � l'attribut dans la base de donn�es public ArrayList [] m_LiensItemSets = null; // Itemsets li�s � une valeur d'attribut, devant �tre incr�ment�s lors de la comptabilisation du nombre d'occurrences de l'item public AttributQualitative(String sNomAttribut, DataColumn colonneDonnees) { int iIndiceValeur = 0; m_sNomAttribut = sNomAttribut; m_colonneDonnees = colonneDonnees; if (m_colonneDonnees!=null) { m_iNombreValeurs = m_colonneDonnees.ObtenirNombreValeursDifferentes(); m_LiensItemSets = new ArrayList [m_iNombreValeurs]; for (iIndiceValeur = 0; iIndiceValeur < m_iNombreValeurs; iIndiceValeur++) m_LiensItemSets[iIndiceValeur] = new ArrayList(); } else { m_iNombreValeurs = 0; m_LiensItemSets = null; } if (m_iNombreValeurs > 0) { m_tTableauValeurs = colonneDonnees.ConstituerTableauValeurs(); m_tTableauPriseEnCompte = new boolean [m_iNombreValeurs]; for (iIndiceValeur=0;iIndiceValeur<m_iNombreValeurs;iIndiceValeur++) m_tTableauPriseEnCompte[iIndiceValeur] = true; } else { m_tTableauValeurs = null; m_tTableauPriseEnCompte = null; } } /**Get Correspondent Index Value * @param sNomItem Item Name */ public short ObtenirIndiceCorrespondantValeur(String sNomItem) { return (short)m_colonneDonnees.ObtenirNumeroCorrespondance(sNomItem); } /** return the value of an attribute by index. * @param iIndice Index of an attribute * @return value of the attribute */ String ObtenirValeurCorrespondantIndice(short iIndice) { if ( (iIndice >= 0) && ((int)iIndice < m_iNombreValeurs) ) return m_tTableauValeurs[iIndice]; else return null; } /**Compute number of occurrence * @param iNumeroTransaction Transaction Number * @param iIndiceValeur Index Value */ void ComptabiliserOcurrenceValeur(int iNumeroTransaction, short iIndiceValeur) { ItemSet itemSet = null; int iIndiceItemSet = 0; int iNombreItemSets = 0; ArrayList listeItemSets = null; if ( (iIndiceValeur<0) || ((int)iIndiceValeur >= m_iNombreValeurs) ) return; listeItemSets = m_LiensItemSets[ (int)iIndiceValeur ]; iNombreItemSets = listeItemSets.size(); for (iIndiceItemSet=0; iIndiceItemSet<iNombreItemSets; iIndiceItemSet++) { itemSet = (ItemSet)listeItemSets.get(iIndiceItemSet); itemSet.ComptabiliserDecouverteItem(iNumeroTransaction); } } /**Get the name of the attribute * @return name of the attribute */ public String ObtenirNom() { return m_sNomAttribut; } void GenererItems(TableItems tableItems) { int iIndiceValeur = 0; for (iIndiceValeur = 0; iIndiceValeur < m_iNombreValeurs; iIndiceValeur++) tableItems.DeclarerItemQualitatif(this, (short)iIndiceValeur); } // Deux attributs sont �gaux si et seulement si ils ont le m�me nom : public boolean equals(Object obj) { if (obj==null) return false; if ( (m_sNomAttribut==null) || ( ((AttributQualitative)obj).m_sNomAttribut==null) ) return false; return ( m_sNomAttribut.equals( ((AttributQualitative)obj).m_sNomAttribut ) ); } /**Add item set * @param iIndiceValeur * @param itemSet */ void AjouterLienVersItemSet(int iIndiceValeur, ItemSet itemSet) { if ( (iIndiceValeur>=0) && ((int)iIndiceValeur<m_iNombreValeurs) ) m_LiensItemSets[iIndiceValeur].add(itemSet); } /**Reset ItemSets */ void ReinitialiserListeLiensItemSets() { int iIndiceValeur = 0; for (iIndiceValeur=0;iIndiceValeur<m_iNombreValeurs;iIndiceValeur++) m_LiensItemSets[iIndiceValeur].clear(); } /**Get the support of an item * @param iIndiceValeur index * @return */ int ObtenirSupportItem(int iIndiceValeur) { WordList.InfosMot infosMot = null; if ( (iIndiceValeur>=0) && ((int)iIndiceValeur < m_iNombreValeurs) ) { infosMot = m_colonneDonnees.m_listeValeurs.ChercherInfosMot( m_tTableauValeurs[iIndiceValeur] ); if (infosMot != null) return infosMot.m_iOccurrences; else return 0; } else return 0; } void DefinirPriseEnCompteValeur(String sNomItem, boolean bPrendreEnCompte) { short iIndiceItem = -1; // On r�cup�re l'identificateur de l'item : iIndiceItem = ObtenirIndiceCorrespondantValeur(sNomItem); if (iIndiceItem < 0) return; m_tTableauPriseEnCompte[iIndiceItem] = bPrendreEnCompte; } }