1 
2 package org.tartarus.snowball;
3 
4 import java.lang.reflect.Method;
5 import java.io.BufferedReader;
6 import java.io.BufferedWriter;
7 import java.io.FileInputStream;
8 import java.io.FileOutputStream;
9 import java.io.InputStream;
10 import java.io.InputStreamReader;
11 import java.io.OutputStream;
12 import java.io.OutputStreamWriter;
13 import java.io.Reader;
14 import java.io.Writer;
15 import java.nio.charset.StandardCharsets;
16 
17 public class TestApp {
usage()18     private static void usage()
19     {
20         System.err.println("Usage: TestApp <algorithm> [<input file>] [-o <output file>]");
21     }
22 
main(String [] args)23     public static void main(String [] args) throws Throwable {
24 	if (args.length < 2) {
25             usage();
26             return;
27         }
28 
29 	Class stemClass = Class.forName("org.tartarus.snowball.ext." +
30 					args[0] + "Stemmer");
31         SnowballStemmer stemmer = (SnowballStemmer) stemClass.newInstance();
32 
33 	int arg = 1;
34 
35 	InputStream instream;
36 	if (args.length > arg && !args[arg].equals("-o")) {
37 	    instream = new FileInputStream(args[arg++]);
38 	} else {
39 	    instream = System.in;
40 	}
41 
42         OutputStream outstream;
43 	if (args.length > arg) {
44             if (args.length != arg + 2 || !args[arg].equals("-o")) {
45                 usage();
46                 return;
47             }
48 	    outstream = new FileOutputStream(args[arg + 1]);
49 	} else {
50 	    outstream = System.out;
51 	}
52 
53 	Reader reader = new InputStreamReader(instream, StandardCharsets.UTF_8);
54 	reader = new BufferedReader(reader);
55 
56 	Writer output = new OutputStreamWriter(outstream, StandardCharsets.UTF_8);
57 	output = new BufferedWriter(output);
58 
59 	StringBuffer input = new StringBuffer();
60 	int character;
61 	while ((character = reader.read()) != -1) {
62 	    char ch = (char) character;
63 	    if (Character.isWhitespace(ch)) {
64 		stemmer.setCurrent(input.toString());
65 		stemmer.stem();
66 		output.write(stemmer.getCurrent());
67 		output.write('\n');
68 		input.delete(0, input.length());
69 	    } else {
70 		input.append(ch < 127 ? Character.toLowerCase(ch) : ch);
71 	    }
72 	}
73 	output.flush();
74     }
75 }
76