You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2008/12/24 00:32:36 UTC

svn commit: r729175 [2/5] - in /lucene/mahout/trunk: core/src/main/java/org/apache/mahout/cf/taste/common/ core/src/main/java/org/apache/mahout/cf/taste/hadoop/ core/src/main/java/org/apache/mahout/cf/taste/impl/common/ core/src/main/java/org/apache/ma...

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/CachingRecommender.java Tue Dec 23 15:32:31 2008
@@ -67,6 +67,7 @@
     this.estimatedPrefCache =
             new Cache<Pair<?, ?>, Double>(new EstimatedPrefRetriever(this.recommender), numUsers);
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() {
         clear();
         return null;
@@ -89,10 +90,12 @@
     }
   }
 
+  @Override
   public List<RecommendedItem> recommend(Object userID, int howMany) throws TasteException {
     return recommend(userID, howMany, null);
   }
 
+  @Override
   public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
           throws TasteException {
     if (userID == null) {
@@ -111,37 +114,43 @@
     setCurrentRescorer(rescorer);
 
     Recommendations recommendations = recommendationCache.get(userID);
-    if (recommendations.getItems().size() < howMany && !recommendations.noMoreRecommendableItems) {
+    if (recommendations.getItems().size() < howMany && !recommendations.isNoMoreRecommendableItems()) {
       clear(userID);
       recommendations = recommendationCache.get(userID);
       if (recommendations.getItems().size() < howMany) {
-        recommendations.noMoreRecommendableItems = true;
+        recommendations.setNoMoreRecommendableItems(true);
       }
     }
 
-    return recommendations.getItems().size() > howMany ?
-           recommendations.getItems().subList(0, howMany) :
-           recommendations.getItems();
+    List<RecommendedItem> recommendedItems = recommendations.getItems();
+    return recommendedItems.size() > howMany ?
+           recommendedItems.subList(0, howMany) :
+           recommendedItems;
   }
 
+  @Override
   public double estimatePreference(Object userID, Object itemID) throws TasteException {
     return estimatedPrefCache.get(new Pair<Object, Object>(userID, itemID));
   }
 
+  @Override
   public void setPreference(Object userID, Object itemID, double value) throws TasteException {
     recommender.setPreference(userID, itemID, value);
     clear(userID);
   }
 
+  @Override
   public void removePreference(Object userID, Object itemID) throws TasteException {
     recommender.removePreference(userID, itemID);
     clear(userID);
   }
 
+  @Override
   public DataModel getDataModel() {
     return recommender.getDataModel();
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }
@@ -177,13 +186,15 @@
       this.recommender = recommender;
     }
 
+    @Override
     public Recommendations get(Object key) throws TasteException {
       log.debug("Retrieving new recommendations for user ID '{}'", key);
       List<RecommendedItem> recommendations;
+      int howMany = maxHowMany.get();
       if (currentRescorer == null) {
-        recommendations = recommender.recommend(key, maxHowMany.get());
+        recommendations = recommender.recommend(key, howMany);
       } else {
-        recommendations = recommender.recommend(key, maxHowMany.get(), currentRescorer);
+        recommendations = recommender.recommend(key, howMany, currentRescorer);
       }
       return new Recommendations(Collections.unmodifiableList(recommendations));
     }
@@ -197,6 +208,7 @@
       this.recommender = recommender;
     }
 
+    @Override
     public Double get(Pair<?, ?> key) throws TasteException {
       Object userID = key.getFirst();
       Object itemID = key.getSecond();
@@ -212,12 +224,19 @@
 
     private Recommendations(List<RecommendedItem> items) {
       this.items = items;
-      this.noMoreRecommendableItems = false;
     }
 
-    private List<RecommendedItem> getItems() {
+    List<RecommendedItem> getItems() {
       return items;
     }
+
+    boolean isNoMoreRecommendableItems() {
+      return noMoreRecommendableItems;
+    }
+
+    void setNoMoreRecommendableItems(boolean noMoreRecommendableItems) {
+      this.noMoreRecommendableItems = noMoreRecommendableItems;
+    }
   }
 
 }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/FarthestNeighborClusterSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/FarthestNeighborClusterSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/FarthestNeighborClusterSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/FarthestNeighborClusterSimilarity.java Tue Dec 23 15:32:31 2008
@@ -64,6 +64,7 @@
     this.samplingPercentage = samplingPercentage;
   }
 
+  @Override
   public double getSimilarity(Collection<User> cluster1,
                               Collection<User> cluster2) throws TasteException {
     if (cluster1.isEmpty() || cluster2.isEmpty()) {
@@ -87,6 +88,7 @@
     return leastSimilarity;
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
     RefreshHelper.maybeRefresh(alreadyRefreshed, similarity);

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericItemBasedRecommender.java Tue Dec 23 15:32:31 2008
@@ -76,6 +76,7 @@
     refreshHelper.addDependency(similarity);
   }
 
+  @Override
   public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
           throws TasteException {
 
@@ -103,6 +104,7 @@
     return topItems;
   }
 
+  @Override
   public double estimatePreference(Object userID, Object itemID) throws TasteException {
     DataModel model = getDataModel();
     User theUser = model.getUser(userID);
@@ -114,10 +116,12 @@
     return doEstimatePreference(theUser, item);
   }
 
+  @Override
   public List<RecommendedItem> mostSimilarItems(Object itemID, int howMany) throws TasteException {
     return mostSimilarItems(itemID, howMany, null);
   }
 
+  @Override
   public List<RecommendedItem> mostSimilarItems(Object itemID,
                                                 int howMany,
                                                 Rescorer<Pair<Item, Item>> rescorer) throws TasteException {
@@ -126,10 +130,12 @@
     return doMostSimilarItems(itemID, howMany, estimator);
   }
 
+  @Override
   public List<RecommendedItem> mostSimilarItems(List<Object> itemIDs, int howMany) throws TasteException {
     return mostSimilarItems(itemIDs, howMany, null);
   }
 
+  @Override
   public List<RecommendedItem> mostSimilarItems(List<Object> itemIDs,
                                                 int howMany,
                                                 Rescorer<Pair<Item, Item>> rescorer) throws TasteException {
@@ -149,6 +155,7 @@
     return TopItems.getTopItems(howMany, allItems, null, estimator);
   }
 
+  @Override
   public List<RecommendedItem> recommendedBecause(Object userID,
                                                   Object itemID,
                                                   int howMany) throws TasteException {
@@ -213,6 +220,7 @@
     return theUser.getPreferencesAsArray().length;
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }
@@ -236,6 +244,7 @@
       this.rescorer = rescorer;
     }
 
+    @Override
     public double estimate(Item item) throws TasteException {
       Pair<Item, Item> pair = new Pair<Item, Item>(toItem, item);
       if (rescorer != null && rescorer.isFiltered(pair)) {
@@ -254,6 +263,7 @@
       this.theUser = theUser;
     }
 
+    @Override
     public double estimate(Item item) throws TasteException {
       return doEstimatePreference(theUser, item);
     }
@@ -273,6 +283,7 @@
       this.rescorer = rescorer;
     }
 
+    @Override
     public double estimate(Item item) throws TasteException {
       RunningAverage average = new FullRunningAverage();
       for (Item toItem : toItems) {
@@ -304,6 +315,7 @@
       this.similarity = similarity;
     }
 
+    @Override
     public double estimate(Item item) throws TasteException {
       Preference pref = user.getPreferenceFor(item.getID());
       if (pref == null) {

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericRecommendedItem.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericRecommendedItem.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericRecommendedItem.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericRecommendedItem.java Tue Dec 23 15:32:31 2008
@@ -47,10 +47,12 @@
     this.value = value;
   }
 
+  @Override
   public Item getItem() {
     return item;
   }
 
+  @Override
   public double getValue() {
     return value;
   }
@@ -80,6 +82,7 @@
    * @param other
    * @return 1, -1, 0 as this value is less than, greater than or equal to the other's value
    */
+  @Override
   public int compareTo(RecommendedItem other) {
     double otherValue = other.getValue();
     return value > otherValue ? -1 : value < otherValue ? 1 : 0;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/GenericUserBasedRecommender.java Tue Dec 23 15:32:31 2008
@@ -67,6 +67,7 @@
     refreshHelper.addDependency(neighborhood);
   }
 
+  @Override
   public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
           throws TasteException {
     if (userID == null) {
@@ -97,6 +98,7 @@
     return topItems;
   }
 
+  @Override
   public double estimatePreference(Object userID, Object itemID) throws TasteException {
     DataModel model = getDataModel();
     User theUser = model.getUser(userID);
@@ -109,10 +111,12 @@
     return doEstimatePreference(theUser, theNeighborhood, item);
   }
 
+  @Override
   public List<User> mostSimilarUsers(Object userID, int howMany) throws TasteException {
     return mostSimilarUsers(userID, howMany, null);
   }
 
+  @Override
   public List<User> mostSimilarUsers(Object userID,
                                      int howMany,
                                      Rescorer<Pair<User, User>> rescorer) throws TasteException {
@@ -165,6 +169,7 @@
     return allItems;
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }
@@ -188,6 +193,7 @@
       this.rescorer = rescorer;
     }
 
+    @Override
     public double estimate(User user) throws TasteException {
       // Don't consider the user itself as a possible most similar user
       if (user.equals(toUser)) {
@@ -212,6 +218,7 @@
       this.theNeighborhood = theNeighborhood;
     }
 
+    @Override
     public double estimate(Item item) throws TasteException {
       return doEstimatePreference(theUser, theNeighborhood, item);
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemAverageRecommender.java Tue Dec 23 15:32:31 2008
@@ -61,6 +61,7 @@
     this.itemAverages = new FastMap<Object, RunningAverage>();
     this.buildAveragesLock = new ReentrantReadWriteLock();
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() throws TasteException {
         buildAverageDiffs();
         return null;
@@ -69,6 +70,7 @@
     refreshHelper.addDependency(dataModel);
   }
 
+  @Override
   public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
           throws TasteException {
     if (userID == null) {
@@ -91,6 +93,7 @@
     return topItems;
   }
 
+  @Override
   public double estimatePreference(Object userID, Object itemID) throws TasteException {
     DataModel model = getDataModel();
     User theUser = model.getUser(userID);
@@ -189,6 +192,7 @@
     }
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }
@@ -200,6 +204,7 @@
 
   private final class Estimator implements TopItems.Estimator<Item> {
 
+    @Override
     public double estimate(Item item) {
       return doEstimatePreference(item.getID());
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/ItemUserAverageRecommender.java Tue Dec 23 15:32:31 2008
@@ -66,6 +66,7 @@
     this.overallAveragePrefValue = new FullRunningAverage();
     this.buildAveragesLock = new ReentrantReadWriteLock();
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() throws TasteException {
         buildAverageDiffs();
         return null;
@@ -74,6 +75,7 @@
     refreshHelper.addDependency(dataModel);
   }
 
+  @Override
   public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
           throws TasteException {
     if (userID == null) {
@@ -96,6 +98,7 @@
     return topItems;
   }
 
+  @Override
   public double estimatePreference(Object userID, Object itemID) throws TasteException {
     DataModel model = getDataModel();
     User theUser = model.getUser(userID);
@@ -227,6 +230,7 @@
     }
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }
@@ -244,6 +248,7 @@
       this.userID = userID;
     }
 
+    @Override
     public double estimate(Item item) {
       return doEstimatePreference(userID, item.getID());
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NearestNeighborClusterSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NearestNeighborClusterSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NearestNeighborClusterSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NearestNeighborClusterSimilarity.java Tue Dec 23 15:32:31 2008
@@ -64,6 +64,7 @@
     this.samplingPercentage = samplingPercentage;
   }
 
+  @Override
   public double getSimilarity(Collection<User> cluster1,
                               Collection<User> cluster2) throws TasteException {
     if (cluster1.isEmpty() || cluster2.isEmpty()) {
@@ -87,6 +88,7 @@
     return greatestSimilarity;
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
     RefreshHelper.maybeRefresh(alreadyRefreshed, similarity);

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/NullRescorer.java Tue Dec 23 15:32:31 2008
@@ -57,10 +57,12 @@
    * @param originalScore current score for {@link Item}
    * @return same originalScore as new score, always
    */
+  @Override
   public double rescore(T thing, double originalScore) {
     return originalScore;
   }
 
+  @Override
   public boolean isFiltered(T thing) {
     return false;
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/SimilarUser.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/SimilarUser.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/SimilarUser.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/SimilarUser.java Tue Dec 23 15:32:31 2008
@@ -63,6 +63,7 @@
   /**
    * Defines an ordering from most similar to least similar.
    */
+  @Override
   public int compareTo(SimilarUser other) {
     double otherSimilarity = other.similarity;
     return similarity > otherSimilarity ? -1 : similarity < otherSimilarity ? 1 : 0;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TopItems.java Tue Dec 23 15:32:31 2008
@@ -137,7 +137,7 @@
     return result;
   }
 
-  public static interface Estimator<T> {
+  public interface Estimator<T> {
 
     double estimate(T thing) throws TasteException;
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender.java Tue Dec 23 15:32:31 2008
@@ -118,6 +118,7 @@
     this.samplingPercentage = samplingPercentage;
     this.buildClustersLock = new ReentrantLock();
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() throws TasteException {
         buildClusters();
         return null;
@@ -173,6 +174,7 @@
     this.samplingPercentage = samplingPercentage;
     this.buildClustersLock = new ReentrantLock();
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() throws TasteException {
         buildClusters();
         return null;
@@ -182,6 +184,7 @@
     refreshHelper.addDependency(clusterSimilarity);
   }
 
+  @Override
   public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
           throws TasteException {
     if (userID == null) {
@@ -218,6 +221,7 @@
     return rescored;
   }
 
+  @Override
   public double estimatePreference(Object userID, Object itemID) throws TasteException {
     if (userID == null || itemID == null) {
       throw new IllegalArgumentException("userID or itemID is null");
@@ -241,6 +245,7 @@
     return Double.NaN;
   }
 
+  @Override
   public Collection<User> getCluster(Object userID) throws TasteException {
     if (userID == null) {
       throw new IllegalArgumentException("userID is null");
@@ -254,6 +259,7 @@
     }
   }
 
+  @Override
   public Collection<Collection<User>> getClusters() throws TasteException {
     checkClustersBuilt();
     return allClusters;
@@ -266,8 +272,8 @@
   }
 
   private void buildClusters() throws TasteException {
+    buildClustersLock.lock();    
     try {
-      buildClustersLock.lock();
       DataModel model = getDataModel();
       int numUsers = model.getNumUsers();
       if (numUsers > 0) {
@@ -402,6 +408,7 @@
     return clustersPerUser;
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }
@@ -419,6 +426,7 @@
       this.cluster = cluster;
     }
 
+    @Override
     public double estimate(Item item) {
       RunningAverage average = new FullRunningAverage();
       for (User user : cluster) {

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/TreeClusteringRecommender2.java Tue Dec 23 15:32:31 2008
@@ -105,6 +105,7 @@
     this.clusteringByThreshold = false;
     this.buildClustersLock = new ReentrantLock();
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() throws TasteException {
         buildClusters();
         return null;
@@ -139,6 +140,7 @@
     this.clusteringByThreshold = true;
     this.buildClustersLock = new ReentrantLock();
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() throws TasteException {
         buildClusters();
         return null;
@@ -148,6 +150,7 @@
     refreshHelper.addDependency(clusterSimilarity);
   }
 
+  @Override
   public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
           throws TasteException {
     if (userID == null) {
@@ -184,6 +187,7 @@
     return rescored;
   }
 
+  @Override
   public double estimatePreference(Object userID, Object itemID) throws TasteException {
     if (userID == null || itemID == null) {
       throw new IllegalArgumentException("userID or itemID is null");
@@ -207,6 +211,7 @@
     return Double.NaN;
   }
 
+  @Override
   public Collection<User> getCluster(Object userID) throws TasteException {
     if (userID == null) {
       throw new IllegalArgumentException("userID is null");
@@ -220,6 +225,7 @@
     }
   }
 
+  @Override
   public Collection<Collection<User>> getClusters() throws TasteException {
     checkClustersBuilt();
     return allClusters;
@@ -273,6 +279,7 @@
              similarity == other.similarity;
     }
 
+    @Override
     public int compareTo(ClusterClusterPair other) {
       double otherSimilarity = other.similarity;
       if (similarity > otherSimilarity) {
@@ -287,9 +294,8 @@
   }
 
   private void buildClusters() throws TasteException {
+    buildClustersLock.lock();
     try {
-      buildClustersLock.lock();
-
       DataModel model = getDataModel();
       int numUsers = model.getNumUsers();
 
@@ -485,6 +491,7 @@
     return clustersPerUser;
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }
@@ -502,6 +509,7 @@
       this.cluster = cluster;
     }
 
+    @Override
     public double estimate(Item item) {
       RunningAverage average = new FullRunningAverage();
       for (User user : cluster) {

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverage.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverage.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverage.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverage.java Tue Dec 23 15:32:31 2008
@@ -27,22 +27,27 @@
     this.delegate = delegate;
   }
 
+  @Override
   public void addDatum(double datum) {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public void removeDatum(double datum) {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public void changeDatum(double delta) {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public int getCount() {
     return delegate.getCount();
   }
 
+  @Override
   public double getAverage() {
     return -delegate.getAverage();
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverageAndStdDev.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverageAndStdDev.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverageAndStdDev.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/InvertedRunningAverageAndStdDev.java Tue Dec 23 15:32:31 2008
@@ -27,26 +27,32 @@
     this.delegate = delegate;
   }
 
+  @Override
   public void addDatum(double datum) {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public void removeDatum(double datum) {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public void changeDatum(double delta) {
     throw new UnsupportedOperationException();
   }
 
+  @Override
   public int getCount() {
     return delegate.getCount();
   }
 
+  @Override
   public double getAverage() {
     return -delegate.getAverage();
   }
 
+  @Override
   public double getStandardDeviation() {
     return delegate.getStandardDeviation();
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/MemoryDiffStorage.java Tue Dec 23 15:32:31 2008
@@ -107,6 +107,7 @@
     this.averageItemPref = new FastMap<Object, RunningAverage>();
     this.buildAverageDiffsLock = new ReentrantReadWriteLock();
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() throws TasteException {
         buildAverageDiffs();
         return null;
@@ -116,6 +117,7 @@
     buildAverageDiffs();
   }
 
+  @Override
   public RunningAverage getDiff(Object itemID1, Object itemID2) {
     Map<Object, RunningAverage> level2Map = averageDiffs.get(itemID1);
     RunningAverage average = null;
@@ -142,6 +144,7 @@
     }
   }
 
+  @Override
   public RunningAverage[] getDiffs(Object userID, Object itemID, Preference[] prefs) {
     try {
       buildAverageDiffsLock.readLock().lock();
@@ -156,10 +159,12 @@
     }
   }
 
+  @Override
   public RunningAverage getAverageItemPref(Object itemID) {
     return averageItemPref.get(itemID);
   }
 
+  @Override
   public void updateItemPref(Object itemID, double prefDelta, boolean remove) {
     if (!remove && stdDevWeighted) {
       throw new UnsupportedOperationException("Can't update only when stdDevWeighted is set");
@@ -194,6 +199,7 @@
     }
   }
 
+  @Override
   public Set<Item> getRecommendableItems(Object userID) throws TasteException {
     User user = dataModel.getUser(userID);
     Set<Item> result = new FastSet<Item>(dataModel.getNumItems());
@@ -285,6 +291,7 @@
     }
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/SlopeOneRecommender.java Tue Dec 23 15:32:31 2008
@@ -97,6 +97,7 @@
     this.diffStorage = diffStorage;
   }
 
+  @Override
   public List<RecommendedItem> recommend(Object userID, int howMany, Rescorer<Item> rescorer)
           throws TasteException {
     if (userID == null) {
@@ -119,6 +120,7 @@
     return topItems;
   }
 
+  @Override
   public double estimatePreference(Object userID, Object itemID) throws TasteException {
     DataModel model = getDataModel();
     User theUser = model.getUser(userID);
@@ -194,6 +196,7 @@
     }
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
     RefreshHelper.maybeRefresh(alreadyRefreshed, diffStorage);
@@ -213,6 +216,7 @@
       this.theUser = theUser;
     }
 
+    @Override
     public double estimate(Item item) throws TasteException {
       return doEstimatePreference(theUser, item.getID());
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/recommender/slopeone/jdbc/AbstractJDBCDiffStorage.java Tue Dec 23 15:32:31 2008
@@ -99,6 +99,7 @@
     this.diffsExistSQL = diffsExistSQL;
     this.minDiffCount = minDiffCount;
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() throws TasteException {
         buildAverageDiffs();
         return null;
@@ -113,6 +114,7 @@
     }
   }
 
+  @Override
   public RunningAverage getDiff(Object itemID1, Object itemID2) throws TasteException {
     Connection conn = null;
     PreparedStatement stmt = null;
@@ -139,6 +141,7 @@
     }
   }
 
+  @Override
   public RunningAverage[] getDiffs(Object userID, Object itemID, Preference[] prefs)
           throws TasteException {
     int size = prefs.length;
@@ -175,6 +178,7 @@
     return result;
   }
 
+  @Override
   public RunningAverage getAverageItemPref(Object itemID) throws TasteException {
     Connection conn = null;
     PreparedStatement stmt = null;
@@ -200,6 +204,7 @@
     }
   }
 
+  @Override
   public void updateItemPref(Object itemID, double prefDelta, boolean remove)
           throws TasteException {
     Connection conn = null;
@@ -237,6 +242,7 @@
     return stmt;
   }
 
+  @Override
   public Set<Item> getRecommendableItems(Object userID) throws TasteException {
     Connection conn = null;
     PreparedStatement stmt = null;
@@ -309,6 +315,7 @@
     }
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }
@@ -323,22 +330,27 @@
       this.average = average;
     }
 
+    @Override
     public void addDatum(double datum) {
       throw new UnsupportedOperationException();
     }
 
+    @Override
     public void removeDatum(double datum) {
       throw new UnsupportedOperationException();
     }
 
+    @Override
     public void changeDatum(double delta) {
       throw new UnsupportedOperationException();
     }
 
+    @Override
     public int getCount() {
       return count;
     }
 
+    @Override
     public double getAverage() {
       return average;
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AbstractSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AbstractSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AbstractSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AbstractSimilarity.java Tue Dec 23 15:32:31 2008
@@ -72,6 +72,7 @@
     this.cachedNumItems = dataModel.getNumItems();
     this.cachedNumUsers = dataModel.getNumUsers();
     this.refreshHelper = new RefreshHelper(new Callable<Object>() {
+      @Override
       public Object call() throws TasteException {
         cachedNumItems = AbstractSimilarity.this.dataModel.getNumItems();
         cachedNumUsers = AbstractSimilarity.this.dataModel.getNumUsers();
@@ -92,6 +93,7 @@
     return inferrer;
   }
 
+  @Override
   public final void setPreferenceInferrer(PreferenceInferrer inferrer) {
     if (inferrer == null) {
       throw new IllegalArgumentException("inferrer is null");
@@ -138,6 +140,7 @@
    */
   abstract double computeResult(int n, double sumXY, double sumX2, double sumY2, double sumXYdiff2);
 
+  @Override
   public double userSimilarity(User user1, User user2) throws TasteException {
 
     if (user1 == null || user2 == null) {
@@ -257,6 +260,7 @@
     return result;
   }
 
+  @Override
   public final double itemSimilarity(Item item1, Item item2) throws TasteException {
 
     if (item1 == null || item2 == null) {
@@ -363,6 +367,7 @@
     return result;
   }
 
+  @Override
   public final void refresh(Collection<Refreshable> alreadyRefreshed) {
     refreshHelper.refresh(alreadyRefreshed);
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/AveragingPreferenceInferrer.java Tue Dec 23 15:32:31 2008
@@ -48,6 +48,7 @@
     refresh(null);
   }
 
+  @Override
   public double inferPreference(User user, Item item) throws TasteException {
     if (user == null || item == null) {
       throw new IllegalArgumentException("user or item is null");
@@ -55,12 +56,14 @@
     return averagePreferenceValue.get(user);
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     averagePreferenceValue.clear();
   }
 
   private static final class PrefRetriever implements Retriever<User, Double> {
 
+    @Override
     public Double get(User key) {
       RunningAverage average = new FullRunningAverage();
       Preference[] prefs = key.getPreferencesAsArray();

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingItemSimilarity.java Tue Dec 23 15:32:31 2008
@@ -46,6 +46,7 @@
     this.similarityCache = new Cache<Pair<Item, Item>, Double>(new SimilarityRetriever(similarity), maxCacheSize);
   }
 
+  @Override
   public double itemSimilarity(Item item1, Item item2) throws TasteException {
     Pair<Item, Item> key;
     if (item1.compareTo(item2) < 0) {
@@ -56,6 +57,7 @@
     return similarityCache.get(key);
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     similarityCache.clear();
     alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
@@ -69,6 +71,7 @@
       this.similarity = similarity;
     }
 
+    @Override
     public Double get(Pair<Item, Item> key) throws TasteException {
       return similarity.itemSimilarity(key.getFirst(), key.getSecond());
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/CachingUserSimilarity.java Tue Dec 23 15:32:31 2008
@@ -47,6 +47,7 @@
     this.similarityCache = new Cache<Pair<User, User>, Double>(new SimilarityRetriever(similarity), maxCacheSize);
   }
 
+  @Override
   public double userSimilarity(User user1, User user2) throws TasteException {
     Pair<User, User> key;
     if (user1.compareTo(user2) < 0) {
@@ -57,11 +58,13 @@
     return similarityCache.get(key);
   }
 
+  @Override
   public void setPreferenceInferrer(PreferenceInferrer inferrer) {
     similarityCache.clear();
     similarity.setPreferenceInferrer(inferrer);
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     similarityCache.clear();
     alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
@@ -75,6 +78,7 @@
       this.similarity = similarity;
     }
 
+    @Override
     public Double get(Pair<User, User> key) throws TasteException {
       return similarity.userSimilarity(key.getFirst(), key.getSecond());
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/EuclideanDistanceSimilarity.java Tue Dec 23 15:32:31 2008
@@ -40,6 +40,7 @@
     super(dataModel, weighting);
   }
 
+  @Override
   double computeResult(int n, double sumXY, double sumX2, double sumY2, double sumXYdiff2) {
     if (n == 0) {
       return Double.NaN;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/GenericItemSimilarity.java Tue Dec 23 15:32:31 2008
@@ -23,6 +23,7 @@
 import org.apache.mahout.cf.taste.impl.common.FastMap;
 import org.apache.mahout.cf.taste.impl.common.IteratorIterable;
 import org.apache.mahout.cf.taste.impl.common.IteratorUtils;
+import org.apache.mahout.cf.taste.impl.common.RandomUtils;
 import org.apache.mahout.cf.taste.impl.recommender.TopItems;
 import org.apache.mahout.cf.taste.model.DataModel;
 import org.apache.mahout.cf.taste.model.Item;
@@ -49,7 +50,7 @@
 
   /**
    * <p>Creates a {@link GenericItemSimilarity} from a precomputed list of
-   * {@link org.apache.mahout.cf.taste.impl.similarity.GenericItemSimilarity.ItemItemSimilarity}s. Each
+   * {@link ItemItemSimilarity}s. Each
    * represents the similarity between two distinct items. Since similarity is assumed to be symmetric,
    * it is not necessary to specify similarity between item1 and item2, and item2 and item1. Both are the same.
    * It is also not necessary to specify a similarity between any item and itself; these are assumed to be 1.0.</p>
@@ -58,7 +59,7 @@
    * win.</p>
    *
    * @param similarities set of
-   *  {@link org.apache.mahout.cf.taste.impl.similarity.GenericItemSimilarity.ItemItemSimilarity}s
+   *  {@link ItemItemSimilarity}s
    *  on which to base this instance
    */
   public GenericItemSimilarity(Iterable<ItemItemSimilarity> similarities) {
@@ -73,7 +74,7 @@
    * <p>Thanks to tsmorton for suggesting this and providing part of the implementation.</p>
    *
    * @param similarities set of
-   *  {@link org.apache.mahout.cf.taste.impl.similarity.GenericItemSimilarity.ItemItemSimilarity}s
+   *  {@link ItemItemSimilarity}s
    *  on which to base this instance
    * @param maxToKeep maximum number of similarities to keep
    */
@@ -85,7 +86,7 @@
   /**
    * <p>Builds a list of item-item similarities given an {@link ItemSimilarity} implementation and a
    * {@link DataModel}, rather than a list of
-   * {@link org.apache.mahout.cf.taste.impl.similarity.GenericItemSimilarity.ItemItemSimilarity}s.</p>
+   * {@link ItemItemSimilarity}s.</p>
    *
    * <p>It's valid to build a {@link GenericItemSimilarity} this way, but perhaps missing some of the point
    * of an item-based recommender. Item-based recommenders use the assumption that item-item similarities
@@ -159,6 +160,7 @@
    * @param item2 second item
    * @return similarity between the two
    */
+  @Override
   public double itemSimilarity(Item item1, Item item2) {
     int compare = item1.compareTo(item2);
     if (compare == 0) {
@@ -181,6 +183,7 @@
     return similarity == null ? Double.NaN : similarity;
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     // Do nothing
   }
@@ -232,11 +235,26 @@
     /**
      * Defines an ordering from highest similarity to lowest.
      */
+    @Override
     public int compareTo(ItemItemSimilarity other) {
       double otherValue = other.value;
       return value > otherValue ? -1 : value < otherValue ? 1 : 0;
     }
 
+    @Override
+    public boolean equals(Object other) {
+      if (!(other instanceof ItemItemSimilarity)) {
+        return false;
+      }
+      ItemItemSimilarity otherSimilarity = (ItemItemSimilarity) other;
+      return otherSimilarity.item1.equals(item1) && otherSimilarity.item2.equals(item2) && otherSimilarity.value == value;
+    }
+
+    @Override
+    public int hashCode() {
+      return item1.hashCode() ^ item2.hashCode() ^ RandomUtils.hashDouble(value);
+    }
+
   }
 
   private static final class DataModelSimilaritiesIterator implements Iterator<ItemItemSimilarity> {
@@ -257,10 +275,12 @@
       j = 1;
     }
 
+    @Override
     public boolean hasNext() {
       return i < size - 1;
     }
 
+    @Override
     public ItemItemSimilarity next() {
       if (!hasNext()) {
         throw new NoSuchElementException();
@@ -283,6 +303,7 @@
       return result;
     }
 
+    @Override
     public void remove() {
       throw new UnsupportedOperationException();
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/LogLikelihoodSimilarity.java Tue Dec 23 15:32:31 2008
@@ -37,7 +37,8 @@
     this.dataModel = dataModel;
   }
 
-  public final double itemSimilarity(Item item1, Item item2) throws TasteException {
+  @Override
+  public double itemSimilarity(Item item1, Item item2) throws TasteException {
     if (item1 == null || item2 == null) {
       throw new IllegalArgumentException("item1 or item2 is null");
     }
@@ -63,13 +64,14 @@
     return d <= 0.0 ? 0 : Math.log(d);
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
     RefreshHelper.maybeRefresh(alreadyRefreshed, dataModel);
   }
 
   @Override
-  public final String toString() {
+  public String toString() {
     return "LogLikelihoodSimilarity[dataModel:" + dataModel + ']';
   }
 

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/PearsonCorrelationSimilarity.java Tue Dec 23 15:32:31 2008
@@ -54,6 +54,7 @@
     super(dataModel, weighting);
   }
 
+  @Override
   double computeResult(int n, double sumXY, double sumX2, double sumY2, double sumXYdiff2) {
     if (n == 0) {
       return Double.NaN;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/SpearmanCorrelationSimilarity.java Tue Dec 23 15:32:31 2008
@@ -56,6 +56,7 @@
     this.rankingUserSimilarity = rankingUserSimilarity;
   }
 
+  @Override
   public double userSimilarity(User user1, User user2) throws TasteException {
     if (user1 == null || user2 == null) {
       throw new IllegalArgumentException("user1 or user2 is null");
@@ -64,10 +65,12 @@
                                                   new RankedPreferenceUser(user2));
   }
 
+  @Override
   public void setPreferenceInferrer(PreferenceInferrer inferrer) {
     rankingUserSimilarity.setPreferenceInferrer(inferrer);
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
     RefreshHelper.maybeRefresh(alreadyRefreshed, rankingUserSimilarity);
@@ -86,18 +89,22 @@
       this.delegate = delegate;
     }
 
+    @Override
     public Object getID() {
       return delegate.getID();
     }
 
+    @Override
     public Preference getPreferenceFor(Object itemID) {
       throw new UnsupportedOperationException();
     }
 
+    @Override
     public Iterable<Preference> getPreferences() {
       return Arrays.asList(getPreferencesAsArray());
     }
 
+    @Override
     public Preference[] getPreferencesAsArray() {
       Preference[] source = delegate.getPreferencesAsArray();
       int length = source.length;
@@ -121,6 +128,7 @@
       return o instanceof RankedPreferenceUser && delegate.equals(((RankedPreferenceUser) o).delegate);
     }
 
+    @Override
     public int compareTo(User user) {
       return delegate.compareTo(user);
     }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/similarity/TanimotoCoefficientSimilarity.java Tue Dec 23 15:32:31 2008
@@ -57,11 +57,13 @@
   /**
    * @throws UnsupportedOperationException
    */
+  @Override
   public void setPreferenceInferrer(PreferenceInferrer inferrer) {
     throw new UnsupportedOperationException();
   }
 
-  public final double userSimilarity(User user1, User user2) throws TasteException {
+  @Override
+  public double userSimilarity(User user1, User user2) {
 
     if (user1 == null || user2 == null) {
       throw new IllegalArgumentException("user1 or user2 is null");
@@ -116,7 +118,8 @@
     return result;
   }
 
-  public final double itemSimilarity(Item item1, Item item2) throws TasteException {
+  @Override
+  public double itemSimilarity(Item item1, Item item2) throws TasteException {
 
     if (item1 == null || item2 == null) {
       throw new IllegalArgumentException("item1 or item2 is null");
@@ -171,13 +174,14 @@
     return result;
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     alreadyRefreshed = RefreshHelper.buildRefreshed(alreadyRefreshed);
     RefreshHelper.maybeRefresh(alreadyRefreshed, dataModel);
   }
 
   @Override
-  public final String toString() {
+  public String toString() {
     return "TanimotoCoefficientSimilarity[dataModel:" + dataModel + ']';
   }
 

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/CaseAmplification.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/CaseAmplification.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/CaseAmplification.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/CaseAmplification.java Tue Dec 23 15:32:31 2008
@@ -54,10 +54,12 @@
    * @return <code>value<sup>factor</sup></code> if value is nonnegative;
    *         <code>-value<sup>-factor</sup></code> otherwise
    */
+  @Override
   public double transformSimilarity(Object thing1, Object thing2, double value) {
     return value < 0.0 ? -Math.pow(-value, factor) : Math.pow(value, factor);
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     // do nothing
   }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/InverseUserFrequency.java Tue Dec 23 15:32:31 2008
@@ -82,6 +82,7 @@
     return logBase;
   }
 
+  @Override
   public double getTransformedValue(Preference pref) {
     Double factor = iufFactors.get().get(pref.getItem());
     if (factor != null) {
@@ -90,6 +91,7 @@
     return pref.getValue();
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     try {
       recompute();

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/ZScore.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/ZScore.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/ZScore.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/impl/transforms/ZScore.java Tue Dec 23 15:32:31 2008
@@ -49,6 +49,7 @@
     refresh(null);
   }
 
+  @Override
   public double getTransformedValue(Preference pref) throws TasteException {
     RunningAverageAndStdDev meanAndStdev = meanAndStdevs.get(pref.getUser());
     if (meanAndStdev.getCount() > 1) {
@@ -60,6 +61,7 @@
     return 0.0;
   }
 
+  @Override
   public void refresh(Collection<Refreshable> alreadyRefreshed) {
     // do nothing
   }
@@ -71,6 +73,7 @@
 
   private static class MeanStdevRetriever implements Retriever<User, RunningAverageAndStdDev> {
 
+    @Override
     public RunningAverageAndStdDev get(User user) throws TasteException {
       RunningAverageAndStdDev running = new FullRunningAverageAndStdDev();
       Preference[] prefs = user.getPreferencesAsArray();

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/cf/taste/web/RecommenderServlet.java Tue Dec 23 15:32:31 2008
@@ -115,7 +115,7 @@
 
   }
 
-  private void writeXML(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException {
+  private static void writeXML(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException {
     response.setContentType("text/xml");
     response.setCharacterEncoding("UTF-8");
     response.setHeader("Cache-Control", "no-cache");
@@ -131,7 +131,7 @@
     writer.println("</recommendedItems>");
   }
 
-  private void writeJSON(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException {
+  private static void writeJSON(HttpServletResponse response, Iterable<RecommendedItem> items) throws IOException {
     response.setContentType("text/plain");
     response.setCharacterEncoding("UTF-8");
     response.setHeader("Cache-Control", "no-cache");
@@ -162,7 +162,7 @@
     }
   }
 
-  private void writeRecommendations(Iterable<RecommendedItem> items, PrintWriter writer) {
+  private static void writeRecommendations(Iterable<RecommendedItem> items, PrintWriter writer) {
     for (RecommendedItem recommendedItem : items) {
       writer.print(recommendedItem.getValue());
       writer.print('\t');

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java Tue Dec 23 15:32:31 2008
@@ -57,6 +57,9 @@
 
   private static final String LINE_SEP = System.getProperty("line.separator");
 
+  private BayesFileFormatter() {
+  }
+
   /**
    * Collapse all the files in the inputDir into a single file in the proper
    * Bayes format, 1 document per line
@@ -153,6 +156,7 @@
       this.outputDir = outputDir;
     }
 
+    @Override
     public boolean accept(File file) {
       if (file.isFile()) {
         Writer theWriter = null;
@@ -258,9 +262,9 @@
   @SuppressWarnings("static-access")
   public static void main(String[] args) throws ClassNotFoundException,
       IllegalAccessException, InstantiationException, IOException {
-    final DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
-    final ArgumentBuilder abuilder = new ArgumentBuilder();
-    final GroupBuilder gbuilder = new GroupBuilder();
+    DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
+    ArgumentBuilder abuilder = new ArgumentBuilder();
+    GroupBuilder gbuilder = new GroupBuilder();
 
     Option inputOpt = obuilder.withLongName("input").withRequired(true).withArgument(
             abuilder.withName("input").withMinimum(1).withMaximum(1).create()).
@@ -289,11 +293,10 @@
     Option helpOpt = obuilder.withLongName("help").withRequired(true).
             withDescription("Print out help").withShortName("h").create();
     Group group = gbuilder.withName("Options").withOption(inputOpt).withOption(outputOpt).withOption(labelOpt).withOption(analyzerOpt).withOption(charsetOpt).withOption(collapseOpt).withOption(helpOpt).create();
-    CommandLine cmdLine;
     try {
       Parser parser = new Parser();
       parser.setGroup(group);
-      cmdLine = parser.parse(args);
+      CommandLine cmdLine = parser.parse(args);
 
       if (cmdLine.hasOption(helpOpt)) {
         

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ClassifierResult.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ClassifierResult.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ClassifierResult.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ClassifierResult.java Tue Dec 23 15:32:31 2008
@@ -52,6 +52,7 @@
     this.score = score;
   }
 
+  @Override
   public String toString() {
     return "ClassifierResult{" +
             "category='" + label + '\'' +

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/Classify.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/Classify.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/Classify.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/Classify.java Tue Dec 23 15:32:31 2008
@@ -53,12 +53,15 @@
 
   private static final Logger log = LoggerFactory.getLogger(Classify.class);
 
+  private Classify() {
+  }
+
   @SuppressWarnings({ "static-access" })
   public static void main(String[] args)
           throws IOException, ClassNotFoundException, IllegalAccessException, InstantiationException, OptionException {
-    final DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
-    final ArgumentBuilder abuilder = new ArgumentBuilder();
-    final GroupBuilder gbuilder = new GroupBuilder();
+    DefaultOptionBuilder obuilder = new DefaultOptionBuilder();
+    ArgumentBuilder abuilder = new ArgumentBuilder();
+    GroupBuilder gbuilder = new GroupBuilder();
 
     Option pathOpt = obuilder.withLongName("path").withRequired(true).withArgument(
             abuilder.withName("path").withMinimum(1).withMaximum(1).create()).withDescription("The local file system path").withShortName("p").create();
@@ -109,7 +112,6 @@
     log.info("Loading model from: {}", modelPaths);
 
     Model model;
-    Classifier classifier;
 
     String classifierType = (String) cmdLine.getValue(typeOpt);
 
@@ -122,9 +124,9 @@
     } else {
       throw new IllegalArgumentException("Unrecognized classifier type: " + classifierType);
     }
-    classifier = new BayesClassifier();
+    Classifier classifier = new BayesClassifier();
 
-    model = reader.loadModel(model, fs, modelPaths, conf);
+    reader.loadModel(model, fs, modelPaths, conf);
 
     log.info("Done loading model: # labels: {}", model.getLabels().size());
 

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ConfusionMatrix.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ConfusionMatrix.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ConfusionMatrix.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ConfusionMatrix.java Tue Dec 23 15:32:31 2008
@@ -20,7 +20,6 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.mahout.common.Summarizable;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
@@ -32,7 +31,7 @@
  */
 public class ConfusionMatrix implements Summarizable {
 
-  private Collection<String> labels;
+  private final Collection<String> labels;
 
   private final Map<String, Integer> labelMap = new HashMap<String, Integer>();
 
@@ -63,8 +62,9 @@
     int correct = 0;
     for(int i = 0 ;i < labels.size() ;i++){
       labelTotal += confusionMatrix[labelId][i];
-      if(i == labelId)
+      if (i == labelId) {
         correct = confusionMatrix[labelId][i];
+      }
     }
     return 100.0 * correct / labelTotal;
   }
@@ -95,7 +95,7 @@
   public int getCount(String correctLabel, String classifiedLabel) {
     if (labels.contains(correctLabel)
         && labels.contains(classifiedLabel) == false && defaultLabel.equals(classifiedLabel) == false) {
-      throw new IllegalArgumentException("Label not found " +correctLabel + " " +classifiedLabel );
+      throw new IllegalArgumentException("Label not found " +correctLabel + ' ' +classifiedLabel );
     }
     int correctId = labelMap.get(correctLabel);
     int classifiedId = labelMap.get(classifiedLabel);
@@ -137,6 +137,7 @@
     return this;
   }
 
+  @Override
   public String summarize() {
     String lineSep = System.getProperty("line.separator");
     StringBuilder returnString = new StringBuilder();
@@ -168,7 +169,7 @@
     return returnString.toString();
   }
 
-  String getSmallLabel(int i) {
+  static String getSmallLabel(int i) {
     int val = i;
     StringBuilder returnString = new StringBuilder();
     do{

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ResultAnalyzer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ResultAnalyzer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ResultAnalyzer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/ResultAnalyzer.java Tue Dec 23 15:32:31 2008
@@ -54,10 +54,12 @@
     confusionMatrix.addInstance(correctLabel, classifiedResult);
   }
 
+  @Override
   public String toString() {
     return "";
   }
 
+  @Override
   public String summarize() {
     StringBuilder returnString = new StringBuilder();
 

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesClassifier.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesClassifier.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesClassifier.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesClassifier.java Tue Dec 23 15:32:31 2008
@@ -44,6 +44,7 @@
    *                        Ties are broken by comparing the category
    * @return A Collection of {@link org.apache.mahout.classifier.ClassifierResult}s.
    */
+  @Override
   public Collection<ClassifierResult> classify(Model model, String[] document, String defaultCategory, int numResults) {
     Collection<String> categories = model.getLabels();
     
@@ -75,6 +76,7 @@
    * @param defaultCategory The default category to assign if one cannot be determined
    * @return The single best category
    */
+  @Override
   public ClassifierResult classify(Model model, String[] document, String defaultCategory) {
     ClassifierResult result = new ClassifierResult(defaultCategory);
     double max = Double.MAX_VALUE;
@@ -101,8 +103,8 @@
    * @return The probability
    * @see Model# featureWeight (String, String)
    */
+  @Override
   public double documentWeight(Model model, String label, String[] document) {
-    double result = 0.0;
     Map<String, Integer[]> wordList = new HashMap<String, Integer[]>(1000);
     for (String word : document) {
       Integer [] count = wordList.get(word);
@@ -113,6 +115,7 @@
       }
       count[0]++;
     }
+    double result = 0.0;
     for (Map.Entry<String, Integer[]> entry : wordList.entrySet()) {
       String word = entry.getKey();
       int count = entry.getValue()[0];
@@ -128,6 +131,7 @@
       initialize(numResults);
     }
 
+    @Override
     protected boolean lessThan(Object a, Object b) {
       ClassifierResult cr1 = (ClassifierResult) a;
       ClassifierResult cr2 = (ClassifierResult) b;

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesDriver.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesDriver.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesDriver.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesDriver.java Tue Dec 23 15:32:31 2008
@@ -35,6 +35,9 @@
 
   private static final Logger log = LoggerFactory.getLogger(BayesDriver.class);
 
+  private BayesDriver() {
+  }
+
   /**
    * Takes in two arguments:
    * <ol>

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesModel.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesModel.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesModel.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesModel.java Tue Dec 23 15:32:31 2008
@@ -65,19 +65,19 @@
 
   @Override
   public void initializeNormalizer() {
-    double perLabelWeightSumNormalisationFactor = Double.MAX_VALUE;
 
     log.info("{}", thetaNormalizer);
-    for (Integer label : thetaNormalizer.keySet()) {
-      double Sigma_W_ij = thetaNormalizer.get(label);
+    double perLabelWeightSumNormalisationFactor = Double.MAX_VALUE;
+    for (Map.Entry<Integer, Double> integerDoubleEntry1 : thetaNormalizer.entrySet()) {
+      double Sigma_W_ij = integerDoubleEntry1.getValue();
       if (perLabelWeightSumNormalisationFactor > Math.abs(Sigma_W_ij)) {
         perLabelWeightSumNormalisationFactor = Math.abs(Sigma_W_ij);
       }
     }
 
-    for (Integer label : thetaNormalizer.keySet()) {
-      double Sigma_W_ij = thetaNormalizer.get(label);
-      thetaNormalizer.put(label, Sigma_W_ij
+    for (Map.Entry<Integer, Double> integerDoubleEntry : thetaNormalizer.entrySet()) {
+      double Sigma_W_ij = integerDoubleEntry.getValue();
+      thetaNormalizer.put(integerDoubleEntry.getKey(), Sigma_W_ij
           / perLabelWeightSumNormalisationFactor);
     }
     log.info("{}", thetaNormalizer);
@@ -89,9 +89,7 @@
 
       double[] perLabelThetaNormalizer = new double[labelList.size()];
 
-      double perLabelWeightSumNormalisationFactor = Double.MAX_VALUE;
-
-      for (int feature = 0, maxFeatures = featureList.size(); feature < maxFeatures; feature++) {
+    for (int feature = 0, maxFeatures = featureList.size(); feature < maxFeatures; feature++) {
         Integer featureInt = feature;
         for (int label = 0, maxLabels = labelList.size(); label < maxLabels; label++) {
 
@@ -113,7 +111,8 @@
         }
       }
       log.info("Normalizing Weights");
-      for (int label = 0, maxLabels = labelList.size(); label < maxLabels; label++) {
+    double perLabelWeightSumNormalisationFactor = Double.MAX_VALUE;
+    for (int label = 0, maxLabels = labelList.size(); label < maxLabels; label++) {
         double Sigma_W_ij = perLabelThetaNormalizer[label];
         if (perLabelWeightSumNormalisationFactor > Math.abs(Sigma_W_ij)) {
           perLabelWeightSumNormalisationFactor = Math.abs(Sigma_W_ij);

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerDriver.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerDriver.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerDriver.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerDriver.java Tue Dec 23 15:32:31 2008
@@ -26,6 +26,8 @@
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.SequenceFileInputFormat;
 import org.apache.hadoop.mapred.SequenceFileOutputFormat;
+import org.apache.hadoop.mapred.FileOutputFormat;
+import org.apache.hadoop.mapred.FileInputFormat;
 import org.apache.hadoop.util.GenericsUtil;
 import org.apache.mahout.classifier.bayes.io.SequenceFileModelReader;
 import org.slf4j.Logger;
@@ -41,6 +43,9 @@
 
   private static final Logger log = LoggerFactory.getLogger(BayesThetaNormalizerDriver.class);
 
+  private BayesThetaNormalizerDriver() {
+  }
+
   /**
    * Takes in two arguments:
    * <ol>
@@ -70,9 +75,9 @@
 
     conf.setOutputKeyClass(Text.class);
     conf.setOutputValueClass(DoubleWritable.class);
-    SequenceFileInputFormat.addInputPath(conf, new Path(output + "/trainer-tfIdf/trainer-tfIdf"));
+    FileInputFormat.addInputPath(conf, new Path(output + "/trainer-tfIdf/trainer-tfIdf"));
     Path outPath = new Path(output + "/trainer-thetaNormalizer");
-    SequenceFileOutputFormat.setOutputPath(conf, outPath);
+    FileOutputFormat.setOutputPath(conf, outPath);
     conf.setNumMapTasks(100);
     //conf.setNumReduceTasks(1);
     conf.setMapperClass(BayesThetaNormalizerMapper.class);
@@ -91,7 +96,7 @@
     SequenceFileModelReader reader = new SequenceFileModelReader();
 
     Path Sigma_kFiles = new Path(output+"/trainer-weights/Sigma_k/*");
-    Map<String,Double> labelWeightSum = reader.readLabelSums(dfs, Sigma_kFiles, conf);
+    Map<String,Double> labelWeightSum = SequenceFileModelReader.readLabelSums(dfs, Sigma_kFiles, conf);
     DefaultStringifier<Map<String,Double>> mapStringifier =
         new DefaultStringifier<Map<String,Double>>(conf, GenericsUtil.getClass(labelWeightSum));
     String labelWeightSumString = mapStringifier.toString(labelWeightSum);
@@ -103,7 +108,7 @@
 
 
     Path sigma_kSigma_jFile = new Path(output+"/trainer-weights/Sigma_kSigma_j/*");
-    double sigma_jSigma_k = reader.readSigma_jSigma_k(dfs, sigma_kSigma_jFile, conf);
+    double sigma_jSigma_k = SequenceFileModelReader.readSigma_jSigma_k(dfs, sigma_kSigma_jFile, conf);
     DefaultStringifier<Double> stringifier = new DefaultStringifier<Double>(conf, Double.class);
     String sigma_jSigma_kString = stringifier.toString(sigma_jSigma_k);
 
@@ -113,7 +118,7 @@
     conf.set("cnaivebayes.sigma_jSigma_k", sigma_jSigma_kString);
 
     Path vocabCountFile = new Path(output+"/trainer-tfIdf/trainer-vocabCount/*");
-    double vocabCount = reader.readVocabCount(dfs, vocabCountFile, conf);
+    double vocabCount = SequenceFileModelReader.readVocabCount(dfs, vocabCountFile, conf);
     String vocabCountString = stringifier.toString(vocabCount);
 
     log.info("Vocabulary Count");

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerMapper.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerMapper.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerMapper.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerMapper.java Tue Dec 23 15:32:31 2008
@@ -51,6 +51,7 @@
    * @param reporter
    * @throws IOException
    */
+  @Override
   public void map(Text key, DoubleWritable value,
       OutputCollector<Text, DoubleWritable> output, Reporter reporter)
       throws IOException {
@@ -60,7 +61,7 @@
 
     String label = labelFeaturePair.split(",")[0];
     double weight = Math.log((value.get() + alpha_i) / (labelWeightSum.get(label) + vocabCount));
-    output.collect(new Text(("_" + label).trim()), new DoubleWritable(weight));
+    output.collect(new Text(('_' + label).trim()), new DoubleWritable(weight));
   }
 
   @Override

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerReducer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerReducer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerReducer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/BayesThetaNormalizerReducer.java Tue Dec 23 15:32:31 2008
@@ -34,6 +34,7 @@
 public class BayesThetaNormalizerReducer extends MapReduceBase implements
     Reducer<Text, DoubleWritable, Text, DoubleWritable> {
   
+  @Override
   public void reduce(Text key, Iterator<DoubleWritable> values,
       OutputCollector<Text, DoubleWritable> output, Reporter reporter)
       throws IOException {

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureDriver.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureDriver.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureDriver.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureDriver.java Tue Dec 23 15:32:31 2008
@@ -37,7 +37,10 @@
  */
 public class BayesFeatureDriver {
 
-  private static final Logger log = LoggerFactory.getLogger(BayesFeatureDriver.class);  
+  private static final Logger log = LoggerFactory.getLogger(BayesFeatureDriver.class);
+
+  private BayesFeatureDriver() {
+  }
 
   /**
    * Takes in two arguments:

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureMapper.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureMapper.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureMapper.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureMapper.java Tue Dec 23 15:32:31 2008
@@ -63,6 +63,7 @@
    * @param reporter Not used
    * @throws IOException
    */
+  @Override
   public void map(Text key, Text value,
       OutputCollector<Text, DoubleWritable> output, Reporter reporter)
       throws IOException {
@@ -106,7 +107,7 @@
     }
 
     // Output Document Frequency per Word per Class
-    String dflabel = "-" + label;
+    String dflabel = '-' + label;
     int dfKeyLen = dflabel.length();
     builder = new StringBuilder(dflabel);
     for (String token : wordList.keySet()) {
@@ -114,14 +115,14 @@
       builder.append(',').append(token);
       labelWord.set(builder.toString());
       output.collect(labelWord, one);
-      output.collect(new Text("," + token), one);
+      output.collect(new Text(',' + token), one);
       builder.setLength(dfKeyLen);// truncate back
 
     }
 
     // output that we have seen the label to calculate the Count of Document per
     // class
-    output.collect(new Text("_" + label), one);
+    output.collect(new Text('_' + label), one);
   }
 
   @Override

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureOutputFormat.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureOutputFormat.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureOutputFormat.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureOutputFormat.java Tue Dec 23 15:32:31 2008
@@ -32,33 +32,32 @@
 /**
  * This class extends the MultipleOutputFormat, allowing to write the output data to different output files in sequence file output format.
  */
-public class BayesFeatureOutputFormat extends MultipleOutputFormat<WritableComparable,Writable>{
+public class BayesFeatureOutputFormat extends MultipleOutputFormat<WritableComparable<?>,Writable>{
 
-  private SequenceFileOutputFormat<WritableComparable,Writable> theSequenceFileOutputFormat = null;
+  private SequenceFileOutputFormat<WritableComparable<?>,Writable> theSequenceFileOutputFormat = null;
 
   @Override
-  protected RecordWriter<WritableComparable, Writable> getBaseRecordWriter(
+  protected RecordWriter<WritableComparable<?>, Writable> getBaseRecordWriter(
       FileSystem fs, JobConf job, String name, Progressable arg3)
       throws IOException {
     if (theSequenceFileOutputFormat == null) {
-      theSequenceFileOutputFormat = new SequenceFileOutputFormat<WritableComparable,Writable>();
+      theSequenceFileOutputFormat = new SequenceFileOutputFormat<WritableComparable<?>,Writable>();
     }
     return theSequenceFileOutputFormat.getRecordWriter(fs, job, name, arg3);
   }
 
   @Override
-  protected String generateFileNameForKeyValue(WritableComparable k, Writable v,
-      String name) {
+  protected String generateFileNameForKeyValue(WritableComparable<?> k, Writable v, String name) {
     Text key = (Text) k;
-   
-    if(key.toString().startsWith("_"))
-      return "trainer-docCount/"+name;
-    else if(key.toString().startsWith("-"))
-      return "trainer-termDocCount/"+name;
-    else if(key.toString().startsWith(","))
-      return "trainer-featureCount/"+name;
-    else
-      return "trainer-wordFreq/"+name;
+    char firstChar = key.toString().charAt(0);
+    if (firstChar == '_') {
+      return "trainer-docCount/" + name;
+    } else if (firstChar == '-') {
+      return "trainer-termDocCount/" + name;
+    } else if (firstChar == ',') {
+      return "trainer-featureCount/" + name;
+    }
+    return "trainer-wordFreq/" + name;
   }
 
 }

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureReducer.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureReducer.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureReducer.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesFeatureReducer.java Tue Dec 23 15:32:31 2008
@@ -33,6 +33,7 @@
 public class BayesFeatureReducer extends MapReduceBase
     implements Reducer<Text, DoubleWritable, Text, DoubleWritable> {
 
+  @Override
   public void reduce(Text key,
                      Iterator<DoubleWritable> values,
                      OutputCollector<Text, DoubleWritable> output,

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfDriver.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfDriver.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfDriver.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfDriver.java Tue Dec 23 15:32:31 2008
@@ -25,7 +25,8 @@
 import org.apache.hadoop.mapred.JobClient;
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.SequenceFileInputFormat;
-import org.apache.hadoop.mapred.SequenceFileOutputFormat;
+import org.apache.hadoop.mapred.FileOutputFormat;
+import org.apache.hadoop.mapred.FileInputFormat;
 import org.apache.hadoop.util.GenericsUtil;
 import org.apache.mahout.classifier.bayes.io.SequenceFileModelReader;
 import org.slf4j.Logger;
@@ -41,6 +42,9 @@
 
   private static final Logger log = LoggerFactory.getLogger(BayesTfIdfDriver.class);
 
+  private BayesTfIdfDriver() {
+  }
+
   /**
    * Takes in two arguments:
    * <ol>
@@ -70,12 +74,12 @@
 
     conf.setOutputKeyClass(Text.class);
     conf.setOutputValueClass(DoubleWritable.class);
-    
-    SequenceFileInputFormat.addInputPath(conf, new Path(output + "/trainer-termDocCount"));
-    SequenceFileInputFormat.addInputPath(conf, new Path(output + "/trainer-wordFreq"));
-    SequenceFileInputFormat.addInputPath(conf, new Path(output + "/trainer-featureCount"));
+
+    FileInputFormat.addInputPath(conf, new Path(output + "/trainer-termDocCount"));
+    FileInputFormat.addInputPath(conf, new Path(output + "/trainer-wordFreq"));
+    FileInputFormat.addInputPath(conf, new Path(output + "/trainer-featureCount"));
     Path outPath = new Path(output + "/trainer-tfIdf");
-    SequenceFileOutputFormat.setOutputPath(conf, outPath);
+    FileOutputFormat.setOutputPath(conf, outPath);
     conf.setNumMapTasks(100);
     
     conf.setMapperClass(BayesTfIdfMapper.class);
@@ -95,7 +99,7 @@
 
     Path interimFile = new Path(output+"/trainer-docCount/part-*");
 
-    Map<String,Double> labelDocumentCounts= reader.readLabelDocumentCounts(dfs, interimFile, conf);
+    Map<String,Double> labelDocumentCounts = SequenceFileModelReader.readLabelDocumentCounts(dfs, interimFile, conf);
 
     DefaultStringifier<Map<String,Double>> mapStringifier =
         new DefaultStringifier<Map<String,Double>>(conf,GenericsUtil.getClass(labelDocumentCounts));

Modified: lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfMapper.java
URL: http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfMapper.java?rev=729175&r1=729174&r2=729175&view=diff
==============================================================================
--- lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfMapper.java (original)
+++ lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/common/BayesTfIdfMapper.java Tue Dec 23 15:32:31 2008
@@ -50,13 +50,15 @@
    * @param reporter
    * @throws IOException
    */
+  @Override
   public void map(Text key, DoubleWritable value,
       OutputCollector<Text, DoubleWritable> output, Reporter reporter)
       throws IOException {
  
     String labelFeaturePair = key.toString();
 
-    if (labelFeaturePair.startsWith("-")) { // if it is the termDocumentCount
+    char firstChar = labelFeaturePair.charAt(0);
+    if (firstChar == '-') { // if it is the termDocumentCount
       labelFeaturePair = labelFeaturePair.substring(1);
       String label = labelFeaturePair.split(",")[0];
       
@@ -69,7 +71,7 @@
       double logIdf = Math.log(labelDocumentCount / value.get());
       
       output.collect(new Text(labelFeaturePair), new DoubleWritable(logIdf));
-    } else if (labelFeaturePair.startsWith(",")) {
+    } else if (firstChar == ',') {
       output.collect(new Text("*vocabCount"), new DoubleWritable(1.0));
     } else {
       output.collect(key, value);