private static double[] getValuesMulti(ArrayList gold, ArrayList eval) {

		if (gold.size() != eval.size()) {
			System.err.println("error!, gold.size!=eval.size -> I quit!");
			System.exit(0);
		}

		HashMap gold_chunks = getChunksMulti(gold);
		HashMap eval_chunks = getChunksMulti(eval);

		int numcorr = 0;
		int numans = eval_chunks.size();
		int numref = gold_chunks.size();

		// now check the blocks
		for (Iterator iter = eval_chunks.keySet().iterator(); iter.hasNext();) {
			String offset = (String) iter.next();
			if (gold_chunks.containsKey(offset)) {
				String tags_eval = (String) eval_chunks.get(offset);
				String tags_gold = (String) gold_chunks.get(offset);
				if (tags_eval.equals(tags_gold)) {
					numcorr++;
					// System.out.println ("hit! " + offset + ": " + tags_eval);
				}
			}
		}

		// System.out.println("\n");
		// System.out.println("numref (# entities in gold): " + numref);
		// System.out.println("numans (# entities in test): " + numans);
		// System.out.println("numcorr (# correct entities in test): " +
		// numcorr);

		double precision = 0;
		double recall = 0;
		double fscore = 0;

		if (numans > 0)
			precision = numcorr / (double) numans;
		if (numref > 0)
			recall = numcorr / (double) numref;
		if (precision + recall > 0)
			fscore = 2 * precision * recall / (precision + recall);
		// System.out.println("recall: " + recall);
		// System.out.println("precision: " + precision);
		// System.out.println("f-measure: " + fscore);
		double[] values = new double[] { recall, precision, fscore };
		return values;
	}