Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package org.apache.mahout.math.random;
 
 
 import java.util.List;
Samples a "document" from an IndianBuffet process. See http://mlg.eng.cam.ac.uk/zoubin/talks/turin09.pdf for details
 
 public final class IndianBuffet<T> implements Sampler<List<T>> {
   private final List<Integercount = Lists.newArrayList();
   private int documents = 0;
   private final double alpha;
   private WordFunction<T> converter = null;
   private final Random gen;
 
   public IndianBuffet(double alphaWordFunction<T> converter) {
     this. = alpha;
     this. = converter;
      = RandomUtils.getRandom();
   }
 
   public static IndianBuffet<IntegercreateIntegerDocumentSampler(double alpha) {
     return new IndianBuffet<Integer>(alphanew IdentityConverter());
   }
 
   public static IndianBuffet<StringcreateTextDocumentSampler(double alpha) {
     return new IndianBuffet<String>(alphanew WordConverter());
   }
 
   @Override
   public List<T> sample() {
     List<T> r = Lists.newArrayList();
     if ( == 0) {
       double n = new PoissonSampler().sample();
       for (int i = 0; i < ni++) {
         r.add(.convert(i));
         .add(1);
       }
       ++;
     } else {
       ++;
       int i = 0;
       for (double cnt : ) {
         if (.nextDouble() < cnt / ) {
           r.add(.convert(i));
           .set(i.get(i) + 1);
         }
         i++;
       }
       int newItems = new PoissonSampler( / ).sample().intValue();
       for (int j = 0; j < newItemsj++) {
         r.add(.convert(i + j));
         .add(1);
       }
     }
     return r;
   }
 
   private interface WordFunction<T> {
     T convert(int i);
   }

  
Just converts to an integer.
 
   public static class IdentityConverter implements WordFunction<Integer> {
     @Override
     public Integer convert(int i) {
       return i;
     }
  }

  
Converts to a string.
  public static class StringConverter implements WordFunction<String> {
    @Override
    public String convert(int i) {
      return String.valueOf(i);
    }
  }

  
Converts to one of a list of common English words for reasonably small integers and converts to a token like w_92463 for big integers.
  public static final class WordConverter implements WordFunction<String> {
    private final Splitter onSpace = Splitter.on(.).omitEmptyStrings().trimResults();
    private final List<Stringwords;
    public WordConverter() {
      try {
         = Resources.readLines(Resources.getResource("words.txt"), .,
                                    new LineProcessor<List<String>>() {
            private final List<StringtheWords = Lists.newArrayList();
            @Override
            public boolean processLine(String line) {
              Iterables.addAll(.split(line));
              return true;
            }
            @Override
            public List<StringgetResult() {
              return ;
            }
          });
      } catch (IOException e) {
        throw new ImpossibleException(e);
      }
    }
    @Override
    public String convert(int i) {
      if (i < .size()) {
        return .get(i);
      } else {
        return "w_" + i;
      }
    }
  }
  public static class ImpossibleException extends RuntimeException {
    public ImpossibleException(Throwable e) {
      super(e);
    }
  }
New to GrepCode? Check out our FAQ X