import java.util.*;
import java.io.*;
import java.net.*;

/**
 * Copyright (c) 2005 Matthew William Coan.  All rights reserved.
 * 
 * CLAWSTagger - tag text using the free WWW version of CLAWS. 
 * 
 * @author Matthew W. Coan (Tue Jul 12 15:59:12 EDT 2005)
 */
public class CLAWSTagger {
	private Map _tagMap = new TreeMap();
	private boolean _doMapping = false;

	public void setDoMapping(boolean value) { _doMapping = value; }

	public CLAWSTagger()
	{
		_tagMap.put("!", "!");
		_tagMap.put("\"", "\"");
		_tagMap.put("(", "(");
		_tagMap.put(")", ")");
		_tagMap.put(",", ",");
		_tagMap.put("-", "-");
		_tagMap.put(".", ".");
		_tagMap.put(":", ":");
		_tagMap.put(";", ";");
		_tagMap.put("?", "?");
		_tagMap.put("AJ0", "ADJ");
		_tagMap.put("AJC", "ADJ");
		_tagMap.put("AJS", "ADJ");
		_tagMap.put("AT0", "DT");
		_tagMap.put("AV0", "ADV");
		_tagMap.put("AVP", "ADV");
		_tagMap.put("AVQ", "ADV");
		_tagMap.put("CJC", "CON");
		_tagMap.put("CJS", "ADV");
		_tagMap.put("CJT", "CON");
		_tagMap.put("CRD", "NN");
		_tagMap.put("DPS", "NNP");
		// DT0 might be something else other then NNP
		_tagMap.put("DT0", "DT");
		_tagMap.put("DTQ", "NNP");
		_tagMap.put("ITJ", "INT");
		_tagMap.put("NN0", "NN");
		_tagMap.put("NN1", "NN");
		_tagMap.put("NN2", "NN");
		_tagMap.put("NP0", "NN");
		_tagMap.put("PNI", "NN");
		_tagMap.put("PNP", "NNP");
		_tagMap.put("PNQ", "NNP");
		_tagMap.put("PNX", "NN");
		_tagMap.put("POS", "NNP");
		_tagMap.put("PRF", "PREP");
		_tagMap.put("PRP", "PREP");
		_tagMap.put("TO0", "PREP");
		_tagMap.put("TO0", "PREP");
		_tagMap.put("VBB", "VB");
		_tagMap.put("VBD", "VB");
		_tagMap.put("VBG", "VB");
		_tagMap.put("VBI", "VB");
		_tagMap.put("VBN", "VB");
		_tagMap.put("VBZ", "VB");
		_tagMap.put("VDB", "VB");
		_tagMap.put("VDD", "VB");
		_tagMap.put("VDG", "VB");
		_tagMap.put("VDI", "VB");
		_tagMap.put("VDN", "VB");
		_tagMap.put("VDZ", "VB");
		_tagMap.put("VHB", "VB");
		_tagMap.put("VHD", "VB");
		_tagMap.put("VHG", "VB");
		_tagMap.put("VHI", "VB");
		_tagMap.put("VHN", "VB");
		_tagMap.put("VHZ", "VB");
		_tagMap.put("VM0", "VB");
		_tagMap.put("VVB", "VB");
		_tagMap.put("VVD", "VB");
		_tagMap.put("VVG", "VB");
		_tagMap.put("VVI", "VB");
		_tagMap.put("VVN", "VB");
		_tagMap.put("VVZ", "VB");
		_tagMap.put("XX0", "NOT");
		_tagMap.put("EX0", "NN");
		_tagMap.put("NULL", "NN");
		_tagMap.put("ORD", "NN");
		_tagMap.put("PUL", "PUN");
		_tagMap.put("PUN", "PUN");
		_tagMap.put("PUQ", "PUN");
		_tagMap.put("ZZ0", "NN");

		/*
				PUL  punctuation - left bracket (i.e. ( or [ ) 
				PUN  punctuation - general mark (i.e. . ! , : ; - ? ... ) 
				PUQ  punctuation - quotation mark (i.e. ` ' " ) 
				PUR  punctuation - right bracket (i.e. ) or ] ) 
				ZZ0  alphabetical symbol (e.g. A, B, c, d) 
		*/
	}

	public String tag(String words)
		throws Exception
	{
		StringTokenizer stok = new StringTokenizer(words, " \r\n\t");
		String word;
		List w = new LinkedList();
		List temp;
		while (stok.hasMoreTokens())
		{
			temp = new LinkedList();
			temp.add(stok.nextToken());
			w.add(temp);
		}

		List ret = tag(w);
		StringBuffer sb = new StringBuffer();
		List l;
		for (int i = 0; i < ret.size(); i++)
		{
			l = (List)ret.get(i);
			/*
			if (l.get(1).equals("PUN"))
			{
				l.set(1, l.get(0));
			}
			else
			{*/
				sb.append(l.get(0) + "/" + l.get(1) + " ");
			/*}*/
		}

		return sb.toString();
	}

    public List tag(List words)
    throws Exception {
       StringBuffer buf = new StringBuffer();

       for(int i = 0; i < words.size(); i++) {
          if(buf.length() > 0)
             buf.append(" ");

          buf.append((String)((List)words.get(i)).get(0));
       }

       DataOutputStream printout;
       DataInputStream input;

       Socket sock = new Socket("www.comp.lancs.ac.uk", 80);
       printout = new DataOutputStream(sock.getOutputStream());
       printout.writeBytes("POST "
+"/cgi-bin/computing/users/paul/ucrel/claws2.pl"
+" HTTP/1.0\r\n");

       StringBuffer buf2 = new StringBuffer();
       buf2.append("---------------------------7d562289207f8\r\n");
       buf2.append("content-disposition: form-data; "
+"name=\"email\"\r\n\r\n");
       buf2.append("matthewcoan@hotmail.com\r\n");
       buf2.append("---------------------------7d562289207f8\r\n");
       buf2.append("content-disposition: form-data; "+
"name=\"c5\"\r\n\r\n");
       buf2.append("c5");
       buf2.append("\r\n");
       buf2.append("---------------------------7d562289207f8\r\n");
       buf2.append("content-disposition: form-data; "+
"name=\"horiz\"\r\n\r\n");
       buf2.append("horiz");
       buf2.append("\r\n");
       buf2.append("---------------------------7d562289207f8\r\n");
       buf2.append("content-disposition: form-data; "
+"name=\"text\"\r\n\r\n");
       buf2.append(buf.toString()+"\r\n");
       buf2.append("-----------------------------7d562289207f8--\r\n");

       printout.writeBytes("Content-Length: " + buf2.length() + "\r\n");
       printout.writeBytes("conent-type: multipart/form-data, "
+"boundary=---------------------------7d562289207f8\r\n\r\n");
       printout.writeBytes(buf2.toString());
       printout.flush();

       input = new DataInputStream(sock.getInputStream());
       String str;
       boolean inTaggedText = false;
       StringBuffer taggedText = new StringBuffer();

       while((str = input.readLine()) != null) {
           if(str.toLowerCase().indexOf("</pre>") >= 0)
              inTaggedText = false;

           if(inTaggedText) 
              taggedText.append(str + " ");

           if(str.toLowerCase().indexOf("<pre>") >= 0)
              inTaggedText = true;
       }
 
       input.close();

	   List ret = new LinkedList();
       List temp;

       StringTokenizer st, sTok = new StringTokenizer(
       taggedText.toString(), " \r\n\t");
	   boolean first;

       while(sTok.hasMoreTokens()) {
          str = sTok.nextToken();

          temp = new LinkedList();
 
          st = new StringTokenizer(str, "_");

		  first = true;

          while(st.hasMoreTokens()) {
             if (!first) {
				 str = st.nextToken();
				 if (_doMapping)
				 {
					 System.err.println("MAP(" + str + ","
						 + _tagMap.get(str) + ")");
					 temp.add(_tagMap.get(str));
				 }
				 else
				 {
					 temp.add(str);
				 }
             }
             else { 
                first = false;

                temp.add(st.nextToken());
             }
          }

          ret.add(temp);
       }

       return ret;
    }

    public static void main(String args[]) 
    throws Exception {
        List words;
        List temp;
		DataInputStream in = new DataInputStream(System.in);
		String line;
		StringTokenizer stok;

		while ((line = in.readLine()) != null)
		{
			words = new LinkedList();
			stok = new StringTokenizer(line, " ");
			while(stok.hasMoreTokens())
			{
				line = stok.nextToken();
				temp = new LinkedList();
				temp.add(line);
				words.add(temp);
			}

			CLAWSTagger tagger = new CLAWSTagger();

			List ret = tagger.tag(words);

			System.err.println("RESULT=" + ret);
		}
    }
}
