Package edu.wiki.concept

Source Code of edu.wiki.concept.TroveConceptVector$TroveConceptVectorIterator

package edu.wiki.concept;

import edu.wiki.api.concept.IConceptIterator;
import edu.wiki.api.concept.IConceptVector;
import edu.wiki.api.concept.IConceptVectorData;
import gnu.trove.TDoubleProcedure;
import gnu.trove.TIntDoubleHashMap;
import gnu.trove.TIntDoubleIterator;

import java.io.Serializable;

public class TroveConceptVector implements IConceptVector, Serializable {

  private static final long serialVersionUID = 5228670885044409972L;

  private TIntDoubleHashMap valueMap;
  private int size;
 
  public TroveConceptVector(int size ) {
    this.size = size;
    valueMap = new TIntDoubleHashMap(size);   
  }
 
  @Override
  public void add(int key, double d) {
    valueMap.put( key, valueMap.get( key ) + d );
  }

  @Override
  public void add( IConceptVector v ) {
    IConceptIterator it = v.iterator();
    while( it.next() ) {
      add( it.getId(), it.getValue() );
    }
  }

  @Override
  public int count() {
    return valueMap.size();
  }

  @Override
  public double get( int key ) {
    return valueMap.get( key );
  }

  @Override
  public IConceptVectorData getData() {
    return new TroveConceptVectorData();
  }

  @Override
  public IConceptIterator iterator() {
    return new TroveConceptVectorIterator();
  }

  @Override
  public IConceptIterator orderedIterator() {
    return new TroveConceptVectorOrderedIterator( valueMap );
  }

  @Override
  public void set( int key, double d ) {
    if( d != 0 ) {
      valueMap.put( key, d );
    }
    else {
      valueMap.remove( key );
    }
  }

  @Override
  public int size() {
    return size;
  }

  private class TroveConceptVectorData implements IConceptVectorData {
   
    public int getConceptCount() {
      return valueMap.size();
    }
   
    public double getNorm1() {
      NormProcedure n1 = new NormProcedure( 1 );
      valueMap.forEachValue( n1 );
      return n1.getNorm();
    }
   
    public double getNorm2() {
      NormProcedure n2 = new NormProcedure( 2 );
      valueMap.forEachValue( n2 );
      return n2.getNorm();
    }
   
    private class NormProcedure implements TDoubleProcedure {

      int p;
      double sum;
     
      private NormProcedure( int p ) {
        this.p = p;
        sum = 0;
      }
     
      @Override
      public boolean execute( double value ) {
        if( p == 1 ) {
          sum += value;
        }
        else {
          sum += Math.pow( value, p );
        }
        return true;
      }
     
      private double getNorm() {
        return Math.pow( sum, 1.0 / (double)p );
      }
    }
  }
 
  private class TroveConceptVectorIterator implements IConceptIterator {

    TIntDoubleIterator valueIt;
   
    private TroveConceptVectorIterator() {
      reset();
    }
   
    @Override
    public int getId() {
      return valueIt.key();
    }

    @Override
    public double getValue() {
      return valueIt.value();
    }

    @Override
    public boolean next() {
      if( valueIt.hasNext() ) {
        valueIt.advance();
        return true;
      }
      return false;
    }

    @Override
    public void reset() {
      valueIt = valueMap.iterator();
    }
   
  }
}
TOP

Related Classes of edu.wiki.concept.TroveConceptVector$TroveConceptVectorIterator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.