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 java.util.Map; import java.util.Set; import ca.pfv.spmf.algorithms.sequentialpatterns.fournier2008_seqdim.multidimensionalsequentialpatterns.AlgoSeqDim; /** * This class represents an itemset as used by the SeqDim and Fournier-Viger 2008 algorithm. * <br/><br/> * An itemset is a set of items and an optional timestamp. * *@see AlgoSeqDim * @see AlgoFournierViger08 * @author Philippe Fournier-Viger */ public class Itemset{ // The ordered list of items contained in this itemset private final List<ItemSimple> items = new ArrayList<ItemSimple>(); // a timestamp associated to this itemset private long timestamp = 0; /** * Constructor * @param item an item * @param timestamp a timestamp */ public Itemset(ItemSimple item, long timestamp){ addItem(item); setTimestamp(timestamp); } /** * Default constructor */ public Itemset(){ } /** * Add an item to this itemset. * @param item an Item */ public void addItem(ItemSimple item){ items.add(item); } /** * Get the List of items contained in this Itemset. * @return a List of items */ public List<ItemSimple> getItems(){ return items; } /** * Get the i-th item in this itemset * @param index the position i * @return the Item */ public ItemSimple get(int index){ return items.get(index); } /** * Print this item to System.out. */ public void print(){ System.out.print(toString()); } /*** * Get a String representation of this item. * @return a String */ public String toString(){ // create string buffer StringBuilder r = new StringBuilder (); // append each item for(ItemSimple attribute : items){ r.append(attribute.toString()); r.append(' '); } // return the string return r.toString(); } /** * Make a copy of this itemset but without infrequent items * @param mapSequenceID a map indicating the IDs of sequence (value) containing * each item (key). * @param relativeMinsup a relative minimum support (integer) * @return a new Itemset */ public Itemset cloneItemSetMinusItems(Map<ItemSimple, Set<Integer>> mapSequenceID, double relativeMinsup) { // create a new itemset Itemset itemset = new Itemset(); // copy the timestamp itemset.timestamp = timestamp; // for each item for(ItemSimple item : items){ // if the item is frequent (contained in more than minsup sequences) if(mapSequenceID.get(item).size() >= relativeMinsup){ // add the item to the copy of the itemset itemset.addItem(item); } } // return the new itemset return itemset; } /** * Make an exact copy of this itemset. * @return a new Itemset. */ public Itemset cloneItemSet(){ // create a new Itemset Itemset itemset = new Itemset(); // copy timestamp itemset.timestamp = timestamp; // copy all items itemset.getItems().addAll(items); // return the itemset return itemset; } /** * Get the timestamp * @return the timestamp */ public long getTimestamp() { return timestamp; } /** * Set the timestamp of this itemset. * @param timestamp the timestamp. */ public void setTimestamp(long timestamp) { this.timestamp = timestamp; } /** * Get the number of items. * @return an integer. */ public int size(){ return items.size(); } }