/*
* File: TermVectorSimilarityNetworkCreatorTest.java
* Authors: Justin Basilico
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright March 18, 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.relation;
import gov.sandia.cognition.text.term.vector.CosineSimilarityFunction;
import gov.sandia.cognition.annotation.PublicationReference;
import gov.sandia.cognition.annotation.PublicationType;
import gov.sandia.cognition.math.matrix.Matrix;
import gov.sandia.cognition.math.matrix.MatrixFactory;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
import gov.sandia.cognition.math.matrix.mtj.DenseMatrixFactoryMTJ;
import gov.sandia.cognition.math.matrix.mtj.SparseMatrixFactoryMTJ;
import gov.sandia.cognition.text.relation.SimilarityFunction;
import gov.sandia.cognition.text.term.DefaultTerm;
import gov.sandia.cognition.text.term.DefaultTermIndex;
import java.util.ArrayList;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit tests for class TermVectorSimilarityNetworkCreator
*
* @author Justin Basilico
* @since 3.0
*/
public class TermVectorSimilarityNetworkCreatorTest
{
/**
* Creates a new test.
*/
public TermVectorSimilarityNetworkCreatorTest()
{
}
/**
* Test of constructors of class TermVectorSimilarityNetworkCreator.
*/
@Test
public void testConstructors()
{
SimilarityFunction<? super Vector, ? super Vector>
similarityFunction = CosineSimilarityFunction.getInstance();
double effectiveZero = 0.0;
MatrixFactory<?> matrixFactory = MatrixFactory.getDefault();
TermVectorSimilarityNetworkCreator instance =
new TermVectorSimilarityNetworkCreator();
assertSame(similarityFunction, instance.getSimilarityFunction());
assertEquals(effectiveZero, instance.getEffectiveZero(), 0.0);
assertSame(matrixFactory, instance.getMatrixFactory());
similarityFunction = new CosineSimilarityFunction();
instance = new TermVectorSimilarityNetworkCreator(similarityFunction);
assertSame(similarityFunction, instance.getSimilarityFunction());
assertEquals(effectiveZero, instance.getEffectiveZero(), 0.0);
assertSame(matrixFactory, instance.getMatrixFactory());
effectiveZero = 0.1;
instance = new TermVectorSimilarityNetworkCreator(similarityFunction, effectiveZero);
assertSame(similarityFunction, instance.getSimilarityFunction());
assertEquals(effectiveZero, instance.getEffectiveZero(), 0.0);
assertSame(matrixFactory, instance.getMatrixFactory());
matrixFactory = new SparseMatrixFactoryMTJ();
instance = new TermVectorSimilarityNetworkCreator(similarityFunction, effectiveZero, matrixFactory);
assertSame(similarityFunction, instance.getSimilarityFunction());
assertEquals(effectiveZero, instance.getEffectiveZero(), 0.0);
assertSame(matrixFactory, instance.getMatrixFactory());
}
/**
* Test of create method, of class TermVectorSimilarityNetworkCreator.
*/
@Test
public void testCreate()
{
@PublicationReference(
author={"Thomas K. Landauer", "Peter W. Foltz", "Darrell Laham"},
title="An Introduction to Latent Semantic Analysis",
year=1998,
type=PublicationType.Journal,
publication="Discourse Processes",
pages={259, 284},
url="http://lsa.colorado.edu/papers/dp1.LSAintro.pdf",
notes="This is the paper that had the following example data."
)
double[][] data = new double[][] {
{ 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0 },
{ 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0 },
{ 1, 0, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0 },
{ 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1 }
};
double[][] similarityValues = new double[][] {
{1.00, 0.50, 0.50, 0.00, 0.58, 0.00, 0.00, 0.50, 0.00, 0.00, 0.00, 0.00},
{0.50, 1.00, 0.50, 0.41, 0.29, 0.00, 0.00, 0.50, 0.00, 0.00, 0.00, 0.00},
{0.50, 0.50, 1.00, 0.41, 0.29, 0.50, 0.50, 0.00, 0.50, 0.00, 0.00, 0.00},
{0.00, 0.41, 0.41, 1.00, 0.47, 0.82, 0.82, 0.41, 0.41, 0.00, 0.00, 0.00},
{0.58, 0.29, 0.29, 0.47, 1.00, 0.29, 0.29, 0.87, 0.29, 0.00, 0.00, 0.00},
{0.00, 0.00, 0.50, 0.82, 0.29, 1.00, 1.00, 0.00, 0.50, 0.00, 0.00, 0.00},
{0.00, 0.00, 0.50, 0.82, 0.29, 1.00, 1.00, 0.00, 0.50, 0.00, 0.00, 0.00},
{0.50, 0.50, 0.00, 0.41, 0.87, 0.00, 0.00, 1.00, 0.00, 0.00, 0.00, 0.00},
{0.00, 0.00, 0.50, 0.41, 0.29, 0.50, 0.50, 0.00, 1.00, 0.00, 0.41, 0.50},
{0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 0.67, 0.41},
{0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.41, 0.67, 1.00, 0.82},
{0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.50, 0.41, 0.82, 1.00}
};
Matrix expectedSimilarities = MatrixFactory.getDefault().copyArray(similarityValues);
String[] termNames = {
"human", "interface", "computer", "user", "system", "response",
"time", "EPS", "survey", "trees", "graph", "minors"
};
DefaultTermIndex termIndex = new DefaultTermIndex();
for (String name : termNames)
{
termIndex.add(new DefaultTerm(name));
}
ArrayList<Vector> documents = new ArrayList<Vector>(data.length);
for (double[] d : data)
{
documents.add(VectorFactory.getDefault().copyArray(d));
}
TermVectorSimilarityNetworkCreator instance =
new TermVectorSimilarityNetworkCreator(new CosineSimilarityFunction());
int termCount = termIndex.getTermCount();
MatrixBasedTermSimilarityNetwork result = instance.create(documents,
termIndex);
assertSame(termIndex, result.getTermIndex());
assertTrue(expectedSimilarities.equals(result.getSimilarities(), 0.01));
double effectiveZero = 0.5;
instance.setEffectiveZero(effectiveZero);
for (int i = 0; i < termCount; i++)
{
for (int j = 0; j < termCount; j++)
{
if (expectedSimilarities.getElement(i, j) <= effectiveZero)
{
expectedSimilarities.setElement(i, j, 0.0);
}
}
};
result = instance.create(documents,
termIndex);
assertSame(termIndex, result.getTermIndex());
assertTrue(expectedSimilarities.equals(result.getSimilarities(), 0.01));
}
/**
* Test of getSimilarityFunction method, of class TermVectorSimilarityNetworkCreator.
*/
@Test
public void testGetSimilarityFunction()
{
this.testSetSimilarityFunction();
}
/**
* Test of setSimilarityFunction method, of class TermVectorSimilarityNetworkCreator.
*/
@Test
public void testSetSimilarityFunction()
{
SimilarityFunction<? super Vector, ? super Vector>
similarityFunction = CosineSimilarityFunction.getInstance();
TermVectorSimilarityNetworkCreator instance =
new TermVectorSimilarityNetworkCreator();
assertSame(similarityFunction, instance.getSimilarityFunction());
similarityFunction = new CosineSimilarityFunction();
instance.setSimilarityFunction(similarityFunction);
assertSame(similarityFunction, instance.getSimilarityFunction());
}
/**
* Test of getEffectiveZero method, of class TermVectorSimilarityNetworkCreator.
*/
@Test
public void testGetEffectiveZero()
{
this.testSetEffectiveZero();
}
/**
* Test of setEffectiveZero method, of class TermVectorSimilarityNetworkCreator.
*/
@Test
public void testSetEffectiveZero()
{
double effectiveZero = 0.0;
TermVectorSimilarityNetworkCreator instance =
new TermVectorSimilarityNetworkCreator();
assertEquals(effectiveZero, instance.getEffectiveZero(), 0.0);
effectiveZero = 0.1;
instance.setEffectiveZero(effectiveZero);
assertEquals(effectiveZero, instance.getEffectiveZero(), 0.0);
effectiveZero = 0.2;
instance.setEffectiveZero(effectiveZero);
assertEquals(effectiveZero, instance.getEffectiveZero(), 0.0);
boolean exceptionThrown = false;
try
{
instance.setEffectiveZero(-0.1);
}
catch (IllegalArgumentException e)
{
exceptionThrown = true;
}
finally
{
assertTrue(exceptionThrown);
}
assertEquals(effectiveZero, instance.getEffectiveZero(), 0.0);
}
/**
* Test of getMatrixFactory method, of class TermVectorSimilarityNetworkCreator.
*/
@Test
public void testGetMatrixFactory()
{
this.testSetMatrixFactory();
}
/**
* Test of setMatrixFactory method, of class TermVectorSimilarityNetworkCreator.
*/
@Test
public void testSetMatrixFactory()
{
MatrixFactory<?> matrixFactory = MatrixFactory.getDefault();
TermVectorSimilarityNetworkCreator instance =
new TermVectorSimilarityNetworkCreator();
assertSame(matrixFactory, instance.getMatrixFactory());
matrixFactory = new SparseMatrixFactoryMTJ();
instance.setMatrixFactory(matrixFactory);
assertSame(matrixFactory, instance.getMatrixFactory());
matrixFactory = new DenseMatrixFactoryMTJ();
instance.setMatrixFactory(matrixFactory);
assertSame(matrixFactory, instance.getMatrixFactory());
matrixFactory = null;
instance.setMatrixFactory(matrixFactory);
assertSame(matrixFactory, instance.getMatrixFactory());
}
}