package ir.ac.iust.nlp.dependencyparser.converter; import ir.ac.iust.nlp.dependencyparser.enumeration.Format; import java.io.*; /** * * @author Mojtaba Khallash */ public class RunnableConverter implements Runnable { ConverterPanel target; PrintStream out = System.out; String inputPath; Format sourceFormat; String mappedFile; String outputPath; Format targetFormat; public RunnableConverter(ConverterPanel target, PrintStream out, String inputPath, Format sourceFormat, String outputPath, Format targetFormat, String mapping) { this.target = target; this.out = out; this.inputPath = inputPath; this.sourceFormat = sourceFormat; this.outputPath = outputPath; this.targetFormat = targetFormat; this.mappedFile = mapping; } @Override public void run() { try { out.println("Start Converting " + sourceFormat.toString() + " to " + targetFormat.toString()); switch(sourceFormat) { case CONLL: switch (targetFormat) { case MST: runScript("conll2mst.py"); break; default: out.println("This convert not support."); break; } break; case MST: switch (targetFormat) { case CONLL: runScript("mst2conll.py"); break; default: out.println("This convert not support."); break; } break; case Tiger: switch (targetFormat) { case Malt_XML: runMaltConverter("tiger2malt"); break; case Malt_TAB: runMaltConverter("tiger2tab"); break; default: out.println("This convert not support."); break; } break; case Malt_XML: switch (targetFormat) { case Tiger: runMaltConverter("malt2tiger"); break; case Malt_TAB: runMaltConverter("malt2tab"); break; case Malt_XML: runMaltConverter("malt2malt"); break; default: out.println("This convert not support."); break; } break; case Malt_TAB: switch (targetFormat) { case Malt_XML: runMaltConverter("tab2malt"); break; case Tiger: runMaltConverter("tab2tiger"); break; case Malt_TAB: runMaltConverter("tab2tab"); break; default: out.println("This convert not support."); break; } break; default: out.println("This convert not support."); break; } out.println("\nFinished."); } finally { if (target != null) { target.threadFinished(); } } } private void runScript(String converterName) { boolean converterExist = false; try { File val = new File(converterName); converterExist = val.exists(); if (!converterExist) { BufferedWriter bwValidateFormat; try { bwValidateFormat = new BufferedWriter(new FileWriter(converterName)); bwValidateFormat.write(ConverterGenerator.generateConverter(converterName)); bwValidateFormat.close(); } catch (IOException e) {} } Process pro = Runtime.getRuntime().exec( "java -Dfile.encoding=UTF8 -jar lib" + File.separator + "jython.jar " + converterName + " " + inputPath); BufferedReader stdInput = new BufferedReader(new InputStreamReader( pro.getInputStream(),"UTF8")); BufferedReader stdError = new BufferedReader(new InputStreamReader( pro.getErrorStream(),"UTF8")); try (Writer writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(outputPath, true), "UTF-8"))) { String s; int i = 0; while ((s = stdInput.readLine()) != null) { if (s.length() == 0) { i++; out.print(i + " "); if (i % 21 == 0) { out.println(); } } writer.write(s + "\n"); } while ((s = stdError.readLine()) != null) { System.out.println(s); } writer.close(); } pro.destroy(); } catch(Exception ex){} finally { if (converterExist == false) { new File(converterName).delete(); } } } private void runMaltConverter(String converterName) { try { Process pro = Runtime.getRuntime().exec("java -Dfile.encoding=UTF8 -jar lib" + File.separator + "MaltConverter.jar " + converterName + " " + // conversion mappedFile + " " + // mapfile inputPath + " " + // infile outputPath); // outfile BufferedReader stdInput = new BufferedReader(new InputStreamReader( pro.getInputStream(),"UTF8")); BufferedReader stdError = new BufferedReader(new InputStreamReader( pro.getErrorStream(),"UTF8")); String s; while ((s = stdInput.readLine()) != null) { out.println(s); } while ((s = stdError.readLine()) != null) { out.println(s); } pro.destroy(); } catch(Exception ex){} } }