package iitb.cfilt.cpost.ngi;

import iitb.cfilt.cpost.dmstemmer.*;
import java.util.Vector;

public class NounGroupIdentifier3 
{
	Vector<NgiResult> ngioutput;
	int ngiState;
		
	public NounGroupIdentifier3()
	{
		ngioutput = new Vector<NgiResult>();
		ngiState = 0; // Signifies that noun group has not begun
	}
	
	public void nounGroupIdentify(Vector<MAResult> maresultv, Vector<String> assignedtags)
	{
		for(int i=0;i<maresultv.size();i++)
			ngioutput.add(new NgiResult(maresultv.get(i),assignedtags.get(i)));
		
		ngiState = 0;
		int i = maresultv.size()-1;
		while((i>=0) && ((ngiState==0) || (ngiState==7)))
		{
			
			if(ngioutput.get(i).getset()==4)
			{
				ngiState = 1; // Signifies that oblique noun group has started 
			}
			else if(ngioutput.get(i).getset()==3)
			{
				ngiState = 2; // Signigies that direct noun group has started
			}
			else if(ngioutput.get(i).getassignedTag().equals("DEM"))
			{
				ngioutput.get(i).setfinalTag("PRP");
				ngioutput.get(i).setchanged(true);
				ngiState = 2;
			}
			
			if(ngiState==1)
			{
				i--;
				if(ngioutput.get(i).getset()!=3)
				{
					if(ngioutput.get(i).getpostags().contains("noun"))
					{
						ngioutput.get(i).setfinalTag("NN");
						ngioutput.get(i).setchanged(true);
					}
					else
					{
						Vector<String> pt = ngioutput.get(i+1).getpostags();
						if(pt.contains("pnoun"))
						{
							ngioutput.get(i+1).setfinalTag("NNP");
							ngioutput.get(i+1).setchanged(true);
						}
						else if(pt.contains("noun"))
						{
							ngioutput.get(i+1).setfinalTag("NN");
							ngioutput.get(i+1).setchanged(true);
						}
						else if(pt.contains("adjective"))
						{
							ngioutput.get(i+1).setfinalTag("JJ");
							ngioutput.get(i+1).setchanged(true);
						}
					}
				}
			}
				
		}
	}
	
	public void printfinaltags()
	{
		for (int i=0;i<ngioutput.size();i++)
		{
			NgiResult ngiresult = ngioutput.get(i);
			ngiresult.println();
		}
			
	}
}
