package at.lux.retrieval.evaluation;
import at.lux.fotoretrieval.lucene.Graph;
import at.lux.retrieval.graphisomorphism.FastSubgraphIsomorphism;
import at.lux.retrieval.graphisomorphism.NodeDistanceFunction;
import at.lux.retrieval.graphisomorphism.metrics.SimpleEdgeDistanceFunction;
import at.lux.retrieval.graphisomorphism.metrics.TermVectorNodeDistanceFunction;
import at.lux.retrieval.suffixtreemodel.SuffixTree;
import at.lux.retrieval.vectorspace.ElementTextVectorSimilarity;
import at.lux.retrieval.vectorspace.GraphVectorSimilarity;
import junit.framework.TestCase;
import org.apache.lucene.document.Field;
import org.apache.lucene.index.IndexReader;
import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.*;
/**
* <p/>
* Date: 09.03.2006 <br>
* Time: 10:55:47 <br>
* Know-Center Graz, Inffeldgasse 21a, 8010 Graz, AUSTRIA <br>
*
* @author Mathias Lux, mlux@know-center.at
*/
public class SuffixTreeEvaluation extends TestCase {
DecimalFormat df;
private String[] testfiles = new String[]{
"P1040584", // 0
"P1040587", // 1
"P1040588", // 2
"P1040589", // 3
"P1040599", // 4
"P1040601", // 5
"P1040615", // 6
"P1040629", // 7
"iknow_003", // 8
"iknow_005", // 9
"iknow_012", // 10
"iknow_018", // 11
"iknow_019", // 12
"iknow_044" // 13
};
private List<String[]> pairs = new ArrayList<String[]>(20);
private HashMap<String, Graph> file2Graph;
SuffixTree st = new SuffixTree(SuffixTree.RelationType.NoRelations);
LinkedList<Double> col2 = new LinkedList<Double>();
LinkedList<Double> col3 = new LinkedList<Double>();
LinkedList<Double> col1 = new LinkedList<Double>();
LinkedList<Double> col4 = new LinkedList<Double>();
LinkedList<Double> col5 = new LinkedList<Double>();
protected SAXBuilder saxBuilder;
private SuffixTree.PathType pathType = SuffixTree.PathType.BothDirections;
private int maxLength = -1;
// private int maxLength = -1;
/**
* Sets up the fixture, for example, open a network connection.
* This method is called before a test is executed.
*/
protected void setUp() throws Exception {
file2Graph = new HashMap<String, Graph>(100);
IndexReader reader = IndexReader.open("testdata/idx_paths");
System.out.println("Reading graphs from index ...");
for (int i = 0; i < reader.numDocs(); i++) {
Graph g_idx = new Graph(reader.document(i).getField("graph").stringValue());
Field[] files = reader.document(i).getFields("file");
for (int j = 0; j < files.length; j++) {
String file = files[j].stringValue();
file2Graph.put(file, g_idx);
st.addCorpusDocument(SuffixTree.createSuffixTreeDocument(g_idx, pathType, maxLength));
}
}
// create pairs:
pairs.add(new String[]{testfiles[9], testfiles[6]});
pairs.add(new String[]{testfiles[10], testfiles[1]});
pairs.add(new String[]{testfiles[7], testfiles[11]});
pairs.add(new String[]{testfiles[0], testfiles[1]});
pairs.add(new String[]{testfiles[8], testfiles[9]});
pairs.add(new String[]{testfiles[4], testfiles[1]});
// pairs.add(new String[]{testfiles[2], testfiles[10]}); // old 7th pair
pairs.add(new String[]{testfiles[12], testfiles[10]}); // new 7th pair
pairs.add(new String[]{testfiles[13], testfiles[5]});
pairs.add(new String[]{testfiles[0], testfiles[9]});
pairs.add(new String[]{testfiles[3], testfiles[7]});
pairs.add(new String[]{testfiles[13], testfiles[1]});
pairs.add(new String[]{testfiles[8], testfiles[10]});
pairs.add(new String[]{testfiles[7], testfiles[1]});
pairs.add(new String[]{testfiles[4], testfiles[5]});
pairs.add(new String[]{testfiles[0], testfiles[11]});
pairs.add(new String[]{testfiles[13], testfiles[8]});
pairs.add(new String[]{testfiles[3], testfiles[11]});
pairs.add(new String[]{testfiles[0], testfiles[5]});
pairs.add(new String[]{testfiles[12], testfiles[11]});
pairs.add(new String[]{testfiles[4], testfiles[6]});
saxBuilder = new SAXBuilder();
df = (DecimalFormat) DecimalFormat.getInstance(Locale.GERMANY);
df.setMaximumFractionDigits(18);
}
public void testSuffixTreeSimilarities() {
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
st.addDocument(SuffixTree.createSuffixTreeDocument(g1, pathType, maxLength));
st.addDocument(SuffixTree.createSuffixTreeDocument(g2, pathType, maxLength));
col1.add(st.getSimilarity(SuffixTree.SimilarityType.Unweighted));
col2.add(st.getSimilarity(SuffixTree.SimilarityType.TermFrequency));
col3.add(st.getSimilarity(SuffixTree.SimilarityType.TFIDF));
col4.add(st.getSimilarity(SuffixTree.SimilarityType.IDF));
st.resetSimilarity();
}
for (int i = 0; i < 20; i++) {
System.out.println(df.format(col1.get(i)) + "\t" + df.format(col2.get(i)) + "\t" + df.format(col3.get(i)) + "\t" + df.format(col4.get(i)));
}
}
public void testMcsSimilarities() {
long ms = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
g1.getMcsSimilarity(g2);
// System.out.println(df.format(g1.getMcsSimilarity(g2)));
// col2.add(st.getSimilarity(SuffixTree.SimilartyType.TermFrequency));
// col3.add(st.getSimilarity(SuffixTree.SimilartyType.TFIDF));
// col1.add(st.getSimilarity(SuffixTree.SimilartyType.Unweighted));
// st.resetSimilarity();
}
}
ms = System.currentTimeMillis() - ms;
System.out.println("ms = " + ms);
// for (int i = 0; i<20; i++) {
// System.out.println(df.format(col1.get(i)) + "\t"+ col2.get(i) + "\t" + col3.get(i));
// }
}
public void testVectorSpace() throws IOException, JDOMException {
// GraphVectorSimilarity vs0 = new GraphVectorSimilarity(GraphVectorSimilarity.Type.BM25, 0);
// GraphVectorSimilarity vs1 = new GraphVectorSimilarity(GraphVectorSimilarity.Type.BM25, 1);
// GraphVectorSimilarity vsAll = new GraphVectorSimilarity(GraphVectorSimilarity.Type.BM25, -1);
GraphVectorSimilarity.Type weightingType = GraphVectorSimilarity.Type.BM25;
GraphVectorSimilarity vs0 = new GraphVectorSimilarity(weightingType, 0);
GraphVectorSimilarity vs1 = new GraphVectorSimilarity(weightingType, 1);
GraphVectorSimilarity vs2 = new GraphVectorSimilarity(weightingType, 2);
GraphVectorSimilarity vs3 = new GraphVectorSimilarity(weightingType, 2);
GraphVectorSimilarity vsAll = new GraphVectorSimilarity(weightingType, 2);
//
IndexReader reader = IndexReader.open("testdata/idx_paths");
System.out.println("Reading graphs from index ...");
for (int i = 0; i < reader.numDocs(); i++) {
Graph g_idx = new Graph(reader.document(i).getField("graph").stringValue());
Field[] files = reader.document(i).getFields("file");
for (Field file : files) {
vs0.addToCorpus(g_idx);
vs1.addToCorpus(g_idx);
vs2.addToCorpus(g_idx);
vs3.addToCorpus(g_idx);
vsAll.addToCorpus(g_idx);
}
}
int count = 0;
for (String[] strings : pairs) {
count++;
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
col1.add(vs0.getSimilarity(g1, g2));
col2.add(vs1.getSimilarity(g1, g2));
col3.add(vs2.getSimilarity(g1, g2));
col4.add(vs3.getSimilarity(g1, g2));
col5.add(vsAll.getSimilarity(g1, g2));
st.resetSimilarity();
}
for (int i = 0; i < 20; i++) {
System.out.println(df.format(col1.get(i)) + "\t" + df.format(col2.get(i)) + "\t" + df.format(col3.get(i)) + "\t" + df.format(col4.get(i)) + "\t" + df.format(col5.get(i)));
}
}
public void testElementTextVectorSimilarity() throws IOException, JDOMException {
IndexReader reader = IndexReader.open("testdata/idx_paths");
System.out.println("Loading documents and adding them to corpus ...");
ElementTextVectorSimilarity sim = new ElementTextVectorSimilarity();
for (int i = 0; i < reader.numDocs(); i++) {
// Graph g_idx = new Graph(reader.document(i).getField("graph").stringValue());
Field[] files = reader.document(i).getFields("file");
for (Field file : files) {
Document d = null;
try {
d = saxBuilder.build(file.stringValue());
} catch (Exception e) {
System.err.println(file.stringValue());
e.printStackTrace();
}
sim.addToCorpus(d);
}
}
for (String[] strings : pairs) {
Document d1 = saxBuilder.build(getFile(strings[0]));
Document d2 = saxBuilder.build(getFile(strings[1]));
col1.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.Unweighted));
col2.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.TfIdf));
col3.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.BM25));
}
for (int i = 0; i < 20; i++) {
System.out.println(df.format(col1.get(i)) + "\t" + df.format(col2.get(i)) + "\t" + df.format(col3.get(i)));
}
}
public void testSubgraphIsomorphism() throws IOException, JDOMException {
NodeDistanceFunction nDist = new TermVectorNodeDistanceFunction(TermVectorNodeDistanceFunction.Type.CosinusCoefficient);
getSubgraphIsomorphism(nDist, 0.4f, 1.0f);
getSubgraphIsomorphism(nDist, 0.5f, 1.0f);
getSubgraphIsomorphism(nDist, 0.5f, 1.5f);
getSubgraphIsomorphism(nDist, 0.5f, 2.0f);
getSubgraphIsomorphism(nDist, 0.5f, 2.5f);
// getSubgraphIsomorphism(new BooleanNodeDistanceFunction(), 0.5f, 3.0f);
getSubgraphIsomorphism(nDist, 0.4f, 1.0f);
getSubgraphIsomorphism(nDist, 0.4f, 1.5f);
getSubgraphIsomorphism(nDist, 0.4f, 2.0f);
getSubgraphIsomorphism(nDist, 0.4f, 2.5f);
// getSubgraphIsomorphism(new BooleanNodeDistanceFunction(), 0.4f, 3.0f);
getSubgraphIsomorphism(nDist, 0.6f, 1.0f);
getSubgraphIsomorphism(nDist, 0.6f, 1.5f);
getSubgraphIsomorphism(nDist, 0.6f, 2.0f);
getSubgraphIsomorphism(nDist, 0.6f, 2.5f);
// getSubgraphIsomorphism(new BooleanNodeDistanceFunction(), 0.6f, 3.0f);
}
private void getSubgraphIsomorphism(NodeDistanceFunction nDist, float lambda, float maxDistance) throws JDOMException, IOException {
System.out.println(nDist.getClass().getName() + ", lambda=" + lambda + ", maxdistance=" + maxDistance);
FastSubgraphIsomorphism fsi1 = new FastSubgraphIsomorphism(
nDist,
new SimpleEdgeDistanceFunction(SimpleEdgeDistanceFunction.EdgeInversionType.Allow),
lambda, maxDistance);
FastSubgraphIsomorphism fsi2 = new FastSubgraphIsomorphism(
nDist,
new SimpleEdgeDistanceFunction(SimpleEdgeDistanceFunction.EdgeInversionType.Forbid),
lambda, maxDistance);
FastSubgraphIsomorphism fsi3 = new FastSubgraphIsomorphism(
nDist,
new SimpleEdgeDistanceFunction(SimpleEdgeDistanceFunction.EdgeInversionType.WeightInverted),
lambda, maxDistance);
long ms = System.currentTimeMillis();
for (String[] strings : pairs) {
Document d1 = saxBuilder.build(getFile(strings[0]));
Document d2 = saxBuilder.build(getFile(strings[1]));
col1.add((double) fsi2.getDistance(d1, d2));
System.out.print(".");
col2.add((double) fsi1.getDistance(d1, d2));
System.out.print(",");
col3.add((double) fsi3.getDistance(d1, d2));
System.out.print(";");
}
System.out.println("");
for (int i = 0; i < 20; i++) {
System.out.println(df.format(col1.get(i)) + "\t" + df.format(col2.get(i)) + "\t" + df.format(col3.get(i)));
}
System.out.println("time taken: " + (System.currentTimeMillis() - ms) / 1000f + " sec");
System.out.println("");
}
private String getFile(String id) {
for (Iterator<String> iterator = file2Graph.keySet().iterator(); iterator.hasNext();) {
String s = iterator.next();
if (s.indexOf(id) > 0) return s;
}
return null;
}
public void testSuffixTreeCalculationTime() {
long ms = System.currentTimeMillis();
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
st.addDocument(SuffixTree.createSuffixTreeDocument(g1, pathType, maxLength));
st.addDocument(SuffixTree.createSuffixTreeDocument(g2, pathType, maxLength));
col1.add(st.getSimilarity(SuffixTree.SimilarityType.Unweighted));
// col2.add(st.getSimilarity(SuffixTree.SimilarityType.TermFrequency));
// col3.add(st.getSimilarity(SuffixTree.SimilarityType.TFIDF));
// col4.add(st.getSimilarity(SuffixTree.SimilarityType.IDF));
st.resetSimilarity();
}
ms = System.currentTimeMillis() - ms;
System.out.println("Unweighted: ms = " + ms);
ms = System.currentTimeMillis();
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
st.addDocument(SuffixTree.createSuffixTreeDocument(g1, pathType, maxLength));
st.addDocument(SuffixTree.createSuffixTreeDocument(g2, pathType, maxLength));
// col1.add(st.getSimilarity(SuffixTree.SimilarityType.Unweighted));
col2.add(st.getSimilarity(SuffixTree.SimilarityType.TermFrequency));
// col3.add(st.getSimilarity(SuffixTree.SimilarityType.TFIDF));
// col4.add(st.getSimilarity(SuffixTree.SimilarityType.IDF));
st.resetSimilarity();
}
ms = System.currentTimeMillis() - ms;
System.out.println("TF: ms = " + ms);
ms = System.currentTimeMillis();
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
st.addDocument(SuffixTree.createSuffixTreeDocument(g1, pathType, maxLength));
st.addDocument(SuffixTree.createSuffixTreeDocument(g2, pathType, maxLength));
// col1.add(st.getSimilarity(SuffixTree.SimilarityType.Unweighted));
// col2.add(st.getSimilarity(SuffixTree.SimilarityType.TermFrequency));
col3.add(st.getSimilarity(SuffixTree.SimilarityType.TFIDF));
// col4.add(st.getSimilarity(SuffixTree.SimilarityType.IDF));
st.resetSimilarity();
}
ms = System.currentTimeMillis() - ms;
System.out.println("TFIDF: ms = " + ms);
ms = System.currentTimeMillis();
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
st.addDocument(SuffixTree.createSuffixTreeDocument(g1, pathType, maxLength));
st.addDocument(SuffixTree.createSuffixTreeDocument(g2, pathType, maxLength));
// col1.add(st.getSimilarity(SuffixTree.SimilarityType.Unweighted));
// col2.add(st.getSimilarity(SuffixTree.SimilarityType.TermFrequency));
// col3.add(st.getSimilarity(SuffixTree.SimilarityType.TFIDF));
col4.add(st.getSimilarity(SuffixTree.SimilarityType.IDF));
st.resetSimilarity();
}
ms = System.currentTimeMillis() - ms;
System.out.println("IDF: ms = " + ms);
}
public void testVectorSpaceCalculationTime() throws IOException, JDOMException {
GraphVectorSimilarity.Type weightingType = GraphVectorSimilarity.Type.PlIdfWeighted;
GraphVectorSimilarity vs0 = new GraphVectorSimilarity(weightingType, 0);
GraphVectorSimilarity vs1 = new GraphVectorSimilarity(weightingType, 1);
GraphVectorSimilarity vs2 = new GraphVectorSimilarity(weightingType, 2);
GraphVectorSimilarity vs3 = new GraphVectorSimilarity(weightingType, 2);
GraphVectorSimilarity vsAll = new GraphVectorSimilarity(weightingType, 2);
//
IndexReader reader = IndexReader.open("testdata/idx_paths");
System.out.println("Reading graphs from index ...");
for (int i = 0; i < reader.numDocs(); i++) {
Graph g_idx = new Graph(reader.document(i).getField("graph").stringValue());
Field[] files = reader.document(i).getFields("file");
for (Field file : files) {
vs0.addToCorpus(g_idx);
vs1.addToCorpus(g_idx);
vs2.addToCorpus(g_idx);
vs3.addToCorpus(g_idx);
vsAll.addToCorpus(g_idx);
}
}
long ms = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
col1.add(vs0.getSimilarity(g1, g2));
// col2.add(vs1.getSimilarity(g1, g2));
// col3.add(vs2.getSimilarity(g1, g2));
// col4.add(vs3.getSimilarity(g1, g2));
// col5.add(vsAll.getSimilarity(g1, g2));
}
}
ms = System.currentTimeMillis() - ms;
System.out.println(weightingType + " path length 0 ms = " + ms);
ms = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
// col1.add(vs0.getSimilarity(g1, g2));
col2.add(vs1.getSimilarity(g1, g2));
// col3.add(vs2.getSimilarity(g1, g2));
// col4.add(vs3.getSimilarity(g1, g2));
// col5.add(vsAll.getSimilarity(g1, g2));
}
}
ms = System.currentTimeMillis() - ms;
System.out.println(weightingType + " path length 1 ms = " + ms);
ms = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
// col1.add(vs0.getSimilarity(g1, g2));
// col2.add(vs1.getSimilarity(g1, g2));
col3.add(vs2.getSimilarity(g1, g2));
// col4.add(vs3.getSimilarity(g1, g2));
// col5.add(vsAll.getSimilarity(g1, g2));
}
}
ms = System.currentTimeMillis() - ms;
System.out.println(weightingType + " path length 2 ms = " + ms);
ms = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
// col1.add(vs0.getSimilarity(g1, g2));
// col2.add(vs1.getSimilarity(g1, g2));
col3.add(vs2.getSimilarity(g1, g2));
// col4.add(vs3.getSimilarity(g1, g2));
// col5.add(vsAll.getSimilarity(g1, g2));
}
}
ms = System.currentTimeMillis() - ms;
System.out.println(weightingType + " path length 3 ms = " + ms);
ms = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
// col1.add(vs0.getSimilarity(g1, g2));
// col2.add(vs1.getSimilarity(g1, g2));
// col3.add(vs2.getSimilarity(g1, g2));
col4.add(vs3.getSimilarity(g1, g2));
// col5.add(vsAll.getSimilarity(g1, g2));
}
}
ms = System.currentTimeMillis() - ms;
System.out.println(weightingType + " path length 4 ms = " + ms);
ms = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
for (String[] strings : pairs) {
Graph g1 = file2Graph.get(getFile(strings[0]));
Graph g2 = file2Graph.get(getFile(strings[1]));
// col1.add(vs0.getSimilarity(g1, g2));
// col2.add(vs1.getSimilarity(g1, g2));
// col3.add(vs2.getSimilarity(g1, g2));
// col4.add(vs3.getSimilarity(g1, g2));
col5.add(vsAll.getSimilarity(g1, g2));
}
}
ms = System.currentTimeMillis() - ms;
System.out.println(weightingType + " path length all ms = " + ms);
}
public void testElementTextVectorSimilarityCalculationTime() throws IOException, JDOMException {
IndexReader reader = IndexReader.open("testdata/idx_paths");
System.out.println("Loading documents and adding them to corpus ...");
ElementTextVectorSimilarity sim = new ElementTextVectorSimilarity();
for (int i = 0; i < reader.numDocs(); i++) {
// Graph g_idx = new Graph(reader.document(i).getField("graph").stringValue());
Field[] files = reader.document(i).getFields("file");
for (Field file : files) {
Document d = saxBuilder.build(file.stringValue());
sim.addToCorpus(d);
}
}
long ms = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
for (String[] strings : pairs) {
Document d1 = saxBuilder.build(getFile(strings[0]));
Document d2 = saxBuilder.build(getFile(strings[1]));
col1.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.Unweighted));
// col2.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.TfIdf));
// col3.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.BM25));
}
}
ms = System.currentTimeMillis() - ms;
System.out.println("VS unweighted ms = " + ms);
ms = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
for (String[] strings : pairs) {
Document d1 = saxBuilder.build(getFile(strings[0]));
Document d2 = saxBuilder.build(getFile(strings[1]));
// col1.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.Unweighted));
col2.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.TfIdf));
// col3.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.BM25));
}
}
ms = System.currentTimeMillis() - ms;
System.out.println("VS TfIdf ms = " + ms);
ms = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
for (String[] strings : pairs) {
Document d1 = saxBuilder.build(getFile(strings[0]));
Document d2 = saxBuilder.build(getFile(strings[1]));
// col1.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.Unweighted));
// col2.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.TfIdf));
col3.add(sim.getSimilarity(d1, d2, ElementTextVectorSimilarity.WeightType.BM25));
}
}
ms = System.currentTimeMillis() - ms;
System.out.println("VS BM25 ms = " + ms);
}
private void getSubgraphIsomorphismCalculationTime(NodeDistanceFunction nDist, float lambda, float maxDistance, SimpleEdgeDistanceFunction.EdgeInversionType edgeInversionType) throws JDOMException, IOException {
System.out.println(nDist.getClass().getName() + ", lambda=" + lambda + ", maxdistance=" + maxDistance);
FastSubgraphIsomorphism fsi1 = new FastSubgraphIsomorphism(
nDist,
new SimpleEdgeDistanceFunction(edgeInversionType),
lambda, maxDistance);
// FastSubgraphIsomorphism fsi2 = new FastSubgraphIsomorphism(
// nDist,
// new SimpleEdgeDistanceFunction(SimpleEdgeDistanceFunction.EdgeInversionType.Forbid),
// lambda, maxDistance);
// FastSubgraphIsomorphism fsi3 = new FastSubgraphIsomorphism(
// nDist,
// new SimpleEdgeDistanceFunction(SimpleEdgeDistanceFunction.EdgeInversionType.WeightInverted),
// lambda, maxDistance);
long ms = System.currentTimeMillis();
for (String[] strings : pairs) {
Document d1 = saxBuilder.build(getFile(strings[0]));
Document d2 = saxBuilder.build(getFile(strings[1]));
// col1.add((double) fsi2.getDistance(d1, d2));
// System.out.print(".");
col2.add((double) fsi1.getDistance(d1, d2));
// System.out.print(",");
// col3.add((double) fsi3.getDistance(d1, d2));
// System.out.print(";");
}
ms = System.currentTimeMillis() - ms;
System.out.println("ms = " + ms);
}
public void testSubgraphIsomorphismCalculationTime() throws IOException, JDOMException {
// getSubgraphIsomorphismCalculationTime(new BooleanNodeDistanceFunction(), 0.5f, 1.5f, SimpleEdgeDistanceFunction.EdgeInversionType.Allow);
// getSubgraphIsomorphismCalculationTime(new BooleanNodeDistanceFunction(), 0.5f, 1.5f, SimpleEdgeDistanceFunction.EdgeInversionType.WeightInverted);
// getSubgraphIsomorphismCalculationTime(new BooleanNodeDistanceFunction(), 0.5f, 1.5f, SimpleEdgeDistanceFunction.EdgeInversionType.Forbid);
//
getSubgraphIsomorphismCalculationTime(new TermVectorNodeDistanceFunction(TermVectorNodeDistanceFunction.Type.CosinusCoefficient), 0.5f, 1.5f, SimpleEdgeDistanceFunction.EdgeInversionType.Allow);
getSubgraphIsomorphismCalculationTime(new TermVectorNodeDistanceFunction(TermVectorNodeDistanceFunction.Type.CosinusCoefficient), 0.5f, 1.5f, SimpleEdgeDistanceFunction.EdgeInversionType.WeightInverted);
getSubgraphIsomorphismCalculationTime(new TermVectorNodeDistanceFunction(TermVectorNodeDistanceFunction.Type.CosinusCoefficient), 0.5f, 1.5f, SimpleEdgeDistanceFunction.EdgeInversionType.Forbid);
}
}