public static void main(String[] args) throws Exception {
		boolean includePunctuation = true;
		boolean treatEdgesAsUndirected = false;
		ArgumentFilter labelPredicate = new TrueFilter();
		int graphsToRead = -1;
		for (String arg : args) {
			if (arg.equals("excludePunctuation")) {
				System.err.println("Will exclude punctuation.");
				includePunctuation = false;
			}
			if (arg.equals("treatEdgesAsUndirected")) {
				System.err.println("Will treat edges as undirected.");
				treatEdgesAsUndirected = true;
			}
			if (arg.startsWith("corePredicates=")) {
				String fileName = arg.substring(15);
				System.err.format("Reading core predicates from %s%n", fileName);
				labelPredicate = new ListFilter(new File(fileName));
			}
			if (arg.startsWith("max=")) {
				graphsToRead = Integer.parseInt(arg.substring(4));
				System.err.format("Will read at most %d graphs.%n", graphsToRead);
			}
			if (arg.startsWith("representation=")) {
				String representation = arg.substring(15).toLowerCase();
				if (representation.equals("dm")) {
					System.err.println("Representation type: DM");
					labelPredicate = new DMArgumentFilter();
				}
				if (representation.equals("pas")) {
					System.err.println("Representation type: PAS");
					labelPredicate = new PASArgumentFilter();
				}
				if (representation.equals("psd")) {
					System.err.println("Representation type: PSD");
					labelPredicate = new PSDPredicate();
				}
			}
		}

		System.err.println("# Evaluation");
		System.err.println();

		System.err.format("Gold standard file: %s%n", args[0]);
		System.err.format("System output file: %s%n", args[1]);
		System.err.println();

		List<GraphPair> graphPairs = readGraphs(args[0], args[1], graphsToRead);

		System.err.println("## Scores including virtual dependencies to top nodes");
		System.err.println();
		score(true, includePunctuation, treatEdgesAsUndirected, graphPairs, labelPredicate);
		System.err.println();

		System.err.println("## Scores excluding virtual dependencies to top nodes");
		System.err.println();
		score(false, includePunctuation, treatEdgesAsUndirected, graphPairs, labelPredicate);
	}