/*
* File: SimpleStatisticalSpellingCorrectorTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright February 22, 2010, Sandia Corporation.
* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
* license for use of this work by or on behalf of the U.S. Government. Export
* of this program may require a license from the United States Government.
* See CopyrightHistory.txt for complete details.
*
*/
package gov.sandia.cognition.text.spelling;
import gov.sandia.cognition.statistics.distribution.DefaultDataDistribution;
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit tests for class SimpleStatisticalSpellingCorrector.
*
* @author Justin Basilico
* @since 3.0
*/
public class SimpleStatisticalSpellingCorrectorTest
{
/**
* Creates a new test.
*/
public SimpleStatisticalSpellingCorrectorTest()
{
}
/**
* Test of constructors of class SimpleStatisticalSpellingCorrector.
*/
@Test
public void testConstructors()
{
char[] alphabet = SimpleStatisticalSpellingCorrector.createDefaultAlphabet();
SimpleStatisticalSpellingCorrector instance = new SimpleStatisticalSpellingCorrector();
assertNotNull(instance.getWordCounts());
assertEquals(0, instance.getWordCounts().getTotal(),0.0);
assertArrayEquals(alphabet, instance.getAlphabet());
alphabet = new char[] { 'a', 'b', 'c' };
instance = new SimpleStatisticalSpellingCorrector(alphabet);
assertNotNull(instance.getWordCounts());
assertEquals(0, instance.getWordCounts().getTotal(),0.0);
assertSame(alphabet, instance.getAlphabet());
DefaultDataDistribution<String> wordCounts = new DefaultDataDistribution<String>();
wordCounts.increment("awesome");
instance = new SimpleStatisticalSpellingCorrector(wordCounts, alphabet);
assertSame(wordCounts, instance.getWordCounts());
assertSame(alphabet, instance.getAlphabet());
}
/**
* Test of createDefaultAlphabet method, of class SimpleStatisticalSpellingCorrector.
*/
@Test
public void testCreateDefaultAlphabet()
{
char[] result = SimpleStatisticalSpellingCorrector.createDefaultAlphabet();
assertNotSame(result, SimpleStatisticalSpellingCorrector.createDefaultAlphabet());
assertEquals(26, result.length);
final String alphabet = "abcdefghijklmnopqrstuvwxyz";
for (int i = 0; i < alphabet.length(); i++)
{
assertEquals(alphabet.charAt(i), result[i]);
}
}
/**
* Test of add method, of class SimpleStatisticalSpellingCorrector.
*/
@Test
public void testAdd()
{
SimpleStatisticalSpellingCorrector instance =
new SimpleStatisticalSpellingCorrector();
instance.add("a");
assertEquals(1, instance.getWordCounts().get("a"),0.0);
instance.add("b", 4);
assertEquals(4, instance.getWordCounts().get("b"),0.0);
instance.add("b", 7);
assertEquals(11, instance.getWordCounts().get("b"),0.0);
}
/**
* Test of evaluate method, of class SimpleStatisticalSpellingCorrector.
*/
@Test
public void testEvaluate()
{
SimpleStatisticalSpellingCorrector instance =
new SimpleStatisticalSpellingCorrector();
instance.add("spelling", 10);
instance.add("spoiling", 9);
instance.add("corrected", 2);
instance.add("access");
instance.add("a");
assertEquals("spelling", instance.evaluate("spelling"));
assertEquals("spelling", instance.evaluate("speling"));
assertEquals("corrected", instance.evaluate("corrected"));
assertEquals("corrected", instance.evaluate("correcter"));
assertEquals("corrected", instance.evaluate("korrecter"));
assertEquals("access", instance.evaluate("access"));
assertEquals("access", instance.evaluate("acess"));
assertEquals("access", instance.evaluate("acesss"));
// Tests handling unknown words with no known edits:
assertEquals("wxyz", instance.evaluate("wxyz"));
assertEquals("wxyz", instance.evaluate("wXyZ"));
// Boundry cases.
assertEquals("", instance.evaluate(""));
assertEquals(null, instance.evaluate(null));
}
/**
* Test of findBest method, of class SimpleStatisticalSpellingCorrector.
*/
@Test
public void testFindBest()
{
List<String> words = Arrays.asList(new String[] { "low", "high", "none" });
String defaultBestWord = "default";
SimpleStatisticalSpellingCorrector instance =
new SimpleStatisticalSpellingCorrector();
assertEquals(defaultBestWord, instance.findBest(words, defaultBestWord));
instance.add("low", 2);
assertEquals("low", instance.findBest(words, defaultBestWord));
instance.add("high", 5);
assertEquals("high", instance.findBest(words, defaultBestWord));
}
/**
* Test of getWordCounts method, of class SimpleStatisticalSpellingCorrector.
*/
@Test
public void testGetWordCounts()
{
this.testSetWordCounts();
}
/**
* Test of setWordCounts method, of class SimpleStatisticalSpellingCorrector.
*/
@Test
public void testSetWordCounts()
{
SimpleStatisticalSpellingCorrector instance = new SimpleStatisticalSpellingCorrector();
assertNotNull(instance.getWordCounts());
assertEquals(0, instance.getWordCounts().getTotal(),0.0);
DefaultDataDistribution<String> wordCounts = new DefaultDataDistribution<String>();
wordCounts.increment("awesome");
instance.setWordCounts(wordCounts);
assertSame(wordCounts, instance.getWordCounts());
wordCounts = new DefaultDataDistribution<String>();
instance.setWordCounts(wordCounts);
assertSame(wordCounts, instance.getWordCounts());
wordCounts = null;
instance.setWordCounts(wordCounts);
assertSame(wordCounts, instance.getWordCounts());
wordCounts = new DefaultDataDistribution<String>();
instance.setWordCounts(wordCounts);
assertSame(wordCounts, instance.getWordCounts());
}
/**
* Test of getAlphabet method, of class SimpleStatisticalSpellingCorrector.
*/
@Test
public void testGetAlphabet()
{
this.testSetAlphabet();
}
/**
* Test of setAlphabet method, of class SimpleStatisticalSpellingCorrector.
*/
@Test
public void testSetAlphabet()
{
char[] alphabet = SimpleStatisticalSpellingCorrector.createDefaultAlphabet();
SimpleStatisticalSpellingCorrector instance = new SimpleStatisticalSpellingCorrector();
assertArrayEquals(alphabet, instance.getAlphabet());
alphabet = new char[] { 'a', 'b', 'c' };
instance.setAlphabet(alphabet);
assertSame(alphabet, instance.getAlphabet());
alphabet = new char[0];
instance.setAlphabet(alphabet);
assertSame(alphabet, instance.getAlphabet());
alphabet = null;
instance.setAlphabet(alphabet);
assertSame(alphabet, instance.getAlphabet());
alphabet = new char[] { '1', 'z', '@' };
instance.setAlphabet(alphabet);
assertSame(alphabet, instance.getAlphabet());
}
}