/**
   * Load configuration (only used by constructor)
   *
   * @param config
   */
  private void loadConfiguration(MeteorConfiguration config) {
    language = config.getLanguage();
    langID = config.getLangID();
    setNormalize(config.getNormalization());
    ArrayList<Double> parameters = config.getParameters();
    alpha = parameters.get(0);
    beta = parameters.get(1);
    gamma = parameters.get(2);
    delta = parameters.get(3);
    moduleWeights = config.getModuleWeights();
    aligner =
        new Aligner(
            language,
            config.getModules(),
            config.getModuleWeights(),
            config.getBeamSize(),
            config.getWordDirURL(),
            config.getSynDirURL(),
            config.getParaDirURL(),
            // Best alignments for evaluation
            Constants.PARTIAL_COMPARE_TOTAL);

    // Best weights for evaluation
    ArrayList<Integer> modules = config.getModules();
    ArrayList<Double> setWeights = new ArrayList<Double>();
    for (int module : modules) {
      if (module == Constants.MODULE_EXACT) setWeights.add(1.0);
      else if (module == Constants.MODULE_STEM) setWeights.add(0.5);
      else if (module == Constants.MODULE_SYNONYM) setWeights.add(0.5);
      else setWeights.add(0.5);
    }
    aligner.updateModuleWeights(setWeights);
    charBased = config.getCharBased();
  }
 /**
  * Get the Meteor sufficient statistics for a test / reference pair
  *
  * @param test
  * @param reference
  * @return
  */
 public MeteorStats getMeteorStats(String test, String reference) {
   // Normalize both
   if (normalize) {
     test = Normalizer.normalizeLine(test, langID, keepPunctuation);
     reference = Normalizer.normalizeLine(reference, langID, keepPunctuation);
   }
   // Lowercase both
   if (lowerCase) {
     test = test.toLowerCase();
     reference = reference.toLowerCase();
   }
   // Score
   Alignment alignment = aligner.align(test, reference);
   return getMeteorStats(alignment);
 }
 /**
  * Get the Meteor sufficient statistics for a test give a list of references
  *
  * @param test
  * @param references
  * @return
  */
 public MeteorStats getMeteorStats(String test, ArrayList<String> references) {
   // Normalize test
   if (normalize) test = Normalizer.normalizeLine(test, langID, keepPunctuation);
   if (lowerCase) test = test.toLowerCase();
   MeteorStats stats = new MeteorStats();
   stats.score = -1;
   // Score each reference
   for (String reference : references) {
     // Normalize reference
     if (normalize) reference = Normalizer.normalizeLine(reference, langID, keepPunctuation);
     if (lowerCase) reference = reference.toLowerCase();
     Alignment alignment = aligner.align(test, reference);
     MeteorStats curStats = getMeteorStats(alignment);
     if (curStats.score > stats.score) stats = curStats;
   }
   return stats;
 }
 /**
  * Get stats when test and reference are already tokenized and normalized (Make sure you know what
  * you're doing)
  *
  * @param test
  * @param reference
  * @return
  */
 public MeteorStats getMeteorStats(ArrayList<String> test, ArrayList<String> reference) {
   Alignment alignment = aligner.align(test, reference);
   return getMeteorStats(alignment);
 }
 /**
  * Update module weights without reloading resources. This is used for tuning and is likely not
  * needed for most applications
  *
  * @param moduleWeights
  */
 public void updateModuleWeights(ArrayList<Double> moduleWeights) {
   aligner.updateModuleWeights(moduleWeights);
 }