/* * File: CommonTermWeighterFactoryTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry * * Copyright April 30, 2009, 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.term.vector.weighter; import gov.sandia.cognition.math.matrix.Vector; import gov.sandia.cognition.math.matrix.mtj.Vector3; import gov.sandia.cognition.text.term.vector.weighter.global.DominanceGlobalTermWeighter; import gov.sandia.cognition.text.term.vector.weighter.global.EntropyGlobalTermWeighter; import gov.sandia.cognition.text.term.vector.weighter.global.InverseDocumentFrequencyGlobalTermWeighter; import gov.sandia.cognition.text.term.vector.weighter.local.LogLocalTermWeighter; import gov.sandia.cognition.text.term.vector.weighter.local.TermFrequencyLocalTermWeighter; import gov.sandia.cognition.text.term.vector.weighter.normalize.UnitTermWeightNormalizer; import org.junit.Test; import static org.junit.Assert.*; /** * Unit tests for class CommonTermWeighterFactory. * * @author Justin Basilico * @since 3.0 */ public class CommonTermWeighterFactoryTest { /** * Creates a new test. */ public CommonTermWeighterFactoryTest() { } /** * Test of createTFWeighter method, of class CommonTermWeighterFactory. */ @Test public void testCreateTFWeighter() { CompositeLocalGlobalTermWeighter result = CommonTermWeighterFactory.createTFWeighter(); assertNotNull(result); assertTrue(result.getLocalWeighter() instanceof TermFrequencyLocalTermWeighter); assertNull(result.getGlobalWeighter()); assertNull(result.getNormalizer()); assertNotSame(result, CommonTermWeighterFactory.createTFWeighter()); // Now test the computations. double epsilon = 0.0001; Vector input = new Vector3(7.0, 0.0, 1.0); Vector expected = new Vector3(7.0 / 8.0, 0.0, 1.0 / 8.0); Vector actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); input = new Vector3(1.0, 0.0, 0.0); expected = new Vector3(1.0, 0.0, 0.0); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); input = new Vector3(0.25, 0.0, 0.75); expected = new Vector3(0.25, 0.0, 0.75); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); input = new Vector3(); expected = new Vector3(); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); } /** * Test of createTFIDFWeighter method, of class CommonTermWeighterFactory. */ @Test public void testCreateTFIDFWeighter() { CompositeLocalGlobalTermWeighter result = CommonTermWeighterFactory.createTFIDFWeighter(); assertNotNull(result); assertTrue(result.getLocalWeighter() instanceof TermFrequencyLocalTermWeighter); assertTrue(result.getGlobalWeighter() instanceof InverseDocumentFrequencyGlobalTermWeighter); assertNull(result.getNormalizer()); assertNotSame(result, CommonTermWeighterFactory.createTFIDFWeighter()); assertNotSame(result.getGlobalWeighter(), CommonTermWeighterFactory.createTFIDFWeighter().getGlobalWeighter()); // Now test the computations. result.getGlobalWeighter().add(new Vector3(3.0, 0.0, 1.0)); result.getGlobalWeighter().add(new Vector3(4.0, 0.0, 0.0)); result.getGlobalWeighter().add(new Vector3(9.0, 0.0, 1.0)); result.getGlobalWeighter().add(new Vector3(3.0, 0.0, 2.0)); double epsilon = 0.0001; Vector input = new Vector3(7.0, 0.0, 1.0); Vector expected = new Vector3(0.0, 0.0, 0.0359); Vector actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); result.getGlobalWeighter().add(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(0.1952, 0.0, 0.0638); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); result.getGlobalWeighter().remove(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(0.0, 0.0, 0.0359); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); } /** * Test of createTFIDFWeighter method, of class CommonTermWeighterFactory. */ @Test public void testCreateTFIDFWeighterWithUnitNormalization() { CompositeLocalGlobalTermWeighter result = CommonTermWeighterFactory.createTFIDFWeighterWithUnitNormalization(); assertNotNull(result); assertTrue(result.getLocalWeighter() instanceof TermFrequencyLocalTermWeighter); assertTrue(result.getGlobalWeighter() instanceof InverseDocumentFrequencyGlobalTermWeighter); assertTrue(result.getNormalizer() instanceof UnitTermWeightNormalizer); assertNotSame(result, CommonTermWeighterFactory.createTFIDFWeighterWithUnitNormalization()); assertNotSame(result.getGlobalWeighter(), CommonTermWeighterFactory.createTFIDFWeighterWithUnitNormalization().getGlobalWeighter()); // Now test the computations. result.getGlobalWeighter().add(new Vector3(3.0, 0.0, 1.0)); result.getGlobalWeighter().add(new Vector3(4.0, 0.0, 0.0)); result.getGlobalWeighter().add(new Vector3(9.0, 0.0, 1.0)); result.getGlobalWeighter().add(new Vector3(3.0, 0.0, 2.0)); double epsilon = 0.001; Vector input = new Vector3(7.0, 0.0, 1.0); Vector expected = new Vector3(0.0, 0.0, 0.0359).unitVector(); Vector actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); result.getGlobalWeighter().add(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(0.1952, 0.0, 0.0638).unitVector(); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); result.getGlobalWeighter().remove(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(0.0, 0.0, 0.0359).unitVector(); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); } /** * Test of createLogEntropyWeighter method, of class CommonTermWeighterFactory. */ @Test public void testCreateLogEntropyWeighter() { CompositeLocalGlobalTermWeighter result = CommonTermWeighterFactory.createLogEntropyWeighter(); assertNotNull(result); assertTrue(result.getLocalWeighter() instanceof LogLocalTermWeighter); assertTrue(result.getGlobalWeighter() instanceof EntropyGlobalTermWeighter); assertNull(result.getNormalizer()); assertNotSame(result, CommonTermWeighterFactory.createLogEntropyWeighter()); assertNotSame(result.getGlobalWeighter(), CommonTermWeighterFactory.createLogEntropyWeighter().getGlobalWeighter()); result.getGlobalWeighter().add(new Vector3(3.0, 0.0, 1.0)); result.getGlobalWeighter().add(new Vector3(4.0, 0.0, 0.0)); result.getGlobalWeighter().add(new Vector3(9.0, 0.0, 1.0)); result.getGlobalWeighter().add(new Vector3(3.0, 0.0, 2.0)); double epsilon = 0.0001; Vector input = new Vector3(7.0, 0.0, 1.0); Vector expected = new Vector3(0.1821, 0.0, 0.1732); Vector actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); result.getGlobalWeighter().add(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(0.4452, 0.0, 0.2453); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); result.getGlobalWeighter().remove(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(0.1821, 0.0, 0.1732); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); } /** * Test of createLogDominanceWeighter method, of class CommonTermWeighterFactory. */ @Test public void testCreateLogDominanceWeighter() { CompositeLocalGlobalTermWeighter result = CommonTermWeighterFactory.createLogDominanceWeighter(); assertNotNull(result); assertTrue(result.getLocalWeighter() instanceof LogLocalTermWeighter); assertTrue(result.getGlobalWeighter() instanceof DominanceGlobalTermWeighter); assertNull(result.getNormalizer()); assertNotSame(result, CommonTermWeighterFactory.createLogDominanceWeighter()); assertNotSame(result.getGlobalWeighter(), CommonTermWeighterFactory.createLogDominanceWeighter().getGlobalWeighter()); result.getGlobalWeighter().add(new Vector3(3.0, 0.0, 1.0)); result.getGlobalWeighter().add(new Vector3(4.0, 0.0, 0.0)); result.getGlobalWeighter().add(new Vector3(9.0, 0.0, 1.0)); result.getGlobalWeighter().add(new Vector3(3.0, 0.0, 2.0)); double epsilon = 0.0001; Vector input = new Vector3(7.0, 0.0, 1.0); Vector expected = new Vector3(1.8417, 0.0, 0.4901); Vector actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); result.getGlobalWeighter().add(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(1.4733, 0.0, 0.3921); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); result.getGlobalWeighter().remove(new Vector3(0.0, 1.0, 0.0)); expected = new Vector3(1.8417, 0.0, 0.4901); actual = result.evaluate(input); assertTrue(expected.equals(actual, epsilon)); } }