// Path: src/main/java/cz/brmlab/brmson/blanqa/framework/data/NamedEntity.java
// public class NamedEntity {
// 	private String text;
// 	private float score;
// 
// 	public NamedEntity(String text) {
// 		this.text = text;
// 		this.score = 0;
// 	}
// 
// 	public String getText() {
// 		return text;
// 	}
// 
// 	public float getScore() {
// 		return score;
// 	}
// 	public void setScore(float score) {
// 		this.score = score;
// 	}
// 	public void addScore(float score) {
// 		this.score += score;
// 	}
// }
// 
// Path: src/main/java/cz/brmlab/brmson/blanqa/framework/data/Sentence.java
// public class Sentence {
// 	private String text;
// 	private Sentence prev, next;
// 
// 	private SearchResult resultRef;
// 
// 	private float score;
// 
// 	public Sentence(SearchResult resultRef, String text) {
// 		this.resultRef = resultRef;
// 		this.text = text;
// 		this.score = 0;
// 	}
// 
// 	public String getText() {
// 		return text;
// 	}
// 	public SearchResult getResultRef() {
// 		return resultRef;
// 	}
// 
// 	public Sentence getPrev() {
// 		return prev;
// 	}
// 	public void setPrev(Sentence s) {
// 		this.prev = s;
// 	}
// 
// 	public Sentence getNext() {
// 		return next;
// 	}
// 	public void setNext(Sentence s) {
// 		this.next = s;
// 	}
// 
// 	public float getScore() {
// 		return score;
// 	}
// 	public void setScore(float score) {
// 		this.score = score;
// 	}
// 	public void addScore(float score) {
// 		this.score += score;
// 	}
// }
// 
// Path: src/main/java/cz/brmlab/brmson/core/provider/opennlp/OpenNLPWrapper.java
// public final class OpenNLPWrapper extends OpenNLP {
// 	/* These data files can be download at http://pasky.or.cz/dev/brmson/res-opennlp.zip */
// 
// 	private static final String TOKENIZER_PATH = "res/ephyra/nlp/tokenizer/opennlp/EnglishTok.bin.gz";
// 
// 	private static final String SENT_DETECTOR_PATH = "res/ephyra/nlp/sentencedetector/opennlp/EnglishSD.bin.gz";
// 
// 	private static final String TAGGER_PATH = "res/ephyra/nlp/postagger/opennlp/tag.bin.gz";
// 	private static final String TAGGER_DICT_PATH = "res/ephyra/nlp/postagger/opennlp/tagdict";
// 
// 	private static final String CHUNKER_PATH = "res/ephyra/nlp/phrasechunker/opennlp/EnglishChunk.bin.gz";
// 
// 
// 	private static boolean initialized = false;
// 
// 	public static void initialize() throws Exception {
// 		if (initialized)
// 			return;
// 
// 		if (!createTokenizer(TOKENIZER_PATH))
// 			throw new Exception("Could not initialize tokenizer.");
// 
// 		// sentence segmenter
// 		if (!createSentenceDetector(SENT_DETECTOR_PATH))
// 			throw new Exception("Could not initialize sentence segmenter.");
// 
// 		// part of speech tagger
// 		if (!createPosTagger(TAGGER_PATH, TAGGER_DICT_PATH))
// 			throw new Exception("Could not initialize POS tagger.");
// 
// 		// phrase chunker
// 		if (!createChunker(CHUNKER_PATH))
// 			throw new Exception("Could not initialize phrase chunker.");
// 
// 		initialized = true;
// 	}
// }
// 
// Path: src/main/java/cz/brmlab/brmson/core/provider/netagger/NETaggerWrapper.java
// public final class NETaggerWrapper extends NETagger {
// 	/* These data files can be download at http://pasky.or.cz/dev/brmson/res-netagger.zip */
// 
// 	private static final String NER_LIST_PATH = "res/ephyra/nlp/netagger/lists/";
// 	private static final String NER_REGEX_PATH = "res/ephyra/nlp/netagger/patterns.lst";
// 	private static final String NER_STANFORD_PATH = "res/ephyra/nlp/netagger/stanford/ner-eng-ie.crf-3-all2006-distsim.ser.gz";
// 
// 
// 	private static boolean initialized = false;
// 
// 	public static void initialize() throws Exception {
// 		if (initialized)
// 			return;
// 
// 		loadListTaggers(NER_LIST_PATH);
// 		loadRegExTaggers(NER_REGEX_PATH);
// 		if (!StanfordNeTagger.init(NER_STANFORD_PATH))
// 			throw new Exception("Could not initialize NE tagger.");
// 
// 		initialized = true;
// 	}
// }


import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import org.oaqa.model.SearchResult;
import cz.brmlab.brmson.blanqa.framework.data.NamedEntity;
import cz.brmlab.brmson.blanqa.framework.data.Sentence;
import cz.brmlab.brmson.core.provider.opennlp.OpenNLPWrapper;
import cz.brmlab.brmson.core.provider.netagger.NETaggerWrapper;
					String NEtok = recognizedNEs[i][j];
					String NEtext = OpenNLPWrapper.untokenize(NEtok, s.getText());
					NEtext = NEtext.trim();
					if (NEtext.length() == 0) // ignore empty NEs
						continue;

					NamedEntity NE = new NamedEntity(NEtext);
					NE.setScore(1);
					// TODO: Additional context-based NE scoring

					System.err.println("NEtok " + NEtok + " NE " + NE.getText()
							+ " score " + NE.getScore()
							+ " (sencence " + s.getText() + " score " + s.getScore() + ")");

					if (NEdedup.get(i).contains(NEtext))
						continue;
					NEdedup.get(i).add(NEtext);
					NEs.get(i).add(NE);
				}
				i++;
			}
		}

		return NEs;
	}


	/**
	 * Kick-off, initializing static classes we are dependent on.
	 */
// Path: src/main/java/cz/brmlab/brmson/blanqa/framework/data/NamedEntity.java
// public class NamedEntity {
// 	private String text;
// 	private float score;
// 
// 	public NamedEntity(String text) {
// 		this.text = text;
// 		this.score = 0;
// 	}
// 
// 	public String getText() {
// 		return text;
// 	}
// 
// 	public float getScore() {
// 		return score;
// 	}
// 	public void setScore(float score) {
// 		this.score = score;
// 	}
// 	public void addScore(float score) {
// 		this.score += score;
// 	}
// }
// 
// Path: src/main/java/cz/brmlab/brmson/blanqa/framework/data/Sentence.java
// public class Sentence {
// 	private String text;
// 	private Sentence prev, next;
// 
// 	private SearchResult resultRef;
// 
// 	private float score;
// 
// 	public Sentence(SearchResult resultRef, String text) {
// 		this.resultRef = resultRef;
// 		this.text = text;
// 		this.score = 0;
// 	}
// 
// 	public String getText() {
// 		return text;
// 	}
// 	public SearchResult getResultRef() {
// 		return resultRef;
// 	}
// 
// 	public Sentence getPrev() {
// 		return prev;
// 	}
// 	public void setPrev(Sentence s) {
// 		this.prev = s;
// 	}
// 
// 	public Sentence getNext() {
// 		return next;
// 	}
// 	public void setNext(Sentence s) {
// 		this.next = s;
// 	}
// 
// 	public float getScore() {
// 		return score;
// 	}
// 	public void setScore(float score) {
// 		this.score = score;
// 	}
// 	public void addScore(float score) {
// 		this.score += score;
// 	}
// }
// 
// Path: src/main/java/cz/brmlab/brmson/core/provider/opennlp/OpenNLPWrapper.java
// public final class OpenNLPWrapper extends OpenNLP {
// 	/* These data files can be download at http://pasky.or.cz/dev/brmson/res-opennlp.zip */
// 
// 	private static final String TOKENIZER_PATH = "res/ephyra/nlp/tokenizer/opennlp/EnglishTok.bin.gz";
// 
// 	private static final String SENT_DETECTOR_PATH = "res/ephyra/nlp/sentencedetector/opennlp/EnglishSD.bin.gz";
// 
// 	private static final String TAGGER_PATH = "res/ephyra/nlp/postagger/opennlp/tag.bin.gz";
// 	private static final String TAGGER_DICT_PATH = "res/ephyra/nlp/postagger/opennlp/tagdict";
// 
// 	private static final String CHUNKER_PATH = "res/ephyra/nlp/phrasechunker/opennlp/EnglishChunk.bin.gz";
// 
// 
// 	private static boolean initialized = false;
// 
// 	public static void initialize() throws Exception {
// 		if (initialized)
// 			return;
// 
// 		if (!createTokenizer(TOKENIZER_PATH))
// 			throw new Exception("Could not initialize tokenizer.");
// 
// 		// sentence segmenter
// 		if (!createSentenceDetector(SENT_DETECTOR_PATH))
// 			throw new Exception("Could not initialize sentence segmenter.");
// 
// 		// part of speech tagger
// 		if (!createPosTagger(TAGGER_PATH, TAGGER_DICT_PATH))
// 			throw new Exception("Could not initialize POS tagger.");
// 
// 		// phrase chunker
// 		if (!createChunker(CHUNKER_PATH))
// 			throw new Exception("Could not initialize phrase chunker.");
// 
// 		initialized = true;
// 	}
// }
// 
// Path: src/main/java/cz/brmlab/brmson/core/provider/netagger/NETaggerWrapper.java
// public final class NETaggerWrapper extends NETagger {
// 	/* These data files can be download at http://pasky.or.cz/dev/brmson/res-netagger.zip */
// 
// 	private static final String NER_LIST_PATH = "res/ephyra/nlp/netagger/lists/";
// 	private static final String NER_REGEX_PATH = "res/ephyra/nlp/netagger/patterns.lst";
// 	private static final String NER_STANFORD_PATH = "res/ephyra/nlp/netagger/stanford/ner-eng-ie.crf-3-all2006-distsim.ser.gz";
// 
// 
// 	private static boolean initialized = false;
// 
// 	public static void initialize() throws Exception {
// 		if (initialized)
// 			return;
// 
// 		loadListTaggers(NER_LIST_PATH);
// 		loadRegExTaggers(NER_REGEX_PATH);
// 		if (!StanfordNeTagger.init(NER_STANFORD_PATH))
// 			throw new Exception("Could not initialize NE tagger.");
// 
// 		initialized = true;
// 	}
// }


// Path: src/main/java/cz/brmlab/brmson/blanqa/analysis/NEExtractor.java
import java.util.ArrayList;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import org.oaqa.model.SearchResult;
import cz.brmlab.brmson.blanqa.framework.data.NamedEntity;
import cz.brmlab.brmson.blanqa.framework.data.Sentence;
import cz.brmlab.brmson.core.provider.opennlp.OpenNLPWrapper;
import cz.brmlab.brmson.core.provider.netagger.NETaggerWrapper;

					String NEtok = recognizedNEs[i][j];
					String NEtext = OpenNLPWrapper.untokenize(NEtok, s.getText());
					NEtext = NEtext.trim();
					if (NEtext.length() == 0) // ignore empty NEs
						continue;

					NamedEntity NE = new NamedEntity(NEtext);
					NE.setScore(1);
					// TODO: Additional context-based NE scoring

					System.err.println("NEtok " + NEtok + " NE " + NE.getText()
							+ " score " + NE.getScore()
							+ " (sencence " + s.getText() + " score " + s.getScore() + ")");

					if (NEdedup.get(i).contains(NEtext))
						continue;
					NEdedup.get(i).add(NEtext);
					NEs.get(i).add(NE);
				}
				i++;
			}
		}

		return NEs;
	}


	/**
	 * Kick-off, initializing static classes we are dependent on.
	 */
	public static void initialize() throws Exception {