Package edu.illinois.lis.query

Source Code of edu.illinois.lis.query.GQueriesJsonImpl

package edu.illinois.lis.query;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;


import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

import edu.illinois.lis.document.FeatureVector;


/**
* reads and holds GQueries stored as a serialized JSON file on disk.
*
* @author Miles Efron
*
*/
public class GQueriesJsonImpl implements GQueries {
  private static final Logger LOG = Logger.getLogger(GQueriesJsonImpl.class);

  private static final JsonParser JSON_PARSER = new JsonParser();
  private List<GQuery> queryList;
  private Map<String,Integer> nameToIndex;

  public void read(String pathToQueries) {
    JsonObject obj = null;
    try {
      obj = (JsonObject) JSON_PARSER.parse(new BufferedReader(new FileReader(pathToQueries)));
    } catch (Exception e) {
      LOG.fatal("died reading queries from json file", e);
      System.exit(-1);
    }

   
    JsonArray queryObjectArray = obj.getAsJsonArray("queries");
    queryList = new ArrayList<GQuery>(queryObjectArray.size());
    nameToIndex = new HashMap<String,Integer>(queryList.size());
    Iterator<JsonElement> queryObjectIterator = queryObjectArray.iterator();
    int k=0;
    while(queryObjectIterator.hasNext()) {
      JsonObject queryObject = (JsonObject) queryObjectIterator.next();
      String title = queryObject.get("title").getAsString();
      String text  = queryObject.get("text").getAsString();
      double epoch = queryObject.get("epoch").getAsDouble();
      long querytweettime = queryObject.get("querytweettime").getAsLong();
      nameToIndex.put(title, k++);
      FeatureVector featureVector = new FeatureVector(null);
      JsonArray modelObjectArray = queryObject.getAsJsonArray("model");
      Iterator<JsonElement> featureIterator = modelObjectArray.iterator();
      while(featureIterator.hasNext()) {
        JsonObject featureObject = (JsonObject)featureIterator.next();
        double weight  = featureObject.get("weight").getAsDouble();
        String feature = featureObject.get("feature").getAsString();
        featureVector.addTerm(feature, weight);
      }
     
     
      GQuery gQuery = new GQuery();
      gQuery.setTitle(title);
      gQuery.setText(text);
      gQuery.setEpoch(epoch);
      gQuery.setQuerytweettime(querytweettime);
      gQuery.setFeatureVector(featureVector);
     
      queryList.add(gQuery);
     
   
  }

  public GQuery getIthQuery(int i) {
    if(queryList == null || i >= queryList.size()) {
      LOG.fatal("died trying to get query number " + i + "  when we have only " + queryList.size() + " queries.");
      System.exit(-1);   
    }
    return queryList.get(i);
  }
 
  public GQuery getNamedQuery(String queryName) {
    if(queryList == null || ! nameToIndex.containsKey(queryName)) {
      LOG.fatal("died trying to get query  " + queryName + ".");
      System.exit(-1);    }
    return queryList.get(nameToIndex.get(queryName));
  }
 

  public Iterator<GQuery> iterator() {
    return queryList.iterator();
  }

  public int numQueries() {
    return queryList.size();
  }
 
  @Override
  public String toString() {
    StringBuilder b = new StringBuilder();
   
    Iterator<GQuery> it = queryList.iterator();
    while(it.hasNext()) {
      b.append(it.next());
    }
   
    return b.toString();
  }

 

}
TOP

Related Classes of edu.illinois.lis.query.GQueriesJsonImpl

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.