Statistics
| Revision:

root / tmp / org.txm.groovy.core / src / groovy / org / txm / scripts / nlp / melt / SxPipe.groovy @ 1000

History | View | Annotate | Download (3.5 kB)

1 321 mdecorde
2 1000 mdecorde
package org.txm.scripts.tal.melt
3 321 mdecorde
4 321 mdecorde
import java.io.File;
5 321 mdecorde
import java.io.BufferedReader;
6 321 mdecorde
import java.io.IOException;
7 321 mdecorde
import java.io.InputStreamReader;
8 321 mdecorde
9 321 mdecorde
import org.txm.tal.Tagger
10 321 mdecorde
import org.txm.tal.SlashFile2TTRez
11 321 mdecorde
import org.txm.utils.StreamHog;
12 321 mdecorde
13 321 mdecorde
class SxPipe {
14 321 mdecorde
15 321 mdecorde
        Process process = null;
16 321 mdecorde
        InputStream meltis
17 321 mdecorde
        OutputStream meltos
18 321 mdecorde
        boolean debug = false
19 321 mdecorde
20 321 mdecorde
        BufferedReader reader
21 321 mdecorde
        StringBuffer buffer = new StringBuffer();
22 321 mdecorde
23 321 mdecorde
        public SxPipe() {
24 321 mdecorde
        }
25 321 mdecorde
26 321 mdecorde
        public boolean start() {
27 321 mdecorde
                // Call Melt
28 321 mdecorde
                def args = [];
29 321 mdecorde
                args << "MElt"
30 321 mdecorde
                args << "-t"
31 321 mdecorde
                args << "-C"
32 321 mdecorde
                ProcessBuilder pb = new ProcessBuilder(args);
33 321 mdecorde
                try {
34 321 mdecorde
                        process = pb.start();
35 321 mdecorde
                } catch (IOException e) {
36 321 mdecorde
                        System.err.println(e);
37 321 mdecorde
                        return false
38 321 mdecorde
                }
39 321 mdecorde
                meltis = process.getInputStream();
40 321 mdecorde
                meltos = process.getOutputStream();
41 321 mdecorde
42 321 mdecorde
                new StreamHog(process.getErrorStream(), debug) // read Error Stream
43 321 mdecorde
                //new StreamHog(process.getInputStream(), true) // read Error Stream
44 321 mdecorde
                reader = new BufferedReader(new InputStreamReader(meltis));
45 321 mdecorde
                return true;
46 321 mdecorde
        }
47 321 mdecorde
48 321 mdecorde
        public boolean processText(String text) {
49 321 mdecorde
                if (debug) println "Send text: $text"
50 321 mdecorde
                process << text
51 321 mdecorde
                process << "\n"
52 321 mdecorde
                meltos.flush()
53 321 mdecorde
                return true;
54 321 mdecorde
        }
55 321 mdecorde
56 321 mdecorde
        public def readStream() {
57 321 mdecorde
                if (debug) println "reading lines..."
58 321 mdecorde
59 321 mdecorde
                try {
60 321 mdecorde
                        String line = null;
61 321 mdecorde
                        while ((line = reader.readLine()) != null) {
62 321 mdecorde
                                buffer << line
63 321 mdecorde
                                buffer << "\n"
64 321 mdecorde
                        }
65 321 mdecorde
                } catch (IOException e) {
66 321 mdecorde
                        org.txm.utils.logger.Log.printStackTrace(e);
67 321 mdecorde
                }
68 321 mdecorde
69 321 mdecorde
                return "end"
70 321 mdecorde
        }
71 321 mdecorde
72 321 mdecorde
        public boolean stop() {
73 321 mdecorde
                meltos.close()
74 321 mdecorde
                readStream()
75 321 mdecorde
76 321 mdecorde
                int e = 0;
77 321 mdecorde
                try {
78 321 mdecorde
                        e = process.waitFor();
79 321 mdecorde
                } catch (Exception err) {        }
80 321 mdecorde
81 321 mdecorde
                if (e != 0) {
82 321 mdecorde
                        System.err .println("Process exited abnormally with code " + e )
83 321 mdecorde
                }
84 321 mdecorde
        }
85 321 mdecorde
86 321 mdecorde
        public def getResult() {
87 321 mdecorde
                return buffer.toString()
88 321 mdecorde
                //return SlashFile2TTRez.processString(buffer.toString())
89 321 mdecorde
        }
90 321 mdecorde
91 321 mdecorde
        public void printResult() {
92 321 mdecorde
                def segs = getResult().split("\n")// \\{\\\$\\\$\\\$\\\$\\} \\\$\\\$\\\$\\\$
93 321 mdecorde
94 321 mdecorde
                int i = 0;
95 321 mdecorde
                for (def seg : segs) {
96 321 mdecorde
                        def tokens = []
97 321 mdecorde
                        for(def str :  seg.replaceAll("\\{", "\n{").tokenize("\n")) {
98 321 mdecorde
                                if (str.startsWith("{"))
99 321 mdecorde
                                        println str.substring(1, str.indexOf("}")).replace("_ACC_O", "{").replace("_ACC_F", "}")
100 321 mdecorde
                        }
101 321 mdecorde
                }
102 321 mdecorde
        }
103 321 mdecorde
104 321 mdecorde
        public def getResultTokens() {
105 321 mdecorde
                def segs = getResult().split("\n")
106 321 mdecorde
                def tokens = []
107 321 mdecorde
108 321 mdecorde
                int i = 0, idx = -1;
109 321 mdecorde
                for (def seg : segs) {
110 321 mdecorde
                        for(def str :  seg.replaceAll("\\{", "\n{").tokenize("\n")) {
111 321 mdecorde
                                if (str.startsWith("{")) {
112 321 mdecorde
                                        idx = str.indexOf("}")
113 321 mdecorde
                                        try{
114 321 mdecorde
                                                tokens << [str.substring(1, idx).replace("_ACC_O", "{").replace("_ACC_F", "}"),
115 321 mdecorde
                                                        str.substring(idx+1)]
116 321 mdecorde
                                        } catch(Exception e) {e.printStackTrace();println "STRING IS : '$str'"}
117 321 mdecorde
                                }
118 321 mdecorde
                        }
119 321 mdecorde
120 321 mdecorde
                }
121 321 mdecorde
                return tokens
122 321 mdecorde
        }
123 321 mdecorde
124 321 mdecorde
        public def getResultSegments() {
125 321 mdecorde
                def segs = getResult().split("\n")
126 321 mdecorde
                def segsFinal = []
127 321 mdecorde
128 321 mdecorde
                int i = 0, idx = -1;
129 321 mdecorde
                for (def seg : segs) {
130 321 mdecorde
                        def tokens = []
131 321 mdecorde
                        for(def str :  seg.replaceAll("\\{", "\n{").tokenize("\n")) {
132 321 mdecorde
                                if (str.startsWith("{")) {
133 321 mdecorde
                                        idx = str.indexOf("}")
134 321 mdecorde
                                        try{
135 321 mdecorde
                                                tokens << [str.substring(1, idx).replace("_ACC_O", "{").replace("_ACC_F", "}"),
136 321 mdecorde
                                                        str.substring(idx+1)]
137 321 mdecorde
                                        } catch(Exception e) {e.printStackTrace();println "STRING IS : '$str'"}
138 321 mdecorde
                                }
139 321 mdecorde
                        }
140 321 mdecorde
                        segsFinal << tokens
141 321 mdecorde
                }
142 321 mdecorde
                return segsFinal
143 321 mdecorde
        }
144 321 mdecorde
145 321 mdecorde
146 321 mdecorde
        public static void main(String[] args) {
147 321 mdecorde
                SxPipe melt = new SxPipe()
148 321 mdecorde
                melt.start()
149 321 mdecorde
                melt.processText("""Il y a {du} pain \$\$\$\$ c'├ętait bon. Y a-t-il assez ?
150 321 mdecorde
Un autre bout, de texte : fin.""")
151 321 mdecorde
                melt.stop()
152 321 mdecorde
153 321 mdecorde
                melt.printResult()
154 321 mdecorde
155 321 mdecorde
156 321 mdecorde
157 321 mdecorde
                //                println "\nMELT DONE\n"
158 321 mdecorde
                //                for (def r : melt.getResult()) {
159 321 mdecorde
                //                        for (def rr : r)
160 321 mdecorde
                //                                print rr+"\t"
161 321 mdecorde
                //                        println ""
162 321 mdecorde
                //                }
163 321 mdecorde
        }
164 321 mdecorde
}