import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;

import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.ling.TaggedWord;
import edu.stanford.nlp.parser.lexparser.LexicalizedParser;
import edu.stanford.nlp.process.CoreLabelTokenFactory;
import edu.stanford.nlp.process.PTBTokenizer;
import edu.stanford.nlp.process.TokenizerFactory;
import edu.stanford.nlp.trees.GrammaticalStructure;
import edu.stanford.nlp.trees.GrammaticalStructureFactory;
import edu.stanford.nlp.trees.PennTreebankLanguagePack;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.TreebankLanguagePack;
import edu.stanford.nlp.trees.TypedDependency;

class Tagger {
	public static void main(String[] args) throws Exception {
		
		File file = new File(System.getProperty("user.dir") + "/Processed/ProcessedALL.txt");
		FileReader fr = new FileReader(file);
		BufferedReader br = new BufferedReader(fr);
		FileWriter wr = new FileWriter("output (tags of ALL reqs).txt");

		String text = "";
		int i = 0;
		while ((text = br.readLine()) != null) {
			i++;
			System.out.println(i);

			TreebankLanguagePack tlp = new PennTreebankLanguagePack();
			GrammaticalStructureFactory gsf = tlp.grammaticalStructureFactory();
			LexicalizedParser lp = LexicalizedParser.loadModel("edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz");
			lp.setOptionFlags(new String[] { "-maxLength", "500", "-retainTmpSubcategories" });
			TokenizerFactory<CoreLabel> tokenizerFactory = PTBTokenizer.factory(new CoreLabelTokenFactory(), "");
			List<CoreLabel> wordList = tokenizerFactory.getTokenizer(new StringReader(text)).tokenize();
			Tree tree = lp.apply(wordList);
			GrammaticalStructure gs = gsf.newGrammaticalStructure(tree);
			Collection<TypedDependency> tdl = gs.typedDependenciesCCprocessed(true);

			ArrayList<TaggedWord> words = tree.taggedYield();
			

			// Tagging der einzelnen Wörter
			for (TaggedWord taggedWord : words) {
				// wr.write(taggedWord.word().toLowerCase() + "," +
				// taggedWord.tag() + " ");
				wr.write(taggedWord.tag() + " ");
				wr.flush();
			}
			wr.write("\n");
			wr.flush();
		}
		
		br.close();
		wr.close();
		// Main.writeImage(tree,tdl, "image.png",3);
	}
}