view software/eXist/mpdl-modules/src/de/mpg/mpiwg/berlin/mpdl/donatus/example/TestDonatus.java @ 0:408254cf2f1d

Erstellung
author Josef Willenborg <jwillenborg@mpiwg-berlin.mpg.de>
date Wed, 24 Nov 2010 17:24:23 +0100
parents
children
line wrap: on
line source

package de.mpg.mpiwg.berlin.mpdl.donatus.example;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Hashtable;

import org.apache.xmlrpc.XmlRpcException;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.client.XmlRpcClientConfigImpl;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

import java.util.Vector;

import com.sun.org.apache.xerces.internal.parsers.SAXParser;

import de.mpg.mpiwg.berlin.mpdl.donatus.xmlrpc.DonatusMorphologyDocument;
import de.mpg.mpiwg.berlin.mpdl.donatus.xmlrpc.DonatusMorphologyDocumentContentHandler;
import de.mpg.mpiwg.berlin.mpdl.donatus.xmlrpc.DonatusWtagContainer;
import de.mpg.mpiwg.berlin.mpdl.donatus.xmlrpc.DonatusWtagDocument;
import de.mpg.mpiwg.berlin.mpdl.donatus.xmlrpc.DonatusWtagSection;
import de.mpg.mpiwg.berlin.mpdl.donatus.xmlrpc.DonatusXmlRpcClient;

public class TestDonatus {
  private DonatusXmlRpcClient donatusXmlRpcClient= null;

  public static void main(String[] args) {
    TestDonatus testDonatus = new TestDonatus();
    // testDonatus.lineInputAnalyzer();
    DonatusMorphologyDocument result = testDonatus.analyzeMonte037();
    
  }

  public TestDonatus() {
    init();
  }
  
  private void init() {
    donatusXmlRpcClient = new DonatusXmlRpcClient();
  }
  
  private DonatusMorphologyDocument analyze(DonatusWtagDocument doc) {
    DonatusMorphologyDocument resultDoc = donatusXmlRpcClient.analyze(doc);
    return resultDoc;
  }
      
  private DonatusMorphologyDocument analyzeMonte037() {
    String locator = "http://archimedes/037.xml";
    int docId = 4711;
    String languageIt = "it";
    ArrayList<String> s1It = new ArrayList<String>();
    s1It.add("LE"); 
    s1It.add("MECHANICHE");
    s1It.add("DELL");
    s1It.add("ILLVSTRISS");
    s1It.add("SIG");
    s1It.add("GVIDO");
    s1It.add("VBALDO");
    s1It.add("DE");
    s1It.add("MARCHESI");
    s1It.add("DEL");
    s1It.add("MONTE");
    s1It.add("LE");
    ArrayList<String> s2It = new ArrayList<String>();
    s2It.add("TRADOTTE"); 
    s2It.add("IN"); 
    s2It.add("VOLGARE"); 
    s2It.add("DAL"); 
    s2It.add("SIG"); 
    s2It.add("FILIPPO"); 
    s2It.add("PIGAFETTA"); 
    s2It.add("Nellequali"); 
    s2It.add("&#x17F;i"); 
    s2It.add("contiene"); 
    s2It.add("la");
    DonatusWtagContainer sIt1 = new DonatusWtagContainer("s", "1", s1It);
    DonatusWtagContainer sIt2 = new DonatusWtagContainer("s", "2", s2It);
    DonatusWtagSection sectionIt = new DonatusWtagSection(languageIt);
    sectionIt.addContainer(sIt1);
    sectionIt.addContainer(sIt2);
    String languageLa = "la";
    ArrayList<String> s1La = new ArrayList<String>();
    s1La.add("GVIDIVBALDI"); 
    s1La.add("E"); 
    s1La.add("MARCHIONIBVS"); 
    s1La.add("MONTIS"); 
    s1La.add("MECHANICORVM"); 
    s1La.add("LIBER"); 
    DonatusWtagContainer sLa1 = new DonatusWtagContainer("s", "1", s1La);
    DonatusWtagSection sectionLa = new DonatusWtagSection(languageLa);
    sectionLa.addContainer(sLa1);
    DonatusWtagDocument donatusWtagDocument = new DonatusWtagDocument(locator);
    donatusWtagDocument.addSection(sectionIt);
    donatusWtagDocument.addSection(sectionLa);    
    DonatusMorphologyDocument donatusXmlMorphologyDoc = analyze(donatusWtagDocument);
    return donatusXmlMorphologyDoc;
  }

  private String analyze(String locator, String language, String documentString) {
    String resultDoc = donatusXmlRpcClient.analyze(locator, language, documentString);
    return resultDoc;
  }
      
  private String askDonatus(String term) throws XmlRpcException, IOException {
    String WTAG_START="<wtag locator=\"xxx\"><section lang=\"de\"><s id=\"3.2\"><w>";
    String WTAG_END="</w></s></section></wtag>";
    ParseDonatusResult ch = new ParseDonatusResult();
    try {
      URL url = new URL("http://archimedes.fas.harvard.edu/cgi-bin/donatus-rpc");

      XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();
      config.setServerURL(url);
      XmlRpcClient xmlClient = new XmlRpcClient();
      xmlClient.setConfig(config);

      String wtag = WTAG_START + term + WTAG_END;
      Vector params = new Vector();
      params.add(wtag.getBytes("UTF8"));
      Hashtable donatusReturn = (Hashtable) xmlClient.execute("donatus.analyze", params);
      Object s = donatusReturn.get("morphData");
      String st = new String((byte[])s);
      XMLReader parser = new SAXParser();
      parser.setContentHandler(ch);
      Reader reader = new StringReader(st);
      InputSource input = new InputSource(reader);
      parser.parse(input);
    } catch (SAXException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    } catch (MalformedURLException e) {
      e.printStackTrace();
    }
    return ch.value;
  }
      
  private void lineInputAnalyzer() {
    BufferedReader in = null;
    try {
      in = new BufferedReader(new InputStreamReader(System.in, "UTF8"));
    } catch (UnsupportedEncodingException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
    while(true) {
      // prompt the user
      System.out.println("Enter query: ");
      String line = null;
      try {
        line = in.readLine();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
      if (line == null || line.length() == -1)
        break;
      line = line.trim();
      if (line.length() == 0)
        break;
      try {
        String donatusResponse = askDonatus(line);
        System.out.println(donatusResponse);
      } catch (XmlRpcException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
}