[Java] Snowball Stemmer

Helios co.

Lt. Commander
Registriert
März 2005
Beiträge
1.863
Hallo @all,

ich möchte (wie der Titel schon sagt) den Snowball Stemmer auf einen String anwenden.
Doch leider gibt es dafür keine API und auch keine JAVADocs, was das Ganze recht schwer gestaltet.

Meine Hauptverständnisprobleme sind:
1. wie kann ich einen Stemmer übergeben (ich möchte den germanStemmer verwenden)
2. wie kann ich den String übergeben

Beosnders dankbar wäre ich fürkondtruktive Beispiele.
thx


So viele Betrachter aber keiner hat Ahnung von Stemming?
 
Zuletzt bearbeitet:
Ok nochmal, aber anders.
Ich habe folgenden Code, der im Prinzip alles macht, was ich brauche.
Doch leider ist der mir nich so klar.

Code:
import java.lang.reflect.Method;
import java.io.Reader;
import java.io.Writer;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.OutputStream;
import java.io.FileOutputStream;

public class TestApp2 {
    private static void usage()
    {
        System.err.println("Usage: TestApp <algorithm> <input file> [-o <output file>]");
    }

    public static void main(String [] args) throws Throwable {
	if (args.length < 2) {
            usage();
            return;
        }

	Class stemClass = Class.forName("org.tartarus.snowball.ext." +
					args[0] + "Stemmer");
        SnowballStemmer stemmer = (SnowballStemmer) stemClass.newInstance();

	Reader reader;
	reader = new InputStreamReader(new FileInputStream(args[1]));
	reader = new BufferedReader(reader);

	StringBuffer input = new StringBuffer();

        OutputStream outstream;

	if (args.length > 2) {
            if (args.length >= 4 && args[2].equals("-o")) {
                outstream = new FileOutputStream(args[3]);
            } else {
                usage();
                return;
            }
	} else {
	    outstream = System.out;
	}
	Writer output = new OutputStreamWriter(outstream);
	output = new BufferedWriter(output);

	int repeat = 1;
	if (args.length > 4) {
	    repeat = Integer.parseInt(args[4]);
	}

	Object [] emptyArgs = new Object[0];
	int character;
	while ((character = reader.read()) != -1) {
	    char ch = (char) character;
	    if (Character.isWhitespace((char) ch)) {
		if (input.length() > 0) {
		    stemmer.setCurrent(input.toString());
		    for (int i = repeat; i != 0; i--) {
			stemmer.stem();
		    }
		    output.write(stemmer.getCurrent());
		    output.write('\n');
		    input.delete(0, input.length());
		}
	    } else {
		input.append(Character.toLowerCase(ch));
	    }
	}
	output.flush();
    }
}

Wenn ich das richtig verstehe, verlangt das Ding zum Starten 3 Parameter:einen Algorithmus (vermutlich der gewünschte Stemmer, eine Eingabedatei und eine Ausgabedatei).

So wie dieser Code vorliegt, kann ich ihn lediglich über eine Shell ausführen, was ich aber nicht brauche.

Ich möchte ihn also so umbauen, dass ich die gewünschten Parameter, quasi an einen Constructor übergebe.

Leider ist mir nicht klar wie ich das in diesem Fall machen kann.
Kann mir da jemand helfen?
 
Alle Fragen haben sich auch jetzt wieder von selbst gelöst.

Trotzdem vielen Danl an alle Betrachter.
 
Zurück
Oben