Package edu.berkeley.nlp.lm.collections
Class Counter<E>
- java.lang.Object
-
- edu.berkeley.nlp.lm.collections.Counter<E>
-
- All Implemented Interfaces:
java.io.Serializable
public class Counter<E> extends java.lang.Object implements java.io.SerializableA map from objects to doubles. Includes convenience methods for getting, setting, and incrementing element counts. Objects not in the counter will return a count of zero. The counter is backed by a HashMap .(unless specified otherwise with the MapFactory constructor).- Author:
- lots of people
- See Also:
- Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description classCounter.EntryValueComparator
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static <L> Counter<L>absCounts(Counter<L> counts)booleanapproxEquals(Counter<E> other, double tol)EargMax()Finds the key with maximum count.voidclear()booleancontainsKey(E key)Returns whether the counter contains the given key.Counter<E>difference(Counter<E> counter)doubledotProduct(Counter<E> other)java.util.Set<java.util.Map.Entry<E,java.lang.Double>>entrySet()doublegetCount(E key)Get the count of the element, or zero if the element is not in the counter.doublegetDefaultCount()java.util.Collection<java.util.Map.Entry<E,java.lang.Double>>getEntriesSortedByDecreasingCount()java.util.Collection<java.util.Map.Entry<E,java.lang.Double>>getEntriesSortedByIncreasingCount()java.util.Set<java.util.Map.Entry<E,java.lang.Double>>getEntrySet()doublegetProbability(E key)I know, I know, this should be wrapped in a Distribution class, but it's such a common use...why not.<T extends E>
voidincrementAll(Counter<T> counter)<T extends E>
voidincrementAll(Counter<T> counter, double scale)voidincrementAll(java.util.Collection<? extends E> collection, double count)Increment each element in a given collection by a given amount.doubleincrementCount(E key, double increment)Increment a key's count by the given amount.booleanisEmpty()True if there are no entries in the counter (false does not mean totalCount > 0)booleanisEqualTo(Counter<E> counter)java.util.Set<E>keySet()The elements in the counter.static voidmain(java.lang.String[] args)doublemax()doublemin()voidnormalize()Destructively normalize this Counter in place.voidprune(java.util.Set<E> toRemove)voidpruneExcept(java.util.Set<E> toKeep)voidpruneKeysBelowThreshold(double cutoff)voidput(E key, double count, boolean keepHigher)Set the count for the given key if it is larger than the previous one;voidputAll(double d)voidremoveKey(E key)protected voidremoveKeyFromEntries(E key)Esample()Will return a sample from the counter, will throw exception if any of the counts are < 0.0 or if the totalCount() <= 0.0Esample(java.util.Random rand)Will return a sample from the counter, will throw exception if any of the counts are < 0.0 or if the totalCount() <= 0.0voidscale(double c)Counter<E>scaledClone(double c)voidsetAllCounts(double val)Sets all counts to the given value, but does not remove any keysvoidsetCount(E key, double count)Set the count for the given key, clobbering any previous count.voidsetDefaultCount(double deflt)voidsetDirty(boolean dirty)voidsetMaxCount(E key, double val)Set's the key's count to the maximum of the current count and val.voidsetMinCount(E key, double val)Set's the key's count to the minimum of the current count and val.intsize()The number of entries in the counter (not the total count -- use totalCount() instead).Counter<E>toLogSpace()java.lang.StringtoString()Returns a string representation with the keys ordered by decreasing counts.java.lang.StringtoStringSortedByKeys()doubletotalCount()Finds the total of all counts in the counter.java.lang.Iterable<java.lang.Double>values()
-
-
-
Method Detail
-
getDefaultCount
public double getDefaultCount()
-
setDefaultCount
public void setDefaultCount(double deflt)
-
keySet
public java.util.Set<E> keySet()
The elements in the counter.- Returns:
- set of keys
-
entrySet
public java.util.Set<java.util.Map.Entry<E,java.lang.Double>> entrySet()
-
size
public int size()
The number of entries in the counter (not the total count -- use totalCount() instead).
-
isEmpty
public boolean isEmpty()
True if there are no entries in the counter (false does not mean totalCount > 0)
-
containsKey
public boolean containsKey(E key)
Returns whether the counter contains the given key. Note that this is the way to distinguish keys which are in the counter with count zero, and those which are not in the counter (and will therefore return count zero from getCount().- Parameters:
key-- Returns:
- whether the counter contains the key
-
getCount
public double getCount(E key)
Get the count of the element, or zero if the element is not in the counter.- Parameters:
key-- Returns:
-
getProbability
public double getProbability(E key)
I know, I know, this should be wrapped in a Distribution class, but it's such a common use...why not. Returns the MLE prob. Assumes all the counts are >= 0.0 and totalCount > 0.0. If the latter is false, return 0.0 (i.e. 0/0 == 0)- Parameters:
key-- Returns:
- MLE prob of the key
-
normalize
public void normalize()
Destructively normalize this Counter in place.
-
setCount
public void setCount(E key, double count)
Set the count for the given key, clobbering any previous count.- Parameters:
key-count-
-
put
public void put(E key, double count, boolean keepHigher)
Set the count for the given key if it is larger than the previous one;- Parameters:
key-count-
-
sample
public E sample(java.util.Random rand)
Will return a sample from the counter, will throw exception if any of the counts are < 0.0 or if the totalCount() <= 0.0- Returns:
-
sample
public E sample()
Will return a sample from the counter, will throw exception if any of the counts are < 0.0 or if the totalCount() <= 0.0- Returns:
-
removeKey
public void removeKey(E key)
-
removeKeyFromEntries
protected void removeKeyFromEntries(E key)
- Parameters:
key-
-
setMaxCount
public void setMaxCount(E key, double val)
Set's the key's count to the maximum of the current count and val. Always sets to val if key is not yet present.- Parameters:
key-val-
-
setMinCount
public void setMinCount(E key, double val)
Set's the key's count to the minimum of the current count and val. Always sets to val if key is not yet present.- Parameters:
key-val-
-
incrementCount
public double incrementCount(E key, double increment)
Increment a key's count by the given amount.- Parameters:
key-increment-
-
incrementAll
public void incrementAll(java.util.Collection<? extends E> collection, double count)
Increment each element in a given collection by a given amount.
-
totalCount
public double totalCount()
Finds the total of all counts in the counter. This implementation iterates through the entire counter every time this method is called.- Returns:
- the counter's total
-
getEntriesSortedByIncreasingCount
public java.util.Collection<java.util.Map.Entry<E,java.lang.Double>> getEntriesSortedByIncreasingCount()
-
getEntriesSortedByDecreasingCount
public java.util.Collection<java.util.Map.Entry<E,java.lang.Double>> getEntriesSortedByDecreasingCount()
-
argMax
public E argMax()
Finds the key with maximum count. This is a linear operation, and ties are broken arbitrarily.- Returns:
- a key with minumum count
-
min
public double min()
-
max
public double max()
-
toString
public java.lang.String toString()
Returns a string representation with the keys ordered by decreasing counts.- Overrides:
toStringin classjava.lang.Object- Returns:
- string representation
-
toStringSortedByKeys
public java.lang.String toStringSortedByKeys()
-
pruneKeysBelowThreshold
public void pruneKeysBelowThreshold(double cutoff)
-
getEntrySet
public java.util.Set<java.util.Map.Entry<E,java.lang.Double>> getEntrySet()
-
main
public static void main(java.lang.String[] args)
-
clear
public void clear()
-
setAllCounts
public void setAllCounts(double val)
Sets all counts to the given value, but does not remove any keys
-
scale
public void scale(double c)
-
setDirty
public void setDirty(boolean dirty)
-
values
public java.lang.Iterable<java.lang.Double> values()
-
prune
public void prune(java.util.Set<E> toRemove)
-
pruneExcept
public void pruneExcept(java.util.Set<E> toKeep)
-
putAll
public void putAll(double d)
-
-