public static Result[] runSegmenter(List<Utterance> goldTrainUtterances,
			Lexicon goldTrainLexicon, List<Utterance> goldTestUtterances, Lexicon goldTestLexicon,
			Properties props, String outPath, boolean verbose) {
		boolean useTestData = goldTestUtterances != null;
		Segment seg = new Segment(props, outPath);

		// Copy utterances into segUtterances
		boolean dropStress = seg.DROP_STRESS;
		List<Utterance> segTrainUtterances = Utterance.segUtterances(goldTrainUtterances,
				dropStress);
		List<Utterance> segTestUtterances = useTestData ?
				Utterance.segUtterances(goldTestUtterances, dropStress) : null;

		// Train and test
		seg.segment(segTrainUtterances, true, verbose);
		if (useTestData) {
			seg.segment(segTestUtterances, false, verbose);
		}

		// Output eval. It always gets the goldTrainLexicon because the lexicon is only learned
		// during training.
		Result[] evalResults = seg.eval(goldTrainUtterances, segTrainUtterances,
				goldTestUtterances, segTestUtterances, goldTrainLexicon, seg.lexicon, verbose);
		seg.writeOutput(segTrainUtterances, seg.lexicon);

		return evalResults;
	}