package ca.pfv.spmf.algorithms.sequentialpatterns.fournier2008_seqdim; /* This file is copyright (c) 2008-2013 Philippe Fournier-Viger * * This file is part of the SPMF DATA MINING SOFTWARE * (http://www.philippe-fournier-viger.com/spmf). * * SPMF 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 (at your option) any later * version. * * SPMF 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 * SPMF. If not, see <http://www.gnu.org/licenses/>. */ import java.util.ArrayList; import java.util.List; import ca.pfv.spmf.algorithms.sequentialpatterns.fournier2008_seqdim.multidimensionalsequentialpatterns.AlgoSeqDim; /** * Implementation of a set of sequential patterns, grouped by their size (how many items they have) as * used by the SeqDim and Fournier-Viger(2008) algorithms. Level i = patterns containing i items. * * @see AlgoFournierViger08 * @see AlgoSeqDim * @author Philippe Fournier-Viger */ public class Sequences { /** Sequences are organized into levels. In the following list, the position i (level i) is the list of sequential containing i items. **/ final List<List<Sequence>> levels = new ArrayList<List<Sequence>>(); // itemset class� par taille /** the number of sequential patterns */ int sequenceCount=0; /** the name of this group of sequential patterns */ private final String name; /** * Constructor * @param name a name to be given to this group of sequential patterns */ public Sequences(String name){ this.name = name; levels.add(new ArrayList<Sequence>()); } /** * Print the seq. patterns to System.out. * @param databaseSize the number of sequences in the database. */ public void printSequentialPatterns(int databaseSize){ System.out.println(toString(databaseSize)); } /** * Get a string representations of this group of sequences. * @param databaseSize the number of sequences in the sequence database * @return a string */ public String toString(int databaseSize){ // create a string uffer StringBuilder r = new StringBuilder(200); // append the name of this structure r.append(" ----------"); r.append(name); r.append(" -------\n"); int levelCount=0; // for each level for(List<Sequence> level : levels){ r.append(" L"); r.append(levelCount); r.append(" \n"); // for each seq. pattern for(Sequence sequence : level){ // append the seq. pattern r.append(" pattern "); r.append(sequence.getId()); r.append(": "); r.append(sequence.toString()); // append the support: r.append("support : "); r.append(sequence.getRelativeSupportFormated(databaseSize)); r.append(" (" ); r.append(sequence.getAbsoluteSupport()); r.append('/'); r.append(databaseSize); r.append(") \n"); } levelCount++; } // append seq. pattern count r.append(" -------------------------------- Patterns count : "); r.append(sequenceCount); // return the String return r.toString(); } /** * Add a sequential pattern to this structure. * @param sequence a sequential pattern * @param k the number of items in the seq. pattern */ void addSequence(Sequence sequence, int k){ // create lists for storing seq. patterns until size k while(levels.size() <= k){ levels.add(new ArrayList<Sequence>()); } // add the pattern to the list for level k levels.get(k).add(sequence); // increase the sequential pattern count. sequenceCount++; } /** * Get all sequential patterns with a given number of items. * @param index a given number of items. * @return a List of sequential patterns */ public List<Sequence> getLevel(int index){ return levels.get(index); } /** * Get the number of level (the number of items in the largest seq. pattern) * @return an integer */ public int getLevelCount(){ return levels.size(); } /** * Get the list of levels. * @return a List of List of Sequence objects. */ public List<List<Sequence>> getLevels() { return levels; } }