Link to code: NGramTester.java
import java.util.*;
import java.io.*;
/**
* CompSci 100e Spring 2011: Tests random text generator
*
* @author Robert C. Duvall
*/
public class NGramTester
{
private NGram myGenerator;
private String myText;
public NGramTester (Scanner input)
{
myGenerator = new NGram();
myText = myGenerator.readFile(input);
}
/**
* Test boundary cases for generating a random string
*/
public void testRandomSubstring (String s)
{
for (int k = 0; k < s.length(); k++)
{
System.out.println(myGenerator.getRandomSubstring(s, k + 1));
}
}
public String getText ()
{
return myText;
}
/**
* Test follow string is reasonable
*/
public void testFollowString (String[] prefixes)
{
for (int k = 0; k < prefixes.length; k++)
{
System.out.println(
myGenerator.getFollowingCharacters(getText(), prefixes[k]));
}
}
public void testNGram (int min, int max)
{
final int RANDOM_TEXT_LENGTH = 256;
// generate random text to varying degrees of accuracy
for (int k = min; k <= max; k++)
{
System.out.println(k + "-gram");
System.out.println(myGenerator.makeNGram(getText(), k, RANDOM_TEXT_LENGTH));
System.out.println("--------");
}
}
/**
* The start of the program.
*/
public static void main (String[] args)
{
// a simple string to test
final String SIMPLE = "abcdefghijklmnopqrstuvwxyz";
// these two values should probably change together
final String DATA_FILE = "data/lorax.txt";
final String[] PREFIXES = { "Lor", "th", "the", " ", ",", "Gr" };
// test accuracy of NGram model
final int MIN_NUM_LETTERS = 2;
final int MAX_NUM_LETTERS = 10;
// test it
try
{
NGramTester tester = new NGramTester(new Scanner(new File(DATA_FILE)));
// test the model
tester.testRandomSubstring(SIMPLE);
System.out.println("--------");
tester.testFollowString(PREFIXES);
System.out.println("--------");
tester.testNGram(MIN_NUM_LETTERS, MAX_NUM_LETTERS);
}
catch (IOException e)
{
System.out.println("Error reading file " + DATA_FILE);
System.out.println(e);
}
}
}