package edu.stanford.nlp.tagger.maxent;
import junit.framework.TestCase;
import java.io.*;
import edu.stanford.nlp.io.IOUtils;
import edu.stanford.nlp.sequences.PlainTextDocumentReaderAndWriter.OutputStyle;
import edu.stanford.nlp.util.StringUtils;
/**
* Test that you get the same output, free of crashes or other
* nonsense, when running the MaxentTagger in single core and
* multicore modes. Doesn't check the output for correctness.
*
* @author John Bauer
*/
public class MulticoreMaxentTaggerITest extends TestCase {
private static MaxentTagger singleTagger = null;
private static MaxentTagger multiTagger = null;
private static final String taggedText = "projects/core/data/edu/stanford/nlp/tagger/sample_tagged.txt";
private static final String plainText = "projects/core/data/edu/stanford/nlp/tagger/sample_plain.txt";
private static final String xmlText = "projects/core/data/edu/stanford/nlp/tagger/sample_xml.xml";
@Override
public void setUp() throws Exception {
synchronized(MulticoreMaxentTaggerITest.class) {
if (singleTagger == null) {
singleTagger = new MaxentTagger(MaxentTagger.DEFAULT_JAR_PATH);
}
if (multiTagger == null) {
multiTagger = new MaxentTagger(MaxentTagger.DEFAULT_JAR_PATH, StringUtils.argsToProperties(new String[] {"-model", MaxentTagger.DEFAULT_JAR_PATH, "-nthreads", "4"}));
}
}
}
public void testXML() throws IOException {
BufferedInputStream is = new BufferedInputStream(new FileInputStream(xmlText));
StringWriter sout = new StringWriter();
singleTagger.tagFromXML(is, sout, "p");
String singleOutput = sout.toString();
is = new BufferedInputStream(new FileInputStream(xmlText));
sout = new StringWriter();
multiTagger.tagFromXML(is, sout, "p");
String multiOutput = sout.toString();
assertEquals(singleOutput, multiOutput);
}
public void testPlainText() throws IOException {
BufferedReader bin = IOUtils.readerFromString(plainText, "utf-8");
StringWriter sout = new StringWriter();
BufferedWriter bout = new BufferedWriter(sout);
singleTagger.runTagger(bin, bout, "", OutputStyle.SLASH_TAGS);
bout.flush();
String singleOutput = sout.toString();
bin = IOUtils.readerFromString(plainText, "utf-8");
sout = new StringWriter();
bout = new BufferedWriter(sout);
multiTagger.runTagger(bin, bout, "", OutputStyle.SLASH_TAGS);
bout.flush();
String multiOutput = sout.toString();
assertEquals(singleOutput, multiOutput);
}
public void testTagged() throws IOException {
PrintStream oldOut = System.out;
PrintStream oldErr = System.err;
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
ByteArrayOutputStream errStream = new ByteArrayOutputStream();
PrintStream outPrint = new PrintStream(outStream);
PrintStream errPrint = new PrintStream(errStream);
System.setOut(outPrint);
System.setErr(errPrint);
TestClassifier tc = new TestClassifier(singleTagger, taggedText);
outPrint.flush();
errPrint.flush();
String singleOutput = outStream.toString();
outStream = new ByteArrayOutputStream();
errStream = new ByteArrayOutputStream();
outPrint = new PrintStream(outStream);
errPrint = new PrintStream(errStream);
System.setOut(outPrint);
System.setErr(errPrint);
tc = new TestClassifier(multiTagger, taggedText);
outPrint.flush();
errPrint.flush();
String multiOutput = outStream.toString();
assertEquals(singleOutput, multiOutput);
System.setOut(oldOut);
System.setErr(oldErr);
}
}