private Instance readInstanceSparse()

in samoa-instances/src/main/java/org/apache/samoa/instances/ArffLoader.java [235:295]


  private Instance readInstanceSparse() {
    //Return a Sparse Instance
    Instance instance = newSparseInstance(1.0); //, null); //(this.instanceInformation.numAttributes() + 1);
    //System.out.println(this.instanceInformation.numAttributes());
    int numAttribute;
    ArrayList<Double> attributeValues = new ArrayList<Double>();
    List<Integer> indexValues = new ArrayList<Integer>();
    try {
      //while (streamTokenizer.ttype != StreamTokenizer.TT_EOF) {
      streamTokenizer.nextToken(); // Remove the '{' char
      //For each line
      while (streamTokenizer.ttype != StreamTokenizer.TT_EOL
              && streamTokenizer.ttype != StreamTokenizer.TT_EOF) {
        while (streamTokenizer.ttype != '}') {
          //For each item
          //streamTokenizer.nextToken();
          //while (streamTokenizer.ttype != '}'){
          //System.out.println(streamTokenizer.nval +"-"+ streamTokenizer.sval);
          //numAttribute = (int) streamTokenizer.nval;
          if (streamTokenizer.ttype == StreamTokenizer.TT_NUMBER) {
            numAttribute = (int) streamTokenizer.nval;
          } else {
            numAttribute = Integer.parseInt(streamTokenizer.sval);
          }
          streamTokenizer.nextToken();

          if (streamTokenizer.ttype == StreamTokenizer.TT_NUMBER) {
            //System.out.print(streamTokenizer.nval + " ");
            this.setSparseValue(instance, indexValues, attributeValues, numAttribute, streamTokenizer.nval, true);
            //numAttribute++;

          } else if (streamTokenizer.sval != null && (streamTokenizer.ttype == StreamTokenizer.TT_WORD
                  || streamTokenizer.ttype == 34 || streamTokenizer.ttype == 39)) {
            //System.out.print(streamTokenizer.sval + "-");
            if (this.auxAttributes.get(numAttribute).isNumeric()) {
              this.setSparseValue(instance, indexValues, attributeValues, numAttribute, Double.valueOf(streamTokenizer.sval).doubleValue(), true);
            } else {
              this.setSparseValue(instance, indexValues, attributeValues, numAttribute, this.auxAttributes.get(numAttribute).indexOfValue(streamTokenizer.sval), false);
            }
          }
          streamTokenizer.nextToken();
        }
        streamTokenizer.nextToken(); //Remove the '}' char
      }
      streamTokenizer.nextToken();
      //System.out.println("EOL");
      //}

    } catch (IOException ex) {
      Logger.getLogger(ArffLoader.class.getName()).log(Level.SEVERE, null, ex);
    }
    int[] arrayIndexValues = new int[attributeValues.size()];
    double[] arrayAttributeValues = new double[attributeValues.size()];
    for (int i = 0; i < arrayIndexValues.length; i++) {
      arrayIndexValues[i] = indexValues.get(i).intValue();
      arrayAttributeValues[i] = attributeValues.get(i).doubleValue();
    }
    instance.addSparseValues(arrayIndexValues, arrayAttributeValues, this.instanceInformation.numAttributes());
    return instance;

  }