You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@joshua.apache.org by le...@apache.org on 2016/05/16 06:26:46 UTC

[30/66] [partial] incubator-joshua git commit: JOSHUA-252 Make it possible to use Maven to build Joshua

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/tools/LabelPhrases.java
----------------------------------------------------------------------
diff --git a/src/joshua/tools/LabelPhrases.java b/src/joshua/tools/LabelPhrases.java
deleted file mode 100644
index 9733672..0000000
--- a/src/joshua/tools/LabelPhrases.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * 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 joshua.tools;
-
-import java.io.IOException;
-import java.util.logging.Logger;
-
-import joshua.corpus.Vocabulary;
-import joshua.corpus.syntax.ArraySyntaxTree;
-import joshua.util.io.LineReader;
-
-/**
- * Finds labeling for a set of phrases.
- * 
- * @author Juri Ganitkevitch
- */
-public class LabelPhrases {
-
-  /** Logger for this class. */
-  private static final Logger logger = Logger.getLogger(LabelPhrases.class.getName());
-
-  /**
-   * Main method.
-   * 
-   * @param args names of the two grammars to be compared
-   * @throws IOException
-   * @throws NumberFormatException
-   */
-  public static void main(String[] args) throws NumberFormatException, IOException {
-
-    if (args.length < 1 || args[0].equals("-h")) {
-      System.err.println("Usage: " + LabelPhrases.class.toString());
-      System.err.println("    -p phrase_file     phrase-sentence file to process");
-      System.err.println();
-      System.exit(-1);
-    }
-
-    String phrase_file_name = null;
-
-    for (int i = 0; i < args.length; i++) {
-      if ("-p".equals(args[i])) phrase_file_name = args[++i];
-    }
-    if (phrase_file_name == null) {
-      logger.severe("a phrase file is required for operation");
-      System.exit(-1);
-    }
-
-    LineReader phrase_reader = new LineReader(phrase_file_name);
-
-    while (phrase_reader.ready()) {
-      String line = phrase_reader.readLine();
-
-      String[] fields = line.split("\\t");
-      if (fields.length != 3 || fields[2].equals("()")) {
-        System.err.println("[FAIL] Empty parse in line:\t" + line);
-        continue;
-      }
-
-      String[] phrase_strings = fields[0].split("\\s");
-      int[] phrase_ids = new int[phrase_strings.length];
-      for (int i = 0; i < phrase_strings.length; i++)
-        phrase_ids[i] = Vocabulary.id(phrase_strings[i]);
-
-      ArraySyntaxTree syntax = new ArraySyntaxTree(fields[2]);
-      int[] sentence_ids = syntax.getTerminals();
-
-      int match_start = -1;
-      int match_end = -1;
-      for (int i = 0; i < sentence_ids.length; i++) {
-        if (phrase_ids[0] == sentence_ids[i]) {
-          match_start = i;
-          int j = 0;
-          while (j < phrase_ids.length && phrase_ids[j] == sentence_ids[i + j]) {
-            j++;
-          }
-          if (j == phrase_ids.length) {
-            match_end = i + j;
-            break;
-          }
-        }
-      }
-
-      int label = syntax.getOneConstituent(match_start, match_end);
-      if (label == 0) label = syntax.getOneSingleConcatenation(match_start, match_end);
-      if (label == 0) label = syntax.getOneRightSideCCG(match_start, match_end);
-      if (label == 0) label = syntax.getOneLeftSideCCG(match_start, match_end);
-      if (label == 0) label = syntax.getOneDoubleConcatenation(match_start, match_end);
-      if (label == 0) {
-        System.err.println("[FAIL] No label found in line:\t" + line);
-        continue;
-      }
-
-      System.out.println(Vocabulary.word(label) + "\t" + line);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/tools/TestSetFilter.java
----------------------------------------------------------------------
diff --git a/src/joshua/tools/TestSetFilter.java b/src/joshua/tools/TestSetFilter.java
deleted file mode 100644
index 06cea5f..0000000
--- a/src/joshua/tools/TestSetFilter.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * 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 joshua.tools;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-import joshua.util.io.LineReader;
-
-public class TestSetFilter {
-  private Filter filter = null;
-
-  // for caching of accepted rules
-  private String lastSourceSide;
-  private boolean acceptedLastSourceSide;
-
-  public int cached = 0;
-  public int RULE_LENGTH = 12;
-  public boolean verbose = false;
-  public boolean parallel = false;
-
-  private static final String DELIMITER = "|||";
-  private static final String DELIMITER_REGEX = " \\|\\|\\| ";
-  public static final String DELIM = String.format(" %s ", DELIMITER);
-  public static final Pattern P_DELIM = Pattern.compile(DELIMITER_REGEX);
-  private final String NT_REGEX = "\\[[^\\]]+?\\]";
-
-  public TestSetFilter() {
-    acceptedLastSourceSide = false;
-    lastSourceSide = null;
-  }
-  
-  public String getFilterName() {
-    if (filter != null)
-      if (filter instanceof FastFilter)
-        return "fast";
-      else if (filter instanceof LooseFilter)
-        return "loose";
-      else
-        return "exact";
-    return "null";
-  }
-
-  public void setVerbose(boolean value) {
-    verbose = value;
-  }
-
-  public void setParallel(boolean value) {
-    parallel = value;
-  }
-
-  public void setFilter(String type) {
-    if (type.equals("fast"))
-      filter = new FastFilter();
-    else if (type.equals("exact"))
-      filter = new ExactFilter();
-    else if (type.equals("loose"))
-      filter = new LooseFilter();
-    else
-      throw new RuntimeException(String.format("Invalid filter type '%s'", type));
-  }
-
-  public void setRuleLength(int value) {
-    RULE_LENGTH = value;
-  }
-
-  private void loadTestSentences(String filename) throws IOException {
-    int count = 0;
-
-    try {
-      for (String line: new LineReader(filename)) {
-        filter.addSentence(line);
-        count++;
-      }
-    } catch (FileNotFoundException e) {
-      System.err.printf("Could not open %s\n", e.getMessage());
-    }
-
-    if (verbose)
-      System.err.println(String.format("Added %d sentences.\n", count));
-  }
-
-  /**
-   * Top-level filter, responsible for calling the fast or exact version. Takes the source side 
-   * of a rule and determines whether there is any sentence in the test set that can match it.
-   */
-  public boolean inTestSet(String sourceSide) {
-    if (!sourceSide.equals(lastSourceSide)) {
-      lastSourceSide = sourceSide;
-      acceptedLastSourceSide = filter.permits(sourceSide);
-    } else {
-      cached++;
-    }
-
-    return acceptedLastSourceSide;
-  }
-    
-  /**
-   * Determines whether a rule is an abstract rule. An abstract rule is one that has no terminals on
-   * its source side.
-   * 
-   * If the rule is abstract, the rule's arity is returned. Otherwise, 0 is returned.
-   */
-  private boolean isAbstract(String source) {
-    int nonterminalCount = 0;
-    for (String t : source.split("\\s+")) {
-      if (!t.matches(NT_REGEX))
-        return false;
-      nonterminalCount++;
-    }
-    return nonterminalCount != 0;
-  }
-
-  private interface Filter {
-    /* Tell the filter about a sentence in the test set being filtered to */
-    public void addSentence(String sentence);
-    
-    /* Returns true if the filter permits the specified source side */
-    public boolean permits(String sourceSide);
-  }
-
-  private class FastFilter implements Filter {
-    private Set<String> ngrams = null;
-
-    public FastFilter() {
-      ngrams = new HashSet<String>();
-    }
-    
-    @Override
-    public boolean permits(String source) {
-      for (String chunk : source.split(NT_REGEX)) {
-        chunk = chunk.trim();
-        /* Important: you need to make sure the string isn't empty. */
-        if (!chunk.equals("") && !ngrams.contains(chunk))
-          return false;
-      }
-      return true;
-    }
-
-    @Override
-    public void addSentence(String sentence) {
-      String[] tokens = sentence.trim().split("\\s+");
-      int maxOrder = RULE_LENGTH < tokens.length ? RULE_LENGTH : tokens.length;
-      for (int order = 1; order <= maxOrder; order++) {
-        for (int start = 0; start < tokens.length - order + 1; start++)
-          ngrams.add(createNGram(tokens, start, order));
-      }
-    }
-
-    private String createNGram(String[] tokens, int start, int order) {
-      if (order < 1 || start + order > tokens.length) {
-        return "";
-      }
-      String result = tokens[start];
-      for (int i = 1; i < order; i++)
-        result += " " + tokens[start + i];
-      return result;
-    }
-  }
-
-  private class LooseFilter implements Filter {
-    List<String> testSentences = null;
-
-    public LooseFilter() {
-      testSentences = new ArrayList<String>();
-    }
-    
-    @Override
-    public void addSentence(String source) {
-      testSentences.add(source);
-    }
-
-    @Override
-    public boolean permits(String source) {
-      Pattern pattern = getPattern(source);
-      for (String testSentence : testSentences) {
-        if (pattern.matcher(testSentence).find()) {
-          return true;
-        }
-      }
-      return isAbstract(source);
-    }
-
-    protected Pattern getPattern(String source) {
-      String pattern = source;
-      pattern = pattern.replaceAll(String.format("\\s*%s\\s*", NT_REGEX), ".+");
-      pattern = pattern.replaceAll("\\s+", ".*");
-//      System.err.println(String.format("PATTERN(%s) = %s", source, pattern));
-      return Pattern.compile(pattern);
-    }
-  }
-
-  /**
-   * This class is the same as LooseFilter except with a tighter regex for matching rules.
-   */
-  private class ExactFilter implements Filter {
-    private FastFilter fastFilter = null;
-    private Map<String, Set<Integer>> sentencesByWord;
-    List<String> testSentences = null;
-    
-    public ExactFilter() {
-      fastFilter = new FastFilter();
-      sentencesByWord = new HashMap<String, Set<Integer>>();
-      testSentences = new ArrayList<String>();
-    }
-    
-    @Override
-    public void addSentence(String source) {
-      fastFilter.addSentence(source);
-      addSentenceToWordHash(source, testSentences.size());
-      testSentences.add(source);
-    }
-
-    /**
-     * Always permit abstract rules. Otherwise, query the fast filter, and if that passes, apply
-     * 
-     */
-    @Override
-    public boolean permits(String sourceSide) {
-      if (isAbstract(sourceSide))
-        return true;
-      
-      if (fastFilter.permits(sourceSide)) {
-        Pattern pattern = getPattern(sourceSide);
-        for (int i : getSentencesForRule(sourceSide)) {
-          if (pattern.matcher(testSentences.get(i)).find()) {
-            return true;
-          }
-        }
-      } 
-      return false;
-    }
-    
-    protected Pattern getPattern(String source) {
-      String pattern = Pattern.quote(source);
-      pattern = pattern.replaceAll(NT_REGEX, "\\\\E.+\\\\Q");
-      pattern = pattern.replaceAll("\\\\Q\\\\E", "");
-      pattern = "(?:^|\\s)" + pattern + "(?:$|\\s)";
-      return Pattern.compile(pattern);
-    }
-  
-    /*
-     * Map words to all the sentences they appear in.
-     */
-    private void addSentenceToWordHash(String sentence, int index) {
-      String[] tokens = sentence.split("\\s+");
-      for (String t : tokens) {
-        if (! sentencesByWord.containsKey(t))
-          sentencesByWord.put(t, new HashSet<Integer>());
-        sentencesByWord.get(t).add(index);
-      }
-    }
-    
-    private Set<Integer> getSentencesForRule(String source) {
-      Set<Integer> sentences = null;
-      for (String token : source.split("\\s+")) {
-        if (!token.matches(NT_REGEX)) {
-          if (sentencesByWord.containsKey(token)) {
-            if (sentences == null)
-              sentences = new HashSet<Integer>(sentencesByWord.get(token));
-            else
-              sentences.retainAll(sentencesByWord.get(token));
-          }
-        }
-      }
-      
-      return sentences;
-    }
-  }
-
-  public static void main(String[] argv) throws IOException {
-    // do some setup
-    if (argv.length < 1) {
-      System.err.println("usage: TestSetFilter [-v|-p|-f|-e|-l|-n N|-g grammar] test_set1 [test_set2 ...]");
-      System.err.println("    -g    grammar file (can also be on STDIN)");
-      System.err.println("    -v    verbose output");
-      System.err.println("    -p    parallel compatibility");
-      System.err.println("    -f    fast mode (default)");
-      System.err.println("    -e    exact mode (slower)");
-      System.err.println("    -l    loose mode");
-      System.err.println("    -n    max n-gram to compare to (default 12)");
-      return;
-    }
-    
-    String grammarFile = null;
-
-    TestSetFilter filter = new TestSetFilter();
-
-    for (int i = 0; i < argv.length; i++) {
-      if (argv[i].equals("-v")) {
-        filter.setVerbose(true);
-        continue;
-      } else if (argv[i].equals("-p")) {
-        filter.setParallel(true);
-        continue;
-      } else if (argv[i].equals("-g")) {
-        grammarFile = argv[++i];
-        continue;
-      } else if (argv[i].equals("-f")) {
-        filter.setFilter("fast");
-        continue;
-      } else if (argv[i].equals("-e")) {
-        filter.setFilter("exact");
-        continue;
-      } else if (argv[i].equals("-l")) {
-        filter.setFilter("loose");
-        continue;
-      } else if (argv[i].equals("-n")) {
-        filter.setRuleLength(Integer.parseInt(argv[i + 1]));
-        i++;
-        continue;
-      }
-
-      filter.loadTestSentences(argv[i]);
-    }
-
-    int rulesIn = 0;
-    int rulesOut = 0;
-    if (filter.verbose) {
-      System.err.println(String.format("Filtering rules with the %s filter...", filter.getFilterName()));
-//      System.err.println("Using at max " + filter.RULE_LENGTH + " n-grams...");
-    }
-    LineReader reader = (grammarFile != null) 
-        ? new LineReader(grammarFile, filter.verbose)
-        : new LineReader(System.in); 
-    for (String rule: reader) {
-      rulesIn++;
-
-      String[] parts = P_DELIM.split(rule);
-      if (parts.length >= 4) {
-        // the source is the second field for thrax grammars, first field for phrasal ones 
-        String source = rule.startsWith("[") ? parts[1].trim() : parts[0].trim();
-        if (filter.inTestSet(source)) {
-          System.out.println(rule);
-          if (filter.parallel)
-            System.out.flush();
-          rulesOut++;
-        } else if (filter.parallel) {
-          System.out.println("");
-          System.out.flush();
-        }
-      }
-    }
-    if (filter.verbose) {
-      System.err.println("[INFO] Total rules read: " + rulesIn);
-      System.err.println("[INFO] Rules kept: " + rulesOut);
-      System.err.println("[INFO] Rules dropped: " + (rulesIn - rulesOut));
-      System.err.println("[INFO] cached queries: " + filter.cached);
-    }
-
-    return;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/Orientation.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/Orientation.java b/src/joshua/ui/Orientation.java
deleted file mode 100644
index ec7b523..0000000
--- a/src/joshua/ui/Orientation.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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 joshua.ui;
-
-public enum Orientation {
-  HORIZONTAL, VERTICAL
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/StartupWindow.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/StartupWindow.java b/src/joshua/ui/StartupWindow.java
deleted file mode 100644
index 6fc37a2..0000000
--- a/src/joshua/ui/StartupWindow.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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 joshua.ui;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.GraphicsEnvironment;
-import java.awt.Image;
-import java.awt.Point;
-
-import javax.swing.BorderFactory;
-import javax.swing.ImageIcon;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JWindow;
-
-/**
- * Startup window for Joshua programs.
- * 
- * @author Lane Schwartz
- * @author Aaron Phillips
- */
-public class StartupWindow extends JWindow {
-
-  /** Serialization identifier. */
-  private static final long serialVersionUID = 1L;
-
-  /**
-   * Constructs a splash screen.
-   * 
-   * @param title Title to be displayed
-   */
-  public StartupWindow(String title) {
-    this(title, "Joshua Developers", "2010", Color.BLACK, 5);
-  }
-
-  public StartupWindow(String title, String author, String year, Image image, Color borderColor,
-      int borderWidth) {
-    JPanel content = (JPanel) getContentPane();
-    content.setBackground(Color.WHITE);
-
-    int width = 250;
-    int height = 100;
-
-    Point center = GraphicsEnvironment.getLocalGraphicsEnvironment().getCenterPoint();
-    setBounds(center.x - width / 2, center.y - height / 2, width, height);
-
-    JLabel titleLabel = new JLabel(title, JLabel.CENTER);
-    titleLabel.setFont(new Font("Sans-Serif", Font.BOLD, 24));
-    content.add(titleLabel, BorderLayout.NORTH);
-
-    JLabel copyright = new JLabel("\u24D2 " + year + " - " + author, JLabel.CENTER);
-    copyright.setFont(new Font("Sans-Serif", Font.PLAIN, 8));
-    content.add(copyright, BorderLayout.SOUTH);
-
-    if (image != null) {
-      content.add(new JLabel(new ImageIcon(image)));
-    }
-
-    content.setBorder(BorderFactory.createLineBorder(borderColor, borderWidth));
-
-    // Display it
-    setVisible(true);
-  }
-
-  public StartupWindow(String title, String author, String year, Color borderColor, int borderWidth) {
-    this(title, author, year, null, borderColor, borderWidth);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/package.html
----------------------------------------------------------------------
diff --git a/src/joshua/ui/package.html b/src/joshua/ui/package.html
deleted file mode 100644
index 2dcc44e..0000000
--- a/src/joshua/ui/package.html
+++ /dev/null
@@ -1,25 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
-<html>
-<head></head>
-<body bgcolor="white">
-
-<!--
-##### THIS IS THE TEMPLATE FOR THE PACKAGE DOC COMMENTS. #####
-##### TYPE YOUR PACKAGE COMMENTS HERE.  BEGIN WITH A     #####
-##### ONE-SENTENCE SUMMARY STARTING WITH A VERB LIKE:    #####
--->
-
-Provides classes for visualizing parts of the translation process.
-
-<!--
-<h2>Related Documentation</h2>
-
-<ul>
-  <li>Much of the code in this package is based on .....
-</ul>
--->
-
-<!-- Put @see and @since tags down here. -->
-
-</body>
-</html>

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/DerivationTree.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/DerivationTree.java b/src/joshua/ui/tree_visualizer/DerivationTree.java
deleted file mode 100644
index 86b9618..0000000
--- a/src/joshua/ui/tree_visualizer/DerivationTree.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Collections;
-
-import joshua.ui.tree_visualizer.tree.Tree;
-
-import edu.uci.ics.jung.graph.DirectedOrderedSparseMultigraph;
-import edu.uci.ics.jung.graph.util.EdgeType;
-import edu.uci.ics.jung.graph.util.Pair;
-
-public class DerivationTree extends DirectedOrderedSparseMultigraph<Node, DerivationTreeEdge> {
-  /**
-   * Eclipse thinks this is necessary.
-   */
-  private static final long serialVersionUID = 2914449263979566324L;
-
-  public final Node root;
-  public final Node sourceRoot;
-
-  public DerivationTree(Tree t, String source) {
-    final Tree.Node treeRoot = t.root();
-    final String rootLabel = treeRoot.label();
-    root = new Node(rootLabel, false);
-    sourceRoot = new Node(rootLabel, true);
-    addVertex(root);
-    addVertex(sourceRoot);
-    addSubtreeRootedAt(root, treeRoot);
-    final String[] sourceWords = source.split("\\s+");
-    addSourceSubtreeRootedAt(sourceRoot, treeRoot, 0, sourceWords.length, sourceWords);
-  }
-
-  private void addSubtreeRootedAt(Node n, Tree.Node tn) {
-    for (Tree.Node child : tn.children()) {
-      Node childNode = new Node(child.label(), false);
-      addVertex(childNode);
-      addEdge(new DerivationTreeEdge(false), new Pair<Node>(n, childNode), EdgeType.DIRECTED);
-      addSubtreeRootedAt(childNode, child);
-    }
-  }
-
-  private void addSourceSubtreeRootedAt(Node n, Tree.Node tn, int firstIndex, int lastIndex,
-      String[] sourceWords) {
-    int nextUncoveredIndex = firstIndex;
-    Tree.NodeSourceStartComparator cmp = new Tree.NodeSourceStartComparator();
-    List<Tree.Node> children = tn.children();
-    Collections.sort(children, cmp);
-    for (Tree.Node child : children) {
-      if (child.isLeaf()) {
-        continue;
-      }
-      int sourceStartIndex = child.sourceStartIndex();
-      int sourceEndIndex = child.sourceEndIndex();
-      if (sourceStartIndex > nextUncoveredIndex) {
-        insertSourceLeaf(n, sourceWords, nextUncoveredIndex, sourceStartIndex);
-      }
-      Node childNode = new Node(child.label(), true);
-      addEdge(new DerivationTreeEdge(true), new Pair<Node>(n, childNode), EdgeType.DIRECTED);
-      nextUncoveredIndex = sourceEndIndex;
-      addSourceSubtreeRootedAt(childNode, child, sourceStartIndex, sourceEndIndex, sourceWords);
-    }
-    if (nextUncoveredIndex < lastIndex) {
-      insertSourceLeaf(n, sourceWords, nextUncoveredIndex, lastIndex);
-    }
-  }
-
-  private void insertSourceLeaf(Node n, String[] words, int start, int end) {
-    final String[] leafWords = Arrays.copyOfRange(words, start, end);
-    String label = leafWords[0];
-    for (int i = 1; i < leafWords.length; i++) {
-      label += " " + leafWords[i];
-    }
-    Node childNode = new Node(label, true);
-    addEdge(new DerivationTreeEdge(true), new Pair<Node>(n, childNode), EdgeType.DIRECTED);
-  }
-
-  public void setSubtreeHighlight(Node n, boolean b) {
-    n.isHighlighted = b;
-    for (Node s : getSuccessors(n)) {
-      setSubtreeHighlight(s, b);
-    }
-    return;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/DerivationTreeEdge.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/DerivationTreeEdge.java b/src/joshua/ui/tree_visualizer/DerivationTreeEdge.java
deleted file mode 100644
index b457f95..0000000
--- a/src/joshua/ui/tree_visualizer/DerivationTreeEdge.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer;
-
-public class DerivationTreeEdge {
-  public final boolean pointsToSource;
-
-  public DerivationTreeEdge(boolean pts) {
-    pointsToSource = pts;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/DerivationTreeTransformer.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/DerivationTreeTransformer.java b/src/joshua/ui/tree_visualizer/DerivationTreeTransformer.java
deleted file mode 100644
index 9bdeefe..0000000
--- a/src/joshua/ui/tree_visualizer/DerivationTreeTransformer.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer;
-
-import java.awt.Dimension;
-import java.awt.geom.Point2D;
-
-import org.apache.commons.collections15.Transformer;
-
-import edu.uci.ics.jung.algorithms.layout.TreeLayout;
-import edu.uci.ics.jung.graph.DelegateForest;
-
-public class DerivationTreeTransformer implements Transformer<Node, Point2D> {
-  private TreeLayout<Node, DerivationTreeEdge> treeLayout;
-  private DerivationTree graph;
-  private Node root;
-  private Node sourceRoot;
-
-  private boolean isAnchored;
-  private Point2D anchorPoint;
-
-  private double Y_DIST;
-  private double X_DIST;
-
-
-  public DerivationTreeTransformer(DerivationTree t, Dimension d, boolean isAnchored) {
-    this.isAnchored = isAnchored;
-    anchorPoint = new Point2D.Double(0, 0);
-    graph = t;
-    DelegateForest<Node, DerivationTreeEdge> del = new DelegateForest<Node, DerivationTreeEdge>(t);
-    del.setRoot(t.root);
-    del.setRoot(t.sourceRoot);
-    root = t.root;
-    sourceRoot = t.sourceRoot;
-    Y_DIST = d.getHeight() / (2 * (1 + distanceToLeaf(root)));
-    int leafCount = 0;
-    for (Node n : t.getVertices()) {
-      if (t.outDegree(n) == 0) leafCount++;
-    }
-    X_DIST = d.getWidth() / leafCount;
-
-    treeLayout = new TreeLayout<Node, DerivationTreeEdge>(del, (int) Math.round(X_DIST));
-  }
-
-  public Point2D transform(Node n) {
-    double x, y;
-    Point2D t = treeLayout.transform(n);
-    if (n.isSource) {
-      x =
-          /* treeLayout.transform(root).getX() + */(t.getX()
-              - treeLayout.transform(sourceRoot).getX() + treeLayout.transform(root).getX());
-      y = Y_DIST * (distanceToLeaf(n) + 1);
-    } else {
-      x = t.getX();
-      y = Y_DIST * (-1) * distanceToLeaf(n);
-    }
-    if (isAnchored) {
-      x += anchorPoint.getX();
-      y += anchorPoint.getY();
-    }
-    return new Point2D.Double(x, y + Y_DIST * (1 + distanceToLeaf(root)));
-  }
-
-  private int distanceToLeaf(Node n) {
-    if (graph.getSuccessors(n).isEmpty()) return 0;
-    int result = 0;
-    for (Object x : graph.getSuccessors(n)) {
-      int tmp = distanceToLeaf((Node) x);
-      if (tmp > result) result = tmp;
-    }
-    return 1 + result;
-  }
-
-  public Dimension getSize() {
-    int height = (int) Math.round(2 * Y_DIST * (1 + distanceToLeaf(root)));
-    int width = (int) Math.round(2 * treeLayout.transform(root).getX());
-    Dimension ret = new Dimension(width, height);
-    return ret;
-  }
-
-  public Point2D getAnchorPosition(DerivationViewer.AnchorType type) {
-    switch (type) {
-      case ANCHOR_ROOT:
-        return transform(root);
-      case ANCHOR_LEFTMOST_LEAF:
-        Node n = root;
-        while (graph.getSuccessorCount(n) != 0)
-          n = (Node) graph.getSuccessors(n).toArray()[0];
-        return transform(n);
-      default:
-        return new Point2D.Double(0, 0);
-    }
-  }
-
-  public void setAnchorPoint(DerivationViewer.AnchorType type, Point2D viewerAnchor) {
-    Point2D oldAnchor = getAnchorPosition(type);
-    double x = viewerAnchor.getX() - oldAnchor.getX();
-    double y = viewerAnchor.getY() - oldAnchor.getY();
-    anchorPoint = new Point2D.Double(x, y);
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/DerivationViewer.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/DerivationViewer.java b/src/joshua/ui/tree_visualizer/DerivationViewer.java
deleted file mode 100644
index cc8a701..0000000
--- a/src/joshua/ui/tree_visualizer/DerivationViewer.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Dimension;
-import java.awt.Paint;
-import java.awt.Shape;
-import java.awt.Stroke;
-import java.awt.geom.Point2D;
-import java.awt.geom.Rectangle2D;
-
-import javax.swing.JLabel;
-
-import org.apache.commons.collections15.Transformer;
-
-import edu.uci.ics.jung.algorithms.layout.CircleLayout;
-import edu.uci.ics.jung.algorithms.layout.StaticLayout;
-import edu.uci.ics.jung.visualization.VisualizationViewer;
-import edu.uci.ics.jung.visualization.control.DefaultModalGraphMouse;
-import edu.uci.ics.jung.visualization.control.LayoutScalingControl;
-import edu.uci.ics.jung.visualization.control.ModalGraphMouse;
-import edu.uci.ics.jung.visualization.decorators.ToStringLabeller;
-import edu.uci.ics.jung.visualization.renderers.Renderer.VertexLabel.Position;
-
-@SuppressWarnings("serial")
-public class DerivationViewer extends VisualizationViewer<Node, DerivationTreeEdge> {
-  public static final int DEFAULT_HEIGHT = 500;
-  public static final int DEFAULT_WIDTH = 500;
-  public static final Color SRC = Color.WHITE;
-  private Color TGT;
-
-  public static final Color HIGHLIGHT = Color.pink;
-
-  public static enum AnchorType {
-    ANCHOR_ROOT, ANCHOR_LEFTMOST_LEAF
-  };
-
-  private AnchorType anchorStyle;
-  private Point2D anchorPoint;
-
-  public DerivationViewer(DerivationTree g, Dimension d, Color targetColor, AnchorType anchor) {
-    super(new CircleLayout<Node, DerivationTreeEdge>(g));
-    anchorStyle = anchor;
-    DerivationTreeTransformer dtt = new DerivationTreeTransformer(g, d, false);
-    StaticLayout<Node, DerivationTreeEdge> derivationLayout =
-        new StaticLayout<Node, DerivationTreeEdge>(g, dtt);
-    // derivationLayout.setSize(dtt.getSize());
-    setGraphLayout(derivationLayout);
-    scaleToLayout(new LayoutScalingControl());
-    // g.addCorrespondences();
-    setPreferredSize(new Dimension(DEFAULT_HEIGHT, DEFAULT_WIDTH));
-    getRenderContext().setVertexLabelTransformer(new ToStringLabeller<Node>());
-
-    DefaultModalGraphMouse<Node, DerivationTreeEdge> graphMouse =
-        new DefaultModalGraphMouse<Node, DerivationTreeEdge>();
-    graphMouse.setMode(ModalGraphMouse.Mode.TRANSFORMING);
-    setGraphMouse(graphMouse);
-    addKeyListener(graphMouse.getModeKeyListener());
-    // this.setPickedVertexState(new DerivationTreePickedState(g));
-
-    getRenderContext().setVertexFillPaintTransformer(vp);
-    getRenderContext().setEdgeStrokeTransformer(es);
-    getRenderContext().setVertexShapeTransformer(ns);
-    getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);
-
-    TGT = targetColor;
-    anchorPoint = dtt.getAnchorPosition(anchorStyle);
-  }
-
-  public void setGraph(DerivationTree tree) {
-    DerivationTreeTransformer dtt = new DerivationTreeTransformer(tree, getSize(), true);
-    dtt.setAnchorPoint(anchorStyle, anchorPoint);
-    setGraphLayout(new StaticLayout<Node, DerivationTreeEdge>(tree, dtt));
-  }
-
-  private Transformer<Node, Paint> vp = new Transformer<Node, Paint>() {
-    public Paint transform(Node n) {
-      if (n.isHighlighted) return HIGHLIGHT;
-      if (n.isSource)
-        return SRC;
-      else
-        return TGT;
-    }
-  };
-
-  private static Transformer<DerivationTreeEdge, Stroke> es =
-      new Transformer<DerivationTreeEdge, Stroke>() {
-        public Stroke transform(DerivationTreeEdge e) {
-          if (e.pointsToSource) {
-            return new BasicStroke(1.0f,
-								                   BasicStroke.CAP_BUTT,
-																	 BasicStroke.JOIN_MITER,
-																	 10.0f,
-																	 new float[] {10.0f},
-																	 0.0f);
-					} else {
-            return new BasicStroke(1.0f);
-					}
-        }
-      };
-
-  private static Transformer<Node, Shape> ns = new Transformer<Node, Shape>() {
-    public Shape transform(Node n) {
-      JLabel x = new JLabel();
-      double len = x.getFontMetrics(x.getFont()).stringWidth(n.toString());
-      double margin = 5.0;
-      return new Rectangle2D.Double((len + margin) / (-2), 0, len + 2 * margin, 20);
-    }
-  };
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/DerivationViewerApplet.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/DerivationViewerApplet.java b/src/joshua/ui/tree_visualizer/DerivationViewerApplet.java
deleted file mode 100644
index 7904e8e..0000000
--- a/src/joshua/ui/tree_visualizer/DerivationViewerApplet.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer;
-
-import java.awt.Color;
-
-import javax.swing.JApplet;
-
-import joshua.ui.tree_visualizer.tree.Tree;
-
-/**
- * An applet for viewing DerivationTrees. It consists of a DerivationViewer inside of the applet's
- * Panel.
- * 
- * @author Jonathan Weese
- * 
- */
-@SuppressWarnings("serial")
-public class DerivationViewerApplet extends JApplet {
-  /**
-   * Initializes the applet by getting the source sentence and the tree representation from the
-   * applet tag in a web page.
-   */
-  public void init() {
-    String source = getParameter("sourceSentence");
-    String derivation = getParameter("derivationTree");
-		Tree tree = new Tree(derivation);
-
-    add(new DerivationViewer(new DerivationTree(tree, source),
-					                   getSize(),
-														 Color.red,
-														 DerivationViewer.AnchorType.ANCHOR_ROOT));
-    return;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/Node.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/Node.java b/src/joshua/ui/tree_visualizer/Node.java
deleted file mode 100644
index 846fc71..0000000
--- a/src/joshua/ui/tree_visualizer/Node.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer;
-
-/**
- * A representation of a node in a derivation tree. The derivation tree class itself is
- * parameterized in terms of this class and the <code>DerivationEdge</code> class. A
- * <code>Node</code> may represent either a non-terminal symbol or one or more terminal symbols of
- * the derivation.
- */
-public class Node {
-  /**
-   * The label to be shown on the node. If the node is a non-terminal symbol, it is the name of the
-   * symbol. Otherwise, it is terminal symbols joined with spaces.
-   */
-  public final String label;
-
-  /**
-   * Indicates whether this node is part of the source-side of target- side derivation tree.
-   */
-  public final boolean isSource;
-
-  /**
-   * A boolean to let the renderer know whether this vertex is highlighted.
-   */
-  public boolean isHighlighted = false;
-
-  /**
-   * Constructor used for root nodes or nodes whose parent is not given.
-   * 
-   * @param label a <code>String</code> that represents the symbols at this node
-   * @param isSource a boolean saying whether this is a source-side node
-   */
-  public Node(String label, boolean isSource) {
-    this.label = label;
-    this.isSource = isSource;
-  }
-
-	@Override
-  public String toString() {
-    return label;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/browser/Browser.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/browser/Browser.java b/src/joshua/ui/tree_visualizer/browser/Browser.java
deleted file mode 100644
index bd5b592..0000000
--- a/src/joshua/ui/tree_visualizer/browser/Browser.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer.browser;
-
-import joshua.ui.tree_visualizer.tree.Tree;
-import joshua.util.io.LineReader;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.File;
-import java.io.IOException;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Scanner;
-
-import javax.swing.DefaultListModel;
-import javax.swing.JFrame;
-import javax.swing.JList;
-import javax.swing.JScrollPane;
-import javax.swing.JTextField;
-import javax.swing.ListSelectionModel;
-import javax.swing.event.ListSelectionEvent;
-import javax.swing.event.ListSelectionListener;
-import javax.swing.event.DocumentListener;
-import javax.swing.event.DocumentEvent;
-
-public class Browser {
-
-  /**
-   * A list that contains the one best translation of each source sentence.
-   */
-  private static JList oneBestList;
-
-  private static JTextField searchBox;
-
-  /**
-   * The current frame that displays a derivation tree.
-   */
-  private static List<DerivationTreeFrame> activeFrame;
-
-  private static List<TranslationInfo> translations;
-  /**
-   * Default width of the chooser frame.
-   */
-  private static final int DEFAULT_WIDTH = 640;
-
-  /**
-   * Default height of the chooser frame.
-   */
-  private static final int DEFAULT_HEIGHT = 480;
-
-  /**
-   * List of colors to be used in derivation trees
-   */
-  static final Color[] dataSetColors = { Color.red, Color.orange, Color.blue, Color.green };
-
-  /**
-   * @param args the paths to the source, reference, and n-best files
-   */
-  public static void main(String[] argv) throws IOException {
-    String sourcePath = argv.length > 0 ? argv[0] : null;
-    String referencePath = argv.length > 1 ? argv[1] : null;
-    String[] translationPaths = new String[0];
-    if (argv.length > 2) {
-      translationPaths = Arrays.copyOfRange(argv, 2, argv.length);
-    }
-    translations = new ArrayList<TranslationInfo>();
-    readSourcesFromPath(sourcePath);
-    readReferencesFromPath(referencePath);
-    for (String tp : translationPaths) {
-      readTranslationsFromPath(tp);
-    }
-    initializeChooserFrame();
-    return;
-  }
-
-  private static void readSourcesFromPath(String path) throws IOException {
-    for (String line: new LineReader(path)) {
-      TranslationInfo ti = new TranslationInfo();
-      ti.setSourceSentence("<s> " + line + " </s>");
-      translations.add(ti);
-    }
-  }
-
-  private static void readReferencesFromPath(String path) throws IOException {
-    Scanner scanner = new Scanner(new File(path), "UTF-8");
-    for (TranslationInfo ti : translations) {
-      if (scanner.hasNextLine()) {
-        ti.setReference(scanner.nextLine());
-      }
-    }
-    scanner.close();
-  }
-
-  private static void readTranslationsFromPath(String path) throws IOException {
-    Scanner scanner = new Scanner(new File(path), "UTF-8");
-    String sentenceIndex = null;
-    for (TranslationInfo ti : translations) {
-      while (scanner.hasNextLine()) {
-        final String[] fields = scanner.nextLine().split("\\|\\|\\|");
-        final String index = fields[0];
-        final String tree = fields[1].trim();
-        if (!index.equals(sentenceIndex)) {
-          sentenceIndex = index;
-          ti.translations().add(new Tree(tree));
-          break;
-        }
-      }
-    }
-    scanner.close();
-  }
-
-  /**
-   * Initializes the various JComponents in the chooser frame.
-   */
-  private static void initializeChooserFrame() {
-    JFrame chooserFrame = new JFrame("Joshua Derivation Tree Browser");
-    chooserFrame.setLayout(new BorderLayout());
-
-    /*
-     * JMenuBar mb = new JMenuBar(); JMenu openMenu = new JMenu("Control"); JMenuItem src = new
-     * JMenuItem("Open source file ..."); JMenuItem ref = new JMenuItem("Open reference file ...");
-     * JMenuItem tgt = new JMenuItem("Open n-best derivations file ..."); JMenuItem quit = new
-     * JMenuItem("Quit");
-     * 
-     * new FileChoiceListener(chooserFrame, src, ref, tgt);
-     * 
-     * quit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {
-     * System.exit(0); } }); openMenu.add(src); openMenu.add(ref); openMenu.add(tgt);
-     * openMenu.add(quit); mb.add(openMenu); chooserFrame.setJMenuBar(mb);
-     */
-
-    searchBox = new JTextField("search");
-    searchBox.getDocument().addDocumentListener(new SearchListener());
-    searchBox.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        final int selectedIndex = oneBestList.getSelectedIndex();
-        Browser.search(selectedIndex < 0 ? 0 : selectedIndex + 1);
-      }
-    });
-    oneBestList = new JList(new DefaultListModel());
-    oneBestList.setFixedCellWidth(200);
-    oneBestList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
-    // oneBestList.setCellRenderer(new DerivationBrowserListCellRenderer());
-
-    oneBestList.addListSelectionListener(new ListSelectionListener() {
-      public void valueChanged(ListSelectionEvent e) {
-        for (DerivationTreeFrame frame : activeFrame) {
-          frame.drawGraph(translations.get(oneBestList.getSelectedIndex()));
-        }
-        return;
-      }
-    });
-    chooserFrame.getContentPane().add(searchBox, BorderLayout.NORTH);
-    chooserFrame.getContentPane().add(new JScrollPane(oneBestList), BorderLayout.CENTER);
-
-    refreshLists();
-    chooserFrame.setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
-    chooserFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
-    activeFrame = new ArrayList<DerivationTreeFrame>();
-    int numNBestFiles = translations.get(0).translations().size();
-    for (int i = 0; i < numNBestFiles; i++)
-      activeFrame.add(new DerivationTreeFrame(i, oneBestList));
-    chooserFrame.setVisible(true);
-    return;
-  }
-
-  /**
-   * Removes and re-adds the appropriate values to the reference and one-best lists.
-   */
-  private static void refreshLists() {
-    oneBestList.removeAll();
-    DefaultListModel oneBestListModel = (DefaultListModel) oneBestList.getModel();
-    for (TranslationInfo ti : translations) {
-      oneBestListModel.addElement(ti.reference());
-    }
-    return;
-  }
-
-  private static void search(int fromIndex) {
-    final String query = searchBox.getText();
-    DefaultListModel oneBestListModel = (DefaultListModel) oneBestList.getModel();
-    for (int i = fromIndex; i < oneBestListModel.getSize(); i++) {
-      String reference = (String) oneBestListModel.getElementAt(i);
-      if (reference.indexOf(query) != -1) {
-        // found the query
-        oneBestList.setSelectedIndex(i);
-        oneBestList.ensureIndexIsVisible(i);
-        searchBox.setBackground(Color.white);
-        return;
-      }
-    }
-    searchBox.setBackground(Color.red);
-  }
-
-  private static class SearchListener implements DocumentListener {
-
-    public void insertUpdate(DocumentEvent e) {
-      final int selectedIndex = oneBestList.getSelectedIndex();
-      Browser.search(selectedIndex < 0 ? 0 : selectedIndex);
-    }
-
-    public void removeUpdate(DocumentEvent e) {
-      final String query = searchBox.getText();
-      if (query.equals("")) {
-        return;
-      } else {
-        insertUpdate(e);
-      }
-    }
-
-    public void changedUpdate(DocumentEvent e) {
-
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/browser/DerivationTreeFrame.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/browser/DerivationTreeFrame.java b/src/joshua/ui/tree_visualizer/browser/DerivationTreeFrame.java
deleted file mode 100644
index a08b370..0000000
--- a/src/joshua/ui/tree_visualizer/browser/DerivationTreeFrame.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer.browser;
-
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JFrame;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-import javax.swing.JList;
-
-import joshua.ui.tree_visualizer.DerivationTree;
-import joshua.ui.tree_visualizer.DerivationViewer;
-import joshua.ui.tree_visualizer.tree.Tree;
-
-/**
- * A frame that displays a derivation tree.
- * 
- * @author jonny
- * 
- */
-class DerivationTreeFrame extends JFrame {
-  /**
-   * Eclipse seems to think serialVersionUID is important. I don't know why.
-   */
-  private static final long serialVersionUID = -3173826443907629130L;
-
-  /**
-   * A button to move to the next source-side sentence in the file.
-   */
-  JButton nextSource;
-  /**
-   * A button to move to the previous source-side sentence in the file.
-   */
-  JButton previousSource;
-
-  /**
-   * A button to show or hide extra information about the derivation.
-   */
-  private JButton informationButton;
-
-  /**
-   * A panel holding the extra information about the derivation.
-   */
-  private JPanel informationPanel;
-
-  /**
-   * A label holding the current source sentence.
-   */
-  private JLabel sourceLabel;
-
-  /**
-   * A label holding the reference translation of the current source sentence.
-   */
-  private JLabel referenceLabel;
-
-  /**
-   * A label holding the one-best translation of the current source sentence.
-   */
-  private JLabel oneBestLabel;
-
-  /**
-   * A panel that holds the buttons, as well as labels to show which derivation
-   * is currently being displayed.
-   */
-  private JPanel controlPanel;
-  /**
-   * A panel used to display the derivation tree itself.
-   */
-  private JPanel viewPanel;
-
-  /**
-   * This component displays the derivation tree's JUNG graph.
-   */
-  private DerivationViewer dv;
-
-  /**
-   * Index to determine which data set (which n-best file) this frame brings its
-   * graphs from.
-   */
-  private final int dataSetIndex;
-
-  private static final int DEFAULT_WIDTH = 640;
-  private static final int DEFAULT_HEIGHT = 480;
-
-  /**
-   * Color to use to render target-side trees.
-   */
-  private Color targetColor;
-
-  private JList mainList;
-
-  /**
-   * The default constructor.
-   */
-  public DerivationTreeFrame(int index, JList mainList) {
-    super("Joshua Derivation Tree");
-    this.mainList = mainList;
-    setLayout(new BorderLayout());
-    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
-    controlPanel = new JPanel(new BorderLayout());
-    informationPanel = new JPanel(new GridLayout(3, 1));
-
-    sourceLabel = new JLabel("source sentence");
-    referenceLabel = new JLabel("reference translation");
-    oneBestLabel = new JLabel("one best translation");
-
-    informationPanel.add(sourceLabel);
-    informationPanel.add(referenceLabel);
-    informationPanel.add(oneBestLabel);
-    informationPanel.setVisible(false);
-
-    controlPanel.add(informationPanel, BorderLayout.SOUTH);
-
-    initializeButtons();
-    layoutControl();
-
-    viewPanel = new JPanel(new BorderLayout());
-    dv = null;
-
-    dataSetIndex = index;
-    targetColor = Browser.dataSetColors[dataSetIndex % Browser.dataSetColors.length];
-
-    getContentPane().add(viewPanel, BorderLayout.CENTER);
-    getContentPane().add(controlPanel, BorderLayout.SOUTH);
-    // drawGraph();
-    setVisible(true);
-  }
-
-  /**
-   * Lays out the control buttons of this frame.
-   */
-  private void layoutControl() {
-    /*
-     * JPanel ctlLeft = new JPanel(new GridLayout(2, 1)); JPanel ctlCenter = new
-     * JPanel(new GridLayout(2, 1)); JPanel ctlRight = new JPanel(new
-     * GridLayout(2, 1));
-     * 
-     * controlPanel.add(ctlLeft, BorderLayout.WEST); controlPanel.add(ctlCenter,
-     * BorderLayout.CENTER); controlPanel.add(ctlRight, BorderLayout.EAST);
-     * 
-     * ctlLeft.add(previousSource); ctlRight.add(nextSource);
-     */
-
-    controlPanel.add(previousSource, BorderLayout.WEST);
-    controlPanel.add(nextSource, BorderLayout.EAST);
-    controlPanel.add(informationButton, BorderLayout.CENTER);
-    return;
-  }
-
-  /**
-   * Initializes the control buttons of this frame.
-   */
-  private void initializeButtons() {
-    nextSource = new JButton(">");
-    previousSource = new JButton("<");
-    informationButton = new JButton("More Information");
-
-    nextSource.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        int index = mainList.getSelectedIndex();
-        mainList.setSelectedIndex(index + 1);
-        return;
-      }
-    });
-    previousSource.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        int index = mainList.getSelectedIndex();
-        if (index > 0) {
-          mainList.setSelectedIndex(index - 1);
-        }
-        return;
-      }
-    });
-    informationButton.addActionListener(new ActionListener() {
-      public void actionPerformed(ActionEvent e) {
-        JButton source = (JButton) e.getSource();
-        if (informationPanel.isVisible()) {
-          source.setText("More Information");
-          informationPanel.setVisible(false);
-        } else {
-          source.setText("Less Information");
-          informationPanel.setVisible(true);
-        }
-        return;
-      }
-    });
-    return;
-  }
-
-  /**
-   * Displays the derivation tree for the current candidate translation. The
-   * current candidate translation is whichever translation is currently
-   * highlighted in the Derivation Browser's chooser frame.
-   */
-  public void drawGraph(TranslationInfo ti) {
-    viewPanel.removeAll();
-    String src = ti.sourceSentence();
-    Tree tgt = ti.translations().get(dataSetIndex);
-    String ref = ti.reference();
-
-    sourceLabel.setText(src);
-    referenceLabel.setText(ref);
-    oneBestLabel.setText(tgt.yield());
-
-    DerivationTree tree = new DerivationTree(tgt, src);
-    if (dv == null) {
-      dv = new DerivationViewer(tree, viewPanel.getSize(), targetColor,
-          DerivationViewer.AnchorType.ANCHOR_LEFTMOST_LEAF);
-    } else {
-      dv.setGraph(tree);
-    }
-    viewPanel.add(dv, BorderLayout.CENTER);
-    dv.revalidate();
-    repaint();
-    getContentPane().repaint();
-    return;
-  }
-
-  /**
-   * Makes this frame unmodifiable, so that the tree it displays cannot be
-   * changed. In fact, all that happens is the title is update and the
-   * navigation buttons are disabled. This method is intended to prevent the
-   * user from modifying the frame, not to prevent other code from modifying it.
-   */
-  public void disableNavigationButtons() {
-    setTitle(getTitle() + " (fixed)");
-    nextSource.setEnabled(false);
-    previousSource.setEnabled(false);
-    return;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/browser/TranslationInfo.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/browser/TranslationInfo.java b/src/joshua/ui/tree_visualizer/browser/TranslationInfo.java
deleted file mode 100644
index 8fde26f..0000000
--- a/src/joshua/ui/tree_visualizer/browser/TranslationInfo.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer.browser;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import joshua.ui.tree_visualizer.tree.Tree;
-
-class TranslationInfo {
-  private String sourceSentence;
-  private String reference;
-  private ArrayList<Tree> translations;
-
-  public TranslationInfo() {
-    translations = new ArrayList<Tree>();
-  }
-
-  public String sourceSentence() {
-    return sourceSentence;
-  }
-
-  public void setSourceSentence(String src) {
-    sourceSentence = src;
-    return;
-  }
-
-  public String reference() {
-    return reference;
-  }
-
-  public void setReference(String ref) {
-    reference = ref;
-    return;
-  }
-
-  public List<Tree> translations() {
-    return translations;
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/ui/tree_visualizer/tree/Tree.java
----------------------------------------------------------------------
diff --git a/src/joshua/ui/tree_visualizer/tree/Tree.java b/src/joshua/ui/tree_visualizer/tree/Tree.java
deleted file mode 100644
index 409e30a..0000000
--- a/src/joshua/ui/tree_visualizer/tree/Tree.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * 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 joshua.ui.tree_visualizer.tree;
-
-import java.util.Stack;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Comparator;
-
-/**
- * A class to represent the target-side tree produced by decoding using Joshua
- * with an SCFG.
- * <p>
- * When decoding with use_tree_nbest=true, instead of a flat text output like
- * "i asked her a question", we get a Penn treebank format tree like
- * "(ROOT (S (NP i) (VP (V asked) (NP her) (NP (DT a) (N question)))))".
- * If we also set include_align_index=true, we include source-side alignments
- * for each internal node of the tree.
- * <p>
- * So, if the source input sentence is "je lui ai pose un question", if we
- * turn on both configuration options, we end up with a decorated tree like
- * this:
- * "(ROOT{0-6} (S{0-6} (NP{0-1} i) (VP{1-6} (V{2-4} asked) (NP{1-2} her)
- * (NP{4-6} (DT{4-5} a) (N{5-6} question)))))".
- * <p>
- * This class contains all the information of that flat string representation:
- * the tree structure, the output (English) words, and the alignments to a
- * source sentence.
- * <p>
- * Using a Tree the source sentence it was aligned to, we can create
- * a DerivationTree object suitable for display. 
- *
- * @author Jonny Weese <jo...@cs.jhu.edu>
- */
-public class Tree {
-
-	/**
-	 * An array holding the label of each node of the tree, in depth-first order.
-	 * The label of a node means the NT label assigned to an internal node, or
-	 * the terminal symbol (English word) at a leaf.
-	 */
-	private final String [] labels;
-
-	/**
-	 * The number of children of each node of the tree, in depth-first order.
-	 */
-	private final int [] numChildren;
-
-	/**
-	 * The smallest source-side index that each node covers, in depth-first order.
-	 * Note that we only have this information for internal nodes. For leaves,
-	 * this value will always be -1.
-	 */
-	private final int [] sourceStartIndices;
-
-	/**
-	 * 1 + the largest source-side index that each node covers, in depth-first
-	 * order. Note that we only have this informaion for internal nodes. For
-	 * leaves, this value will always be -1.
-	 */
-	private final int [] sourceEndIndices;
-
-	/**
-	 * A pattern to match an aligned internal node and pull out its information.
-	 * This pattern matches:
-	 *
-	 * 1) start-of-string
-	 * 2) (
-	 * 3) an arbitrary sequence of non-whitespace characters (at least 1)
-	 * 4) {
-	 * 5) a decimal number
-	 * 6) -
-	 * 7) a decimal number
-	 * 8) }
-	 * 9) end-of-string
-	 *
-	 * That is, it matches something like "(FOO{32-55}". The string and two 
-	 * decimal numbers (parts 3, 5, and 7) are captured in groups.
-	 */
-	private static final Pattern NONTERMINAL_PATTERN =
-		Pattern.compile("^\\((\\S+)\\{(\\d+)-(\\d+)\\}$");
-
-	/**
-	 * Creates a Tree object from an input string in Penn treebank format with
-	 * source alignment annotations.
-	 */
-	public Tree(String s) {
-		final String [] tokens = s.replaceAll("\\)", " )").split("\\s+");
-		int numNodes = 0;
-		for (String t : tokens) {
-			if (!t.equals(")")) {
-				numNodes++;
-			}
-		}
-		labels = new String[numNodes];
-		numChildren = new int[numNodes];
-		sourceStartIndices = new int[numNodes];
-		sourceEndIndices = new int[numNodes];
-		try {
-			initialize(tokens);
-		} catch (Exception e) {
-			// This will catch most formatting errors.
-			throw new IllegalArgumentException(
-					String.format("couldn't create tree from string: \"%s\"", s),
-					e);
-		}
-	}
-
-	private void initialize(String [] tokens) {
-		final Stack<Integer> stack = new Stack<Integer>();
-		int nodeIndex = 0;
-		for (String token : tokens) {
-			final Matcher matcher = NONTERMINAL_PATTERN.matcher(token);
-			if (matcher.matches()) {
-				// new non-terminal node
-				labels[nodeIndex] = matcher.group(1);
-				sourceStartIndices[nodeIndex] = Integer.parseInt(matcher.group(2));
-				sourceEndIndices[nodeIndex] = Integer.parseInt(matcher.group(3));
-				stack.push(nodeIndex);
-				nodeIndex++;
-			} else if (token.equals(")")) {
-				// finished a subtree
-				stack.pop();
-				if (stack.empty()) {
-					break;
-				} else {
-					numChildren[stack.peek()]++;
-				}
-			} else {
-				// otherwise, it's a new leaf node
-				labels[nodeIndex] = token;
-				sourceStartIndices[nodeIndex] = -1;
-				sourceEndIndices[nodeIndex] = -1;
-				numChildren[stack.peek()]++;
-				nodeIndex++;
-			}
-		}
-		if (!stack.empty()) {
-			// Not enough close-parentheses at the end of the tree.
-			throw new IllegalArgumentException();
-		}
-	}
-
-	/**
-	 * Return the number of nodes in this Tree.
-	 */
-	public int size() {
-		return labels.length;
-	}
-
-	/**
-	 * Get the root Node of this Tree.
-	 */
-	public Node root() {
-		return new Node(0);
-	}
-
-	private List<Integer> childIndices(int index) {
-		List<Integer> result = new ArrayList<Integer>();
-		int remainingChildren = numChildren[index];
-		int childIndex = index + 1;
-		while (remainingChildren > 0) {
-			result.add(childIndex);
-			childIndex = nextSiblingIndex(childIndex);
-			remainingChildren--;
-		}
-		return result;
-	}
-
-	private int nextSiblingIndex(int index) {
-		int result = index + 1;
-		int remainingChildren = numChildren[index];
-		for (int i = 0; i < remainingChildren; i++) {
-			result = nextSiblingIndex(result);
-		}
-		return result;
-	}
-
-	public String yield() {
-		String result = "";
-		for (int i = 0; i < labels.length; i++) {
-			if (numChildren[i] == 0) {
-				if (!result.equals("")) {
-					result += " ";
-				}
-				result += labels[i];
-			}
-		}
-		return result;
-	}
-
-	@Override
-	public String toString() {
-		return root().toString();
-	}
-
-	/**
-	 * A class representing the Nodes of a tree.
-	 */
-	public class Node {
-
-		/**
-		 * The index into the Tree class's internal arrays.
-		 */
-		private final int index;
-
-		private Node(int i) {
-			index = i;
-		}
-
-		/**
-		 * Get the label for this node. If the node is internal to the tree, its
-		 * label is the non-terminal label assigned to it. If it is a leaf node,
-		 * the label is the English word at the leaf.
-		 */
-		public String label() {
-			return labels[index];
-		}
-
-		public boolean isLeaf() {
-			return numChildren[index] == 0;
-		}
-
-		public int sourceStartIndex() {
-			return sourceStartIndices[index];
-		}
-
-		public int sourceEndIndex() {
-			return sourceEndIndices[index];
-		}
-
-		public List<Node> children() {
-			List<Node> result = new ArrayList<Node>();
-			for (int j : childIndices(index)) {
-				result.add(new Node(j));
-			}
-			return result;
-		}
-
-		@Override
-		public String toString() {
-			if (isLeaf()) {
-				return label();
-			}
-			String result = String.format("(%s{%d-%d}",
-					                          label(),
-																		sourceStartIndex(),
-																		sourceEndIndex());
-			for (Node c : children()) {
-				result += String.format(" %s", c);
-			}
-			return result + ")";
-		}
-	}
-
-	public static class NodeSourceStartComparator implements Comparator<Node> {
-		public int compare(Node a, Node b) {
-			return a.sourceStartIndex() - b.sourceStartIndex();
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/util/Algorithms.java
----------------------------------------------------------------------
diff --git a/src/joshua/util/Algorithms.java b/src/joshua/util/Algorithms.java
deleted file mode 100644
index 0f25ee2..0000000
--- a/src/joshua/util/Algorithms.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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 joshua.util;
-
-public final class Algorithms {
-
-  /**
-   * Calculates the Levenshtein Distance for a candidate paraphrase given the source.
-   * 
-   * The code is based on the example by Michael Gilleland found at
-   * http://www.merriampark.com/ld.htm.
-   * 
-   */
-  public static final int levenshtein(String[] candidate, String[] source) {
-    // First check to see whether either of the arrays
-    // is empty, in which case the least cost is simply
-    // the length of the other array (which would correspond
-    // to inserting that many elements.
-    if (source.length == 0) return candidate.length;
-    if (candidate.length == 0) return source.length;
-
-    // Initialize a table to the minimum edit distances between
-    // any two points in the arrays. The size of the table is set
-    // to be one beyond the lengths of the two arrays, and the first
-    // row and first column are set to be zero to avoid complicated
-    // checks for out of bounds exceptions.
-    int distances[][] = new int[source.length + 1][candidate.length + 1];
-
-    for (int i = 0; i <= source.length; i++)
-      distances[i][0] = i;
-    for (int j = 0; j <= candidate.length; j++)
-      distances[0][j] = j;
-
-    // Walk through each item in the source and target arrays
-    // and find the minimum cost to move from the previous points
-    // to here.
-    for (int i = 1; i <= source.length; i++) {
-      Object sourceItem = source[i - 1];
-      for (int j = 1; j <= candidate.length; j++) {
-        Object targetItem = candidate[j - 1];
-        int cost;
-        if (sourceItem.equals(targetItem))
-          cost = 0;
-        else
-          cost = 1;
-        int deletionCost = distances[i - 1][j] + 1;
-        int insertionCost = distances[i][j - 1] + 1;
-        int substitutionCost = distances[i - 1][j - 1] + cost;
-        distances[i][j] = minimum(insertionCost, deletionCost, substitutionCost);
-      }
-    }
-    // The point at the end will be the minimum edit distance.
-    return distances[source.length][candidate.length];
-  }
-
-  /**
-   * Returns the minimum of the three values.
-   */
-  private static final int minimum(int a, int b, int c) {
-    int minimum;
-    minimum = a;
-    if (b < minimum) minimum = b;
-    if (c < minimum) minimum = c;
-    return minimum;
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/util/Bits.java
----------------------------------------------------------------------
diff --git a/src/joshua/util/Bits.java b/src/joshua/util/Bits.java
deleted file mode 100644
index 2b95a5e..0000000
--- a/src/joshua/util/Bits.java
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- * 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 joshua.util;
-
-/**
- * Utility class for bit twiddling.
- * 
- * @author Lane Schwartz
- */
-public class Bits {
-
-  /**
-   * Encodes two shorts in an int.
-   * 
-   * @param high
-   * @param low
-   * @return
-   */
-  public static int encodeAsInt(short high, short low) {
-
-    // Store the first short value in the highest 16 bits of the int
-    int key = high | 0x00000000;
-    key <<= 16;
-
-    // Store the second short value in the lowest 16 bits of the int
-    int lowInt = low & 0x0000FFFF;
-    key |= lowInt;
-
-    return key;
-
-  }
-
-  /**
-   * Decodes the high 16 bits of an integer as a short.
-   * 
-   * @param i Integer value to decode
-   * @return Short representation of the high 16 bits of the integer
-   */
-  public static short decodeHighBits(int i) {
-
-    long key = i & 0xFFFF0000l;
-
-    key >>= 16;
-
-    return (short) key;
-
-  }
-
-
-  /**
-   * Decodes the low 16 bits of an integer as a short.
-   * 
-   * @param i Integer value to decode
-   * @return Short representation of the high 16 bits of the integer
-   */
-  public static short decodeLowBits(int i) {
-
-    return (short) i;
-
-  }
-
-
-  /**
-   * Encodes two integers in a long.
-   * 
-   * @param high
-   * @param low
-   * @return
-   */
-  public static long encodeAsLong(int high, int low) {
-
-    // Store the first int value in the highest 32 bits of the long
-    long key = high | 0x0000000000000000l;
-    key <<= 32;
-
-    // Store the second int value in the lowest 32 bits of the long
-    long lowLong = low & 0x00000000FFFFFFFFl;;
-    key |= lowLong;
-
-    return key;
-
-  }
-
-  /**
-   * Decodes the high 32 bits of a long as an integer.
-   * 
-   * @param l Long value to decode
-   * @return Integer representation of the high 32 bits of the long
-   */
-  public static int decodeHighBits(long l) {
-
-    long key = l & 0xFFFFFFFF00000000l;
-
-    key >>= 32;
-
-    return (int) key;
-
-  }
-
-
-  /**
-   * Decodes the low 32 bits of a long as an integer.
-   * 
-   * @param l Long value to decode
-   * @return Integer representation of the high 32 bits of the long
-   */
-  public static int decodeLowBits(long l) {
-
-    return (int) l;
-
-  }
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/util/BotMap.java
----------------------------------------------------------------------
diff --git a/src/joshua/util/BotMap.java b/src/joshua/util/BotMap.java
deleted file mode 100644
index 32dea01..0000000
--- a/src/joshua/util/BotMap.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * 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 joshua.util;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Gets a special map that maps any key to the a particular value.
- * 
- * @author Lane Schwartz
- * @see "Lopez (2008), footnote 9 on p73"
- */
-public class BotMap<K, V> implements Map<K, V> {
-
-  /** Special value, which this map will return for every key. */
-  private final V value;
-
-  /**
-   * Constructs a special map that maps any key to the a particular value.
-   * 
-   * @param value Special value, which this map will return for every key.
-   */
-  public BotMap(V value) {
-    this.value = value;
-  }
-
-  public void clear() {
-    throw new UnsupportedOperationException();
-  }
-
-  public boolean containsKey(Object key) {
-    return true;
-  }
-
-  public boolean containsValue(Object value) {
-    return this.value == value;
-  }
-
-  public Set<Map.Entry<K, V>> entrySet() {
-    throw new UnsupportedOperationException();
-  }
-
-  public V get(Object key) {
-    return value;
-  }
-
-  public boolean isEmpty() {
-    return false;
-  }
-
-  public Set<K> keySet() {
-    throw new UnsupportedOperationException();
-  }
-
-  public V put(K key, V value) {
-    throw new UnsupportedOperationException();
-  }
-
-  public void putAll(Map<? extends K, ? extends V> t) {
-    throw new UnsupportedOperationException();
-  }
-
-  public V remove(Object key) {
-    throw new UnsupportedOperationException();
-  }
-
-  public int size() {
-    throw new UnsupportedOperationException();
-  }
-
-  public Collection<V> values() {
-    return Collections.singleton(value);
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/util/Cache.java
----------------------------------------------------------------------
diff --git a/src/joshua/util/Cache.java b/src/joshua/util/Cache.java
deleted file mode 100644
index 8da994b..0000000
--- a/src/joshua/util/Cache.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * 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 joshua.util;
-
-// Imports
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Cache is a class that implements a least recently used cache. It is a straightforward extension
- * of java.util.LinkedHashMap with its removeEldestEntry method overridden, so that stale entries
- * are deleted once we reach the specified capacity of the Cache.
- * <p>
- * This class is quite useful for storing the results of computations that we would do many times
- * over in the FeatureFunctions.
- * 
- * @author Chris Callison-Burch
- * @since 14 April 2005
- * 
- */
-public class Cache<K, V> extends LinkedHashMap<K, V> {
-
-  private static final long serialVersionUID = 6073387072740892061L;
-
-  /** Logger for this class. */
-  private static Logger logger = Logger.getLogger(Cache.class.getName());
-
-  // ===============================================================
-  // Constants
-  // ===============================================================
-
-  /**
-   * A constant is used as the default the cache size if none is specified.
-   */
-  public static final int DEFAULT_CAPACITY = 100000000;
-
-  /** Default initial capacity of the cache. */
-  public static final int INITIAL_CAPACITY = 1000000;
-
-  /** Default load factor of the cache. */
-  public static final float LOAD_FACTOR = 0.75f;
-
-  /**
-   * By default, ordering mode of the cache is access order (true).
-   */
-  public static final boolean ACCESS_ORDER = true;
-
-
-  // ===============================================================
-  // Member variables
-  // ===============================================================
-
-  /** Maximum number of items that the cache can contain. */
-  int maxCapacity;
-
-  // ===============================================================
-  // Constructor(s)
-  // ===============================================================
-
-  /**
-   * Creates a Cache with a set capacity.
-   * 
-   * @param maxCapacity the maximum capacity of the cache.
-   */
-  public Cache(int maxCapacity) {
-    super((maxCapacity < INITIAL_CAPACITY) ? maxCapacity : INITIAL_CAPACITY, LOAD_FACTOR,
-        ACCESS_ORDER);
-    this.maxCapacity = maxCapacity;
-  }
-
-
-  /**
-   * Creates a Cache with the DEFAULT_CAPACITY.
-   */
-  public Cache() {
-    this(DEFAULT_CAPACITY);
-  }
-
-  // ===============================================================
-  // Public
-  // ===============================================================
-
-  // ===========================================================
-  // Accessor methods (set/get)
-  // ===========================================================
-
-  @Override
-  public V get(Object key) {
-    if (logger.isLoggable(Level.FINEST)) {
-      logger.finest("Cache get   key:	" + key.toString());
-    }
-    return super.get(key);
-  }
-
-
-  @Override
-  public V put(K key, V value) {
-
-    if (logger.isLoggable(Level.FINEST)) {
-      logger.finest("Cache put   key:	" + key.toString());
-    }
-
-    return super.put(key, value);
-  }
-
-  // ===========================================================
-  // Methods
-  // ===========================================================
-
-  @Override
-  public boolean containsKey(Object key) {
-    boolean contains = super.containsKey(key);
-
-    if (logger.isLoggable(Level.FINEST)) {
-      String message =
-          (contains) ? "Cache has   key:	" + key.toString() : "Cache lacks key: 	" + key.toString();
-      logger.finest(message);
-    }
-
-    return contains;
-  }
-
-
-  // ===============================================================
-  // Protected
-  // ===============================================================
-
-  // ===============================================================
-  // Methods
-  // ===============================================================
-
-  /**
-   * This method is invoked by put and putAll after inserting a new entry into the map. Once we
-   * reach the capacity of the cache, we remove the oldest entry each time a new entry is added.
-   * This reduces memory consumption by deleting stale entries.
-   * 
-   * @param eldest the eldest entry
-   * @return true if the capacity is greater than the maximum capacity
-   */
-  protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
-    boolean removing = size() > maxCapacity;
-
-    if (removing && logger.isLoggable(Level.FINEST)) {
-      logger.finest("Cache loses key:	" + eldest.getKey().toString());
-    }
-
-    return removing;
-  }
-
-  // ===============================================================
-  // Private
-  // ===============================================================
-
-  // ===============================================================
-  // Methods
-  // ===============================================================
-
-
-  // ===============================================================
-  // Static
-  // ===============================================================
-
-
-  // ===============================================================
-  // Main
-  // ===============================================================
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-joshua/blob/8cdbc4b8/src/joshua/util/ChartSpan.java
----------------------------------------------------------------------
diff --git a/src/joshua/util/ChartSpan.java b/src/joshua/util/ChartSpan.java
deleted file mode 100644
index 81c6aaa..0000000
--- a/src/joshua/util/ChartSpan.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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 joshua.util;
-
-/**
- * CKY-based decoding makes extensive use of charts, which maintain information about spans (i, j)
- * over the length-n input sentence, 0 <= i <= j <= n. These charts are used for many things; for
- * example, lattices use a chart to denote whether there is a path between nodes i and j, and what
- * their costs is, and the decoder uses charts to record the partial application of rules (
- * {@link DotChart}) and the existence of proved items ({@link PhraseChart}).
- * 
- * The dummy way to implement a chart is to initialize a two-dimensional array; however, this wastes
- * a lot of space, because the constraint (i <= j) means that only half of this space can ever be
- * used. This is especially a problem for lattices, where the sentence length (n) is the number of
- * nodes in the lattice!
- * 
- * Fortunately, there is a smarter way, since there is a simple deterministic mapping between chart
- * spans under a given maximum length. This class implements that in a generic way, introducing
- * large savings in both space and time.
- * 
- * @author Matt Post <po...@cs.jhu.edu>
- */
-public class ChartSpan<Type> {
-  Object[] chart;
-  int max;
-
-  public ChartSpan(int w, Type defaultValue) {
-    //System.err.println(String.format("ChartSpan::ChartSpan(%d)", w));
-    this.max = w;
-
-    /* offset(max,max) is the last position in the array */
-    chart = new Object[offset(max,max) + 1];
-
-    /* Initialize all arcs to infinity, except self-loops, which have distance 0 */
-    for (int i = 0; i < chart.length; i++)
-      chart[i] = defaultValue;
-  }
-  
-  @SuppressWarnings("unchecked")
-  public Type get(int i, int j) {
-    return (Type) chart[offset(i, j)];
-  }
-
-  public void set(int i, int j, Type value) {
-    chart[offset(i, j)] = value;
-  }
-
-  /**
-   * This computes the offset into the one-dimensional array for a given span.
-   * 
-   * @param i
-   * @param j
-   * @return the offset
-   * @throws InvalidSpanException
-   */
-  private int offset(int i, int j) {
-    if (i < 0 || j > max || i > j) {
-      throw new RuntimeException(String.format("Invalid span (%d,%d | %d)", i, j, max));
-    }
-
-    // System.err.println(String.format("ChartSpan::offset(%d,%d) = %d / %d", i, j, i * (max + 1) - i * (i + 1) / 2 + j, max * (max + 1) - max * (max + 1) / 2 + max));
-    
-    return i * (max + 1) - i * (i + 1) / 2 + j;
-  }
-
-  /**
-   * Convenience function for setting the values along the diagonal.
-   * 
-   * @param value
-   */
-  public void setDiagonal(Type value) {
-    for (int i = 0; i <= max; i++)
-      set(i, i, value);
-  }
-}
\ No newline at end of file