diff --git a/jedai-core/pom.xml b/jedai-core/pom.xml
index cd8e9d0a..13b0572f 100644
--- a/jedai-core/pom.xml
+++ b/jedai-core/pom.xml
@@ -73,20 +73,6 @@
3.1.0
-
-
- org.apache.lucene
- lucene-core
- 6.0.1
-
-
-
-
- org.apache.lucene
- lucene-analyzers-common
- 6.0.1
-
-
com.opencsv
diff --git a/jedai-core/src/main/java/BlockBuilding/AbstractBlockBuilding.java b/jedai-core/src/main/java/BlockBuilding/AbstractBlockBuilding.java
index d398d707..a469e62d 100644
--- a/jedai-core/src/main/java/BlockBuilding/AbstractBlockBuilding.java
+++ b/jedai-core/src/main/java/BlockBuilding/AbstractBlockBuilding.java
@@ -1,19 +1,18 @@
/*
-* Copyright [2016] [George Papadakis (gpapadis@yahoo.gr)]
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
+ * Copyright [2016] [George Papadakis (gpapadis@yahoo.gr)]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package BlockBuilding;
import DataModel.AbstractBlock;
@@ -22,34 +21,15 @@
import DataModel.EntityProfile;
import DataModel.UnilateralBlock;
import Utilities.Converter;
-import java.io.IOException;
+
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.core.SimpleAnalyzer;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.document.StoredField;
-import org.apache.lucene.document.StringField;
-import org.apache.lucene.index.DirectoryReader;
-import org.apache.lucene.index.Fields;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.index.IndexWriterConfig;
-import org.apache.lucene.index.MultiFields;
-import org.apache.lucene.index.PostingsEnum;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.index.Terms;
-import org.apache.lucene.index.TermsEnum;
-import org.apache.lucene.search.DocIdSetIterator;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.RAMDirectory;
-import org.apache.lucene.util.BytesRef;
/**
*
@@ -63,10 +43,10 @@ public abstract class AbstractBlockBuilding implements IBlockBuilding {
protected double noOfEntitiesD2;
protected final List blocks;
- protected Directory indexDirectoryD1;
- protected Directory indexDirectoryD2;
protected List entityProfilesD1;
protected List entityProfilesD2;
+ protected Map> invertedIndexD1;
+ protected Map> invertedIndexD2;
public AbstractBlockBuilding() {
blocks = new ArrayList<>();
@@ -75,32 +55,10 @@ public AbstractBlockBuilding() {
}
protected void buildBlocks() {
- setMemoryDirectory();
+ indexEntities(invertedIndexD1, entityProfilesD1);
- IndexWriter iWriter1 = openWriter(indexDirectoryD1);
- indexEntities(iWriter1, entityProfilesD1);
- closeWriter(iWriter1);
-
- if (indexDirectoryD2 != null) {
- IndexWriter iWriter2 = openWriter(indexDirectoryD2);
- indexEntities(iWriter2, entityProfilesD2);
- closeWriter(iWriter2);
- }
- }
-
- protected void closeReader(IndexReader iReader) {
- try {
- iReader.close();
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
- }
- }
-
- protected void closeWriter(IndexWriter iWriter) {
- try {
- iWriter.close();
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
+ if (invertedIndexD2 != null) {
+ indexEntities(invertedIndexD2, entityProfilesD2);
}
}
@@ -110,7 +68,7 @@ protected void closeWriter(IndexWriter iWriter) {
public List getBlocks(List profiles) {
return this.getBlocks(profiles, null);
}
-
+
@Override
public List getBlocks(List profilesD1,
List profilesD2) {
@@ -120,9 +78,11 @@ public List getBlocks(List profilesD1,
return null;
}
+ invertedIndexD1 = new HashMap<>();
entityProfilesD1 = profilesD1;
noOfEntitiesD1 = entityProfilesD1.size();
if (profilesD2 != null) {
+ invertedIndexD2 = new HashMap<>();
entityProfilesD2 = profilesD2;
noOfEntitiesD2 = entityProfilesD2.size();
}
@@ -138,19 +98,6 @@ public double getBruteForceComparisons() {
return noOfEntitiesD1 * noOfEntitiesD2;
}
- protected int[] getDocumentIds(IndexReader reader) {
- int[] documentIds = new int[reader.numDocs()];
- for (int i = 0; i < documentIds.length; i++) {
- try {
- Document document = reader.document(i);
- documentIds[i] = Integer.parseInt(document.get(DOC_ID));
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
- }
- }
- return documentIds;
- }
-
public double getTotalNoOfEntities() {
if (entityProfilesD2 == null) {
return noOfEntitiesD1;
@@ -158,159 +105,72 @@ public double getTotalNoOfEntities() {
return noOfEntitiesD1 + noOfEntitiesD2;
}
- protected void indexEntities(IndexWriter index, List entities) {
- try {
- int counter = 0;
- for (EntityProfile profile : entities) {
- Document doc = new Document();
- doc.add(new StoredField(DOC_ID, counter++));
- for (Attribute attribute : profile.getAttributes()) {
- getBlockingKeys(attribute.getValue()).stream().filter((key) -> (0 < key.trim().length())).forEach((key) -> {
- doc.add(new StringField(VALUE_LABEL, key.trim(), Field.Store.YES));
- });
+ protected void indexEntities(Map> index, List entities) {
+ int counter = 0;
+ for (EntityProfile profile : entities) {
+ for (Attribute attribute : profile.getAttributes()) {
+ Set keys = getBlockingKeys(attribute.getValue());
+ for (String key : keys) {
+ String normalizedKey = key.trim().toLowerCase();
+ if (0 < normalizedKey.length()) {
+ List entityList = index.get(normalizedKey);
+ if (entityList == null) {
+ entityList = new ArrayList<>();
+ index.put(normalizedKey, entityList);
+ }
+ entityList.add(counter);
+ }
}
- index.addDocument(doc);
}
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
+ counter++;
}
}
- public static IndexReader openReader(Directory directory) {
- try {
- return DirectoryReader.open(directory);
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
- return null;
- }
- }
-
- protected IndexWriter openWriter(Directory directory) {
- try {
- Analyzer analyzer = new SimpleAnalyzer();
- IndexWriterConfig config = new IndexWriterConfig(analyzer);
- return new IndexWriter(directory, config);
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
- return null;
- }
- }
-
- protected Map parseD1Index(IndexReader d1Index, IndexReader d2Index) {
- try {
- int[] documentIds = getDocumentIds(d1Index);
- final Map hashedBlocks = new HashMap<>();
- Fields fields = MultiFields.getFields(d1Index);
- for (String field : fields) {
- Terms terms = fields.terms(field);
- TermsEnum termsEnum = terms.iterator();
- BytesRef text;
- while ((text = termsEnum.next()) != null) {
- // check whether it is a common term
- int d2DocFrequency = d2Index.docFreq(new Term(field, text));
- if (d2DocFrequency == 0) {
- continue;
- }
-
- final List entityIds = new ArrayList<>();
- PostingsEnum pe = MultiFields.getTermDocsEnum(d1Index, field, text);
- int doc;
- while ((doc = pe.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- entityIds.add(documentIds[doc]);
- }
-
- int[] idsArray = Converter.convertCollectionToArray(entityIds);
- hashedBlocks.put(text.utf8ToString(), idsArray);
- }
+ protected Map parseD1Index() {
+ final Map hashedBlocks = new HashMap<>();
+ for (Entry> entry : invertedIndexD1.entrySet()) {
+ // check whether it is a common term
+ if (!invertedIndexD2.containsKey(entry.getKey())) {
+ continue;
}
- return hashedBlocks;
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
- return null;
+
+ int[] idsArray = Converter.convertCollectionToArray(entry.getValue());
+ hashedBlocks.put(entry.getKey(), idsArray);
}
+ return hashedBlocks;
}
- protected void parseD2Index(IndexReader d2Index, Map hashedBlocks) {
- try {
- int[] documentIds = getDocumentIds(d2Index);
- Fields fields = MultiFields.getFields(d2Index);
- for (String field : fields) {
- Terms terms = fields.terms(field);
- TermsEnum termsEnum = terms.iterator();
- BytesRef text;
- while ((text = termsEnum.next()) != null) {
- if (!hashedBlocks.containsKey(text.utf8ToString())) {
- continue;
- }
-
- final List entityIds = new ArrayList<>();
- PostingsEnum pe = MultiFields.getTermDocsEnum(d2Index, field, text);
- int doc;
- while ((doc = pe.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- entityIds.add(documentIds[doc]);
- }
-
- int[] idsArray = Converter.convertCollectionToArray(entityIds);
- int[] d1Entities = hashedBlocks.get(text.utf8ToString());
- blocks.add(new BilateralBlock(d1Entities, idsArray));
- }
+ protected void parseD2Index(Map hashedBlocks) {
+ for (Entry> entry : invertedIndexD2.entrySet()) {
+ if (!hashedBlocks.containsKey(entry.getKey())) {
+ continue;
}
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
+ int[] idsArray = Converter.convertCollectionToArray(entry.getValue());
+ int[] d1Entities = hashedBlocks.get(entry.getKey());
+ blocks.add(new BilateralBlock(d1Entities, idsArray));
}
}
- protected void parseIndex(IndexReader d1Index) {
- try {
- int[] documentIds = getDocumentIds(d1Index);
- Fields fields = MultiFields.getFields(d1Index);
- for (String field : fields) {
- Terms terms = fields.terms(field);
- TermsEnum termsEnum = terms.iterator();
- BytesRef text;
- while ((text = termsEnum.next()) != null) {
- if (termsEnum.docFreq() < 2) {
- continue;
- }
-
- final List entityIds = new ArrayList<>();
- PostingsEnum pe = MultiFields.getTermDocsEnum(d1Index, field, text);
- int doc;
- while ((doc = pe.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- entityIds.add(documentIds[doc]);
- }
-
- int[] idsArray = Converter.convertCollectionToArray(entityIds);
- UnilateralBlock block = new UnilateralBlock(idsArray);
- blocks.add(block);
- }
+ protected void parseIndex() {
+ for (List entityList : invertedIndexD1.values()) {
+ if (1 < entityList.size()) {
+ int[] idsArray = Converter.convertCollectionToArray(entityList);
+ UnilateralBlock block = new UnilateralBlock(idsArray);
+ blocks.add(block);
}
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
}
}
-
+
//read blocks from Lucene index
public List readBlocks() {
- IndexReader iReaderD1 = openReader(indexDirectoryD1);
if (entityProfilesD2 == null) { //Dirty ER
- parseIndex(iReaderD1);
+ parseIndex();
} else {
- IndexReader iReaderD2 = openReader(indexDirectoryD2);
- Map hashedBlocks = parseD1Index(iReaderD1, iReaderD2);
- parseD2Index(iReaderD2, hashedBlocks);
- closeReader(iReaderD2);
+ Map hashedBlocks = parseD1Index();
+ parseD2Index(hashedBlocks);
}
- closeReader(iReaderD1);
-
- return blocks;
- }
- protected void setMemoryDirectory() {
- indexDirectoryD1 = new RAMDirectory();
- if (entityProfilesD2 != null) {
- indexDirectoryD2 = new RAMDirectory();
- }
+ return blocks;
}
-}
\ No newline at end of file
+}
diff --git a/jedai-core/src/main/java/BlockBuilding/AttributeClusteringBlocking.java b/jedai-core/src/main/java/BlockBuilding/AttributeClusteringBlocking.java
index 3e557aef..1c2aaa3b 100644
--- a/jedai-core/src/main/java/BlockBuilding/AttributeClusteringBlocking.java
+++ b/jedai-core/src/main/java/BlockBuilding/AttributeClusteringBlocking.java
@@ -1,19 +1,18 @@
/*
-* Copyright [2016] [George Papadakis (gpapadis@yahoo.gr)]
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
+ * Copyright [2016] [George Papadakis (gpapadis@yahoo.gr)]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package BlockBuilding;
import DataModel.Attribute;
@@ -22,7 +21,6 @@
import Utilities.Enumerations.RepresentationModel;
import Utilities.Enumerations.SimilarityMetric;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -32,11 +30,6 @@
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.apache.lucene.document.Document;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.document.StoredField;
-import org.apache.lucene.document.StringField;
-import org.apache.lucene.index.IndexWriter;
import org.jgrapht.alg.ConnectivityInspector;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
@@ -51,7 +44,7 @@ public class AttributeClusteringBlocking extends StandardBlocking {
private final static String CLUSTER_PREFIX = "#$!cl";
private final static String CLUSTER_SUFFIX = "!$#";
private static final Logger LOGGER = Logger.getLogger(AttributeClusteringBlocking.class.getName());
-
+
private final Map[] attributeClusters;
private final RepresentationModel model;
private final SimilarityMetric simMetric;
@@ -60,7 +53,7 @@ public AttributeClusteringBlocking() {
this(RepresentationModel.TOKEN_UNIGRAM_GRAPHS, SimilarityMetric.GRAPH_VALUE_SIMILARITY);
LOGGER.log(Level.INFO, "Using default configuration for Attribute Clustering Blocking.");
}
-
+
public AttributeClusteringBlocking(RepresentationModel md, SimilarityMetric sMetric) {
super();
model = md;
@@ -80,21 +73,15 @@ protected void buildBlocks() {
SimpleGraph graph = compareAttributes(attributeModels1);
clusterAttributes(attributeModels1, graph);
}
-
- setMemoryDirectory();
- IndexWriter iWriter1 = openWriter(indexDirectoryD1);
- indexEntities(0, iWriter1, entityProfilesD1);
- closeWriter(iWriter1);
+ indexEntities(0, invertedIndexD1, entityProfilesD1);
- if (indexDirectoryD2 != null) {
- IndexWriter iWriter2 = openWriter(indexDirectoryD2);
- indexEntities(1, iWriter2, entityProfilesD2);
- closeWriter(iWriter2);
+ if (invertedIndexD2 != null) {
+ indexEntities(1, invertedIndexD1, entityProfilesD2);
}
}
-
- private ITextModel[] buildAttributeModels(int datasetId, List profiles) {
+
+ private ITextModel[] buildAttributeModels(int datasetId, List profiles) {
final HashMap> attributeProfiles = new HashMap<>();
profiles.forEach((entity) -> {
entity.getAttributes().forEach((attribute) -> {
@@ -135,7 +122,7 @@ private void clusterAttributes(ITextModel[] attributeModels, SimpleGraph graph)
} else {
counter++;
}
-
+
for (int attributeId : cluster) {
attributeClusters[0].put(attributeModels[attributeId].getInstanceName(), clusterId);
}
@@ -150,7 +137,7 @@ private void clusterAttributes(ITextModel[] attributeModels1, ITextModel[] attri
ConnectivityInspector ci = new ConnectivityInspector(graph);
List> connectedComponents = ci.connectedSets();
int singletonId = connectedComponents.size() + 1;
-
+
attributeClusters[0] = new HashMap<>(2 * d1Attributes);
attributeClusters[1] = new HashMap<>(2 * d2Attributes);
int counter = 0;
@@ -161,7 +148,7 @@ private void clusterAttributes(ITextModel[] attributeModels1, ITextModel[] attri
} else {
counter++;
}
-
+
for (int attributeId : cluster) {
if (attributeId < d1Attributes) {
attributeClusters[0].put(attributeModels1[attributeId].getInstanceName(), clusterId);
@@ -242,41 +229,41 @@ private SimpleGraph compareAttributes(ITextModel[] attributeModels1, ITextModel[
}
return namesGraph;
}
-
- protected void indexEntities(int sourceId, IndexWriter index, List entities) {
- try {
- int counter = 0;
- for (EntityProfile profile : entities) {
- Document doc = new Document();
- doc.add(new StoredField(DOC_ID, counter++));
- for (Attribute attribute : profile.getAttributes()) {
- Integer clusterId = attributeClusters[sourceId].get(attribute.getName());
- if (clusterId == null) {
- LOGGER.log(Level.WARNING, "No cluster id found for attribute name\t:\t{0}"
- + ".\nCorresponding attribute value\t:\t{1}", new Object[]{attribute.getName(), attribute.getValue()});
- continue;
- }
- String clusterSuffix = CLUSTER_PREFIX + clusterId + CLUSTER_SUFFIX;
- for (String token : getTokens(attribute.getValue())) {
- if (0 < token.trim().length()) {
- doc.add(new StringField(VALUE_LABEL, token.trim() + clusterSuffix, Field.Store.YES));
+
+ protected void indexEntities(int sourceId, Map> index, List entities) {
+ int counter = 0;
+ for (EntityProfile profile : entities) {
+ for (Attribute attribute : profile.getAttributes()) {
+ Integer clusterId = attributeClusters[sourceId].get(attribute.getName());
+ if (clusterId == null) {
+ LOGGER.log(Level.WARNING, "No cluster id found for attribute name\t:\t{0}"
+ + ".\nCorresponding attribute value\t:\t{1}", new Object[]{attribute.getName(), attribute.getValue()});
+ continue;
+ }
+
+ String clusterSuffix = CLUSTER_PREFIX + clusterId + CLUSTER_SUFFIX;
+ for (String token : getTokens(attribute.getValue())) {
+ if (0 < token.trim().length()) {
+ String normalizedKey = token.trim().toLowerCase() + clusterSuffix;
+ List entityList = index.get(normalizedKey);
+ if (entityList == null) {
+ entityList = new ArrayList<>();
+ index.put(normalizedKey, entityList);
}
+ entityList.add(counter);
}
}
-
- index.addDocument(doc);
}
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
+ counter++;
}
}
-
+
@Override
public String getMethodConfiguration() {
- return "Representation model=" + model +
- "\nSimilarity metric=" + simMetric;
+ return "Representation model=" + model
+ + "\nSimilarity metric=" + simMetric;
}
-
+
@Override
public String getMethodInfo() {
return "Attribute Clustering Blocking: it groups the attribute names into similarity clusters "
@@ -287,7 +274,7 @@ public String getMethodInfo() {
public String getMethodName() {
return "Attribute Clustering";
}
-
+
@Override
public String getMethodParameters() {
return "Attribute Clustering Blocking involves a single parameter:\n"
diff --git a/jedai-core/src/main/java/BlockBuilding/ExtendedSortedNeighborhoodBlocking.java b/jedai-core/src/main/java/BlockBuilding/ExtendedSortedNeighborhoodBlocking.java
index 325b150e..925ae7ef 100644
--- a/jedai-core/src/main/java/BlockBuilding/ExtendedSortedNeighborhoodBlocking.java
+++ b/jedai-core/src/main/java/BlockBuilding/ExtendedSortedNeighborhoodBlocking.java
@@ -1,32 +1,30 @@
/*
-* Copyright [2016] [George Papadakis (gpapadis@yahoo.gr)]
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
+ * Copyright [2016] [George Papadakis (gpapadis@yahoo.gr)]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package BlockBuilding;
import DataModel.BilateralBlock;
import DataModel.UnilateralBlock;
import Utilities.Converter;
-import java.io.IOException;
+
import java.util.Arrays;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.Term;
/**
*
@@ -35,12 +33,12 @@
public class ExtendedSortedNeighborhoodBlocking extends SortedNeighborhoodBlocking {
private static final Logger LOGGER = Logger.getLogger(ExtendedSortedNeighborhoodBlocking.class.getName());
-
+
public ExtendedSortedNeighborhoodBlocking() {
this(2);
LOGGER.log(Level.INFO, "Using default configuration for Extended Sorted Neighborhood Blocking.");
}
-
+
public ExtendedSortedNeighborhoodBlocking(int w) {
super(w);
}
@@ -49,7 +47,7 @@ public ExtendedSortedNeighborhoodBlocking(int w) {
public String getMethodConfiguration() {
return "Window size=" + windowSize;
}
-
+
@Override
public String getMethodInfo() {
return "Extended Sorted Neighborhood: it improves Sorted Neighborhood by sliding the window over the sorted list of blocking keys.";
@@ -59,27 +57,26 @@ public String getMethodInfo() {
public String getMethodName() {
return "Extended Sorted Neighborhood";
}
-
+
@Override
public String getMethodParameters() {
return "Extended Sorted Neighborhood involves a single parameter, due to its unsupervised, schema-agnostic blocking keys:\n"
+ "w, the fixed size of the window that slides over the sorted list of blocking keys.\n"
+ "Default value: 2.";
}
-
+
@Override
- protected void parseIndex(IndexReader iReader) {
- final Set blockingKeysSet = getTerms(iReader);
+ protected void parseIndex() {
+ final Set blockingKeysSet = invertedIndexD1.keySet();
String[] sortedTerms = blockingKeysSet.toArray(new String[blockingKeysSet.size()]);
Arrays.sort(sortedTerms);
//slide window over the sorted list of blocking keys
int upperLimit = sortedTerms.length - windowSize;
- int[] documentIds = getDocumentIds(iReader);
for (int i = 0; i <= upperLimit; i++) {
final Set entityIds = new HashSet<>();
for (int j = 0; j < windowSize; j++) {
- entityIds.addAll(getTermEntities(documentIds, iReader, sortedTerms[i + j]));
+ entityIds.addAll(invertedIndexD1.get(sortedTerms[i + j]));
}
if (1 < entityIds.size()) {
@@ -91,32 +88,26 @@ protected void parseIndex(IndexReader iReader) {
}
@Override
- protected void parseIndices(IndexReader iReader1, IndexReader iReader2) {
- final Set blockingKeysSet = getTerms(iReader1);
- blockingKeysSet.addAll(getTerms(iReader2));
+ protected void parseIndices() {
+ final Set blockingKeysSet = invertedIndexD1.keySet();
+ blockingKeysSet.addAll(invertedIndexD2.keySet());
String[] sortedTerms = blockingKeysSet.toArray(new String[blockingKeysSet.size()]);
Arrays.sort(sortedTerms);
//slide window over the sorted list of blocking keys
int upperLimit = sortedTerms.length - windowSize;
- int[] documentIdsD1 = getDocumentIds(iReader1);
- int[] documentIdsD2 = getDocumentIds(iReader2);
for (int i = 0; i <= upperLimit; i++) {
final Set entityIds1 = new HashSet<>();
final Set entityIds2 = new HashSet<>();
for (int j = 0; j < windowSize; j++) {
- try {
- int docFrequency = iReader1.docFreq(new Term(VALUE_LABEL, sortedTerms[i + j]));
- if (0 < docFrequency) {
- entityIds1.addAll(getTermEntities(documentIdsD1, iReader1, sortedTerms[i + j]));
- }
-
- docFrequency = iReader2.docFreq(new Term(VALUE_LABEL, sortedTerms[i + j]));
- if (0 < docFrequency) {
- entityIds2.addAll(getTermEntities(documentIdsD2, iReader2, sortedTerms[i + j]));
- }
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
+ List d1Entities = invertedIndexD1.get(sortedTerms[i + j]);
+ if (d1Entities != null) {
+ entityIds1.addAll(d1Entities);
+ }
+
+ List d2Entities = invertedIndexD2.get(sortedTerms[i + j]);
+ if (d2Entities != null) {
+ entityIds2.addAll(d2Entities);
}
}
diff --git a/jedai-core/src/main/java/BlockBuilding/SortedNeighborhoodBlocking.java b/jedai-core/src/main/java/BlockBuilding/SortedNeighborhoodBlocking.java
index c69c7602..aebf282e 100644
--- a/jedai-core/src/main/java/BlockBuilding/SortedNeighborhoodBlocking.java
+++ b/jedai-core/src/main/java/BlockBuilding/SortedNeighborhoodBlocking.java
@@ -1,26 +1,25 @@
/*
-* Copyright [2016] [George Papadakis (gpapadis@yahoo.gr)]
-*
-* Licensed under the Apache License, Version 2.0 (the "License");
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-* http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
+ * Copyright [2016] [George Papadakis (gpapadis@yahoo.gr)]
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package BlockBuilding;
import DataModel.AbstractBlock;
import DataModel.BilateralBlock;
import DataModel.UnilateralBlock;
import Utilities.Converter;
-import java.io.IOException;
+
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
@@ -29,15 +28,6 @@
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
-import org.apache.lucene.index.Fields;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.MultiFields;
-import org.apache.lucene.index.PostingsEnum;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.index.Terms;
-import org.apache.lucene.index.TermsEnum;
-import org.apache.lucene.search.DocIdSetIterator;
-import org.apache.lucene.util.BytesRef;
/**
*
@@ -46,14 +36,14 @@
public class SortedNeighborhoodBlocking extends StandardBlocking {
private static final Logger LOGGER = Logger.getLogger(SortedNeighborhoodBlocking.class.getName());
-
+
protected final int windowSize;
public SortedNeighborhoodBlocking() {
this(4);
LOGGER.log(Level.INFO, "Using default configuration for Sorted Neighborhood Blocking.");
}
-
+
public SortedNeighborhoodBlocking(int w) {
super();
windowSize = w;
@@ -64,7 +54,7 @@ public SortedNeighborhoodBlocking(int w) {
public String getMethodConfiguration() {
return "Window size=" + windowSize;
}
-
+
@Override
public String getMethodInfo() {
return "Sorted Neighborhood: it creates blocks based on the similarity of the blocking keys of Standard Blocking:\n"
@@ -76,40 +66,26 @@ public String getMethodInfo() {
public String getMethodName() {
return "Sorted Neighborhood";
}
-
+
@Override
public String getMethodParameters() {
return "Sorted Neighborhood involves a single parameter, due to its unsupervised, schema-agnostic blocking keys:\n"
+ "w, the fixed size of the sliding window.\n"
+ "Default value: 4.";
}
-
- protected Integer[] getSortedEntities(String[] sortedTerms, IndexReader iReader) {
- final List sortedEntityIds = new ArrayList<>();
-
- int[] documentIds = getDocumentIds(iReader);
- for (String blockingKey : sortedTerms) {
- List sortedIds = getTermEntities(documentIds, iReader, blockingKey);
- Collections.shuffle(sortedIds);
- sortedEntityIds.addAll(sortedIds);
- }
-
- return sortedEntityIds.toArray(new Integer[sortedEntityIds.size()]);
- }
- protected Integer[] getSortedEntities(String[] sortedTerms, IndexReader d1Reader, IndexReader d2Reader) {
- int datasetLimit = d1Reader.numDocs();
+ protected Integer[] getMixedSortedEntities(String[] sortedTerms) {
+ int datasetLimit = entityProfilesD1.size();
final List sortedEntityIds = new ArrayList<>();
- int[] documentIdsD1 = getDocumentIds(d1Reader);
- int[] documentIdsD2 = getDocumentIds(d2Reader);
for (String blockingKey : sortedTerms) {
List sortedIds = new ArrayList<>();
- sortedIds.addAll(getTermEntities(documentIdsD1, d1Reader, blockingKey));
+ sortedIds.addAll(invertedIndexD1.get(blockingKey));
- getTermEntities(documentIdsD2, d2Reader, blockingKey).stream().forEach((entityId) -> {
+ List d2EntityIds = invertedIndexD2.get(blockingKey);
+ for (Integer entityId : d2EntityIds) {
sortedIds.add(datasetLimit + entityId);
- });
+ }
Collections.shuffle(sortedIds);
sortedEntityIds.addAll(sortedIds);
@@ -118,52 +94,25 @@ protected Integer[] getSortedEntities(String[] sortedTerms, IndexReader d1Reader
return sortedEntityIds.toArray(new Integer[sortedEntityIds.size()]);
}
- protected List getTermEntities(int[] docIds, IndexReader iReader, String blockingKey) {
- try {
- Term term = new Term(VALUE_LABEL, blockingKey);
- List entityIds = new ArrayList<>();
- int docFrequency = iReader.docFreq(term);
- if (0 < docFrequency) {
- BytesRef text = term.bytes();
- PostingsEnum pe = MultiFields.getTermDocsEnum(iReader, VALUE_LABEL, text);
- int doc;
- while ((doc = pe.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
- entityIds.add(docIds[doc]);
- }
- }
+ protected Integer[] getSortedEntities(String[] sortedTerms) {
+ final List sortedEntityIds = new ArrayList<>();
- return entityIds;
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
- return null;
+ for (String blockingKey : sortedTerms) {
+ List sortedIds = invertedIndexD1.get(blockingKey);
+ Collections.shuffle(sortedIds);
+ sortedEntityIds.addAll(sortedIds);
}
- }
- protected Set getTerms(IndexReader iReader) {
- Set sortedTerms = new HashSet<>();
- try {
- Fields fields = MultiFields.getFields(iReader);
- for (String field : fields) {
- Terms terms = fields.terms(field);
- TermsEnum termsEnum = terms.iterator();
- BytesRef text;
- while ((text = termsEnum.next()) != null) {
- sortedTerms.add(text.utf8ToString());
- }
- }
- } catch (IOException ex) {
- LOGGER.log(Level.SEVERE, null, ex);
- }
- return sortedTerms;
+ return sortedEntityIds.toArray(new Integer[sortedEntityIds.size()]);
}
@Override
- protected void parseIndex(IndexReader iReader) {
- final Set blockingKeysSet = getTerms(iReader);
+ protected void parseIndex() {
+ final Set blockingKeysSet = invertedIndexD1.keySet();
String[] sortedTerms = blockingKeysSet.toArray(new String[blockingKeysSet.size()]);
Arrays.sort(sortedTerms);
- Integer[] allEntityIds = getSortedEntities(sortedTerms, iReader);
+ Integer[] allEntityIds = getSortedEntities(sortedTerms);
//slide window over the sorted list of entity ids
int upperLimit = allEntityIds.length - windowSize;
@@ -181,15 +130,15 @@ protected void parseIndex(IndexReader iReader) {
}
}
- protected void parseIndices(IndexReader iReader1, IndexReader iReader2) {
- final Set blockingKeysSet = getTerms(iReader1);
- blockingKeysSet.addAll(getTerms(iReader2));
+ protected void parseIndices() {
+ final Set blockingKeysSet = invertedIndexD1.keySet();
+ blockingKeysSet.addAll(invertedIndexD2.keySet());
String[] sortedTerms = blockingKeysSet.toArray(new String[blockingKeysSet.size()]);
Arrays.sort(sortedTerms);
- Integer[] allEntityIds = getSortedEntities(sortedTerms, iReader1, iReader2);
+ Integer[] allEntityIds = getMixedSortedEntities(sortedTerms);
- int datasetLimit = iReader1.numDocs();
+ int datasetLimit = entityProfilesD1.size();
//slide window over the sorted list of entity ids
int upperLimit = allEntityIds.length - windowSize;
for (int i = 0; i <= upperLimit; i++) {
@@ -214,16 +163,12 @@ protected void parseIndices(IndexReader iReader1, IndexReader iReader2) {
@Override
public List readBlocks() {
- IndexReader iReaderD1 = openReader(indexDirectoryD1);
if (entityProfilesD2 == null) { //Dirty ER
- parseIndex(iReaderD1);
+ parseIndex();
} else {
- IndexReader iReaderD2 = openReader(indexDirectoryD2);
- parseIndices(iReaderD1, iReaderD2);
- closeReader(iReaderD2);
+ parseIndices();
}
- closeReader(iReaderD1);
-
+
return blocks;
}
}
diff --git a/jedai-core/target/classes/BlockBuilding/AbstractBlockBuilding.class b/jedai-core/target/classes/BlockBuilding/AbstractBlockBuilding.class
index e5c183dd..17df64f1 100644
Binary files a/jedai-core/target/classes/BlockBuilding/AbstractBlockBuilding.class and b/jedai-core/target/classes/BlockBuilding/AbstractBlockBuilding.class differ
diff --git a/jedai-core/target/classes/BlockBuilding/AttributeClusteringBlocking.class b/jedai-core/target/classes/BlockBuilding/AttributeClusteringBlocking.class
index a3c0f0e3..14a6d530 100644
Binary files a/jedai-core/target/classes/BlockBuilding/AttributeClusteringBlocking.class and b/jedai-core/target/classes/BlockBuilding/AttributeClusteringBlocking.class differ
diff --git a/jedai-core/target/classes/BlockBuilding/ExtendedQGramsBlocking.class b/jedai-core/target/classes/BlockBuilding/ExtendedQGramsBlocking.class
index ce08385f..3ec198df 100644
Binary files a/jedai-core/target/classes/BlockBuilding/ExtendedQGramsBlocking.class and b/jedai-core/target/classes/BlockBuilding/ExtendedQGramsBlocking.class differ
diff --git a/jedai-core/target/classes/BlockBuilding/ExtendedSortedNeighborhoodBlocking.class b/jedai-core/target/classes/BlockBuilding/ExtendedSortedNeighborhoodBlocking.class
index c717f8fe..c8aa62b0 100644
Binary files a/jedai-core/target/classes/BlockBuilding/ExtendedSortedNeighborhoodBlocking.class and b/jedai-core/target/classes/BlockBuilding/ExtendedSortedNeighborhoodBlocking.class differ
diff --git a/jedai-core/target/classes/BlockBuilding/ExtendedSuffixArraysBlocking.class b/jedai-core/target/classes/BlockBuilding/ExtendedSuffixArraysBlocking.class
index 16b28ca0..78d722d0 100644
Binary files a/jedai-core/target/classes/BlockBuilding/ExtendedSuffixArraysBlocking.class and b/jedai-core/target/classes/BlockBuilding/ExtendedSuffixArraysBlocking.class differ
diff --git a/jedai-core/target/classes/BlockBuilding/IBlockBuilding.class b/jedai-core/target/classes/BlockBuilding/IBlockBuilding.class
index d6932f6c..ae007473 100644
Binary files a/jedai-core/target/classes/BlockBuilding/IBlockBuilding.class and b/jedai-core/target/classes/BlockBuilding/IBlockBuilding.class differ
diff --git a/jedai-core/target/classes/BlockBuilding/QGramsBlocking.class b/jedai-core/target/classes/BlockBuilding/QGramsBlocking.class
index 2827f770..5175a972 100644
Binary files a/jedai-core/target/classes/BlockBuilding/QGramsBlocking.class and b/jedai-core/target/classes/BlockBuilding/QGramsBlocking.class differ
diff --git a/jedai-core/target/classes/BlockBuilding/SortedNeighborhoodBlocking.class b/jedai-core/target/classes/BlockBuilding/SortedNeighborhoodBlocking.class
index be9f695f..71f0f59b 100644
Binary files a/jedai-core/target/classes/BlockBuilding/SortedNeighborhoodBlocking.class and b/jedai-core/target/classes/BlockBuilding/SortedNeighborhoodBlocking.class differ
diff --git a/jedai-core/target/classes/BlockBuilding/StandardBlocking.class b/jedai-core/target/classes/BlockBuilding/StandardBlocking.class
index d4032dde..ac30bfee 100644
Binary files a/jedai-core/target/classes/BlockBuilding/StandardBlocking.class and b/jedai-core/target/classes/BlockBuilding/StandardBlocking.class differ
diff --git a/jedai-core/target/classes/BlockBuilding/SuffixArraysBlocking.class b/jedai-core/target/classes/BlockBuilding/SuffixArraysBlocking.class
index 5f4d56a7..40915cbc 100644
Binary files a/jedai-core/target/classes/BlockBuilding/SuffixArraysBlocking.class and b/jedai-core/target/classes/BlockBuilding/SuffixArraysBlocking.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/AbstractBlockProcessing.class b/jedai-core/target/classes/BlockProcessing/AbstractBlockProcessing.class
index 272c0d3d..70389138 100644
Binary files a/jedai-core/target/classes/BlockProcessing/AbstractBlockProcessing.class and b/jedai-core/target/classes/BlockProcessing/AbstractBlockProcessing.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/BlockRefinement/AbstractBlockPurging.class b/jedai-core/target/classes/BlockProcessing/BlockRefinement/AbstractBlockPurging.class
index 08f79cb2..46658349 100644
Binary files a/jedai-core/target/classes/BlockProcessing/BlockRefinement/AbstractBlockPurging.class and b/jedai-core/target/classes/BlockProcessing/BlockRefinement/AbstractBlockPurging.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockFiltering.class b/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockFiltering.class
index 0caf9031..81296078 100644
Binary files a/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockFiltering.class and b/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockFiltering.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockPruning.class b/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockPruning.class
index 789d279d..1b6f284a 100644
Binary files a/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockPruning.class and b/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockPruning.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockScheduling.class b/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockScheduling.class
index 88d2cc39..501e7533 100644
Binary files a/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockScheduling.class and b/jedai-core/target/classes/BlockProcessing/BlockRefinement/BlockScheduling.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/BlockRefinement/ComparisonsBasedBlockPurging.class b/jedai-core/target/classes/BlockProcessing/BlockRefinement/ComparisonsBasedBlockPurging.class
index 9439c221..bf8c5767 100644
Binary files a/jedai-core/target/classes/BlockProcessing/BlockRefinement/ComparisonsBasedBlockPurging.class and b/jedai-core/target/classes/BlockProcessing/BlockRefinement/ComparisonsBasedBlockPurging.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/BlockRefinement/SizeBasedBlockPurging.class b/jedai-core/target/classes/BlockProcessing/BlockRefinement/SizeBasedBlockPurging.class
index 0303252f..727740a0 100644
Binary files a/jedai-core/target/classes/BlockProcessing/BlockRefinement/SizeBasedBlockPurging.class and b/jedai-core/target/classes/BlockProcessing/BlockRefinement/SizeBasedBlockPurging.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/AbstractComparisonRefinementMethod.class b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/AbstractComparisonRefinementMethod.class
index 0a135f23..4fe104be 100644
Binary files a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/AbstractComparisonRefinementMethod.class and b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/AbstractComparisonRefinementMethod.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/AbstractMetablocking.class b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/AbstractMetablocking.class
index c1eadbb9..8a9adff7 100644
Binary files a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/AbstractMetablocking.class and b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/AbstractMetablocking.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/CardinalityEdgePruning.class b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/CardinalityEdgePruning.class
index c05fb664..31426ab9 100644
Binary files a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/CardinalityEdgePruning.class and b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/CardinalityEdgePruning.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/CardinalityNodePruning.class b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/CardinalityNodePruning.class
index 18f825bb..14e0a82a 100644
Binary files a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/CardinalityNodePruning.class and b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/CardinalityNodePruning.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ComparisonPropagation.class b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ComparisonPropagation.class
index 84d3036d..8a3ac0e7 100644
Binary files a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ComparisonPropagation.class and b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ComparisonPropagation.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ReciprocalCardinalityNodePruning.class b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ReciprocalCardinalityNodePruning.class
index 92b44cb3..363928cb 100644
Binary files a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ReciprocalCardinalityNodePruning.class and b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ReciprocalCardinalityNodePruning.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ReciprocalWeightedNodePruning.class b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ReciprocalWeightedNodePruning.class
index 0a18ab89..3c686e0d 100644
Binary files a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ReciprocalWeightedNodePruning.class and b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/ReciprocalWeightedNodePruning.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/WeightedEdgePruning.class b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/WeightedEdgePruning.class
index 00c5288a..2b869f87 100644
Binary files a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/WeightedEdgePruning.class and b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/WeightedEdgePruning.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/WeightedNodePruning.class b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/WeightedNodePruning.class
index 6c6f7e52..a091cd74 100644
Binary files a/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/WeightedNodePruning.class and b/jedai-core/target/classes/BlockProcessing/ComparisonRefinement/WeightedNodePruning.class differ
diff --git a/jedai-core/target/classes/BlockProcessing/IBlockProcessing.class b/jedai-core/target/classes/BlockProcessing/IBlockProcessing.class
index 57ddf62c..4809443f 100644
Binary files a/jedai-core/target/classes/BlockProcessing/IBlockProcessing.class and b/jedai-core/target/classes/BlockProcessing/IBlockProcessing.class differ
diff --git a/jedai-core/target/classes/DataModel/AbstractBlock.class b/jedai-core/target/classes/DataModel/AbstractBlock.class
index 8882622c..c74ae123 100644
Binary files a/jedai-core/target/classes/DataModel/AbstractBlock.class and b/jedai-core/target/classes/DataModel/AbstractBlock.class differ
diff --git a/jedai-core/target/classes/DataModel/Attribute.class b/jedai-core/target/classes/DataModel/Attribute.class
index 2047cc17..20e1e605 100644
Binary files a/jedai-core/target/classes/DataModel/Attribute.class and b/jedai-core/target/classes/DataModel/Attribute.class differ
diff --git a/jedai-core/target/classes/DataModel/BilateralBlock.class b/jedai-core/target/classes/DataModel/BilateralBlock.class
index 1d558ba4..0d326e13 100644
Binary files a/jedai-core/target/classes/DataModel/BilateralBlock.class and b/jedai-core/target/classes/DataModel/BilateralBlock.class differ
diff --git a/jedai-core/target/classes/DataModel/Comparison.class b/jedai-core/target/classes/DataModel/Comparison.class
index 13249ef6..715ac7a7 100644
Binary files a/jedai-core/target/classes/DataModel/Comparison.class and b/jedai-core/target/classes/DataModel/Comparison.class differ
diff --git a/jedai-core/target/classes/DataModel/ComparisonIterator.class b/jedai-core/target/classes/DataModel/ComparisonIterator.class
index 20615938..3ad0e864 100644
Binary files a/jedai-core/target/classes/DataModel/ComparisonIterator.class and b/jedai-core/target/classes/DataModel/ComparisonIterator.class differ
diff --git a/jedai-core/target/classes/DataModel/DecomposedBlock.class b/jedai-core/target/classes/DataModel/DecomposedBlock.class
index ae3c9220..e86bb5a9 100644
Binary files a/jedai-core/target/classes/DataModel/DecomposedBlock.class and b/jedai-core/target/classes/DataModel/DecomposedBlock.class differ
diff --git a/jedai-core/target/classes/DataModel/EntityProfile.class b/jedai-core/target/classes/DataModel/EntityProfile.class
index 2a5b9e47..5d46f9ec 100644
Binary files a/jedai-core/target/classes/DataModel/EntityProfile.class and b/jedai-core/target/classes/DataModel/EntityProfile.class differ
diff --git a/jedai-core/target/classes/DataModel/EquivalenceCluster.class b/jedai-core/target/classes/DataModel/EquivalenceCluster.class
index fe263f88..3336a68c 100644
Binary files a/jedai-core/target/classes/DataModel/EquivalenceCluster.class and b/jedai-core/target/classes/DataModel/EquivalenceCluster.class differ
diff --git a/jedai-core/target/classes/DataModel/GomoryHuTree.class b/jedai-core/target/classes/DataModel/GomoryHuTree.class
index 5e94c773..768e4a09 100644
Binary files a/jedai-core/target/classes/DataModel/GomoryHuTree.class and b/jedai-core/target/classes/DataModel/GomoryHuTree.class differ
diff --git a/jedai-core/target/classes/DataModel/IdDuplicates.class b/jedai-core/target/classes/DataModel/IdDuplicates.class
index 6a2473e5..8bd083e4 100644
Binary files a/jedai-core/target/classes/DataModel/IdDuplicates.class and b/jedai-core/target/classes/DataModel/IdDuplicates.class differ
diff --git a/jedai-core/target/classes/DataModel/PairIterator.class b/jedai-core/target/classes/DataModel/PairIterator.class
index 4995d0e6..1bc4553a 100644
Binary files a/jedai-core/target/classes/DataModel/PairIterator.class and b/jedai-core/target/classes/DataModel/PairIterator.class differ
diff --git a/jedai-core/target/classes/DataModel/SimilarityEdge.class b/jedai-core/target/classes/DataModel/SimilarityEdge.class
index 7456b8f2..30c67123 100644
Binary files a/jedai-core/target/classes/DataModel/SimilarityEdge.class and b/jedai-core/target/classes/DataModel/SimilarityEdge.class differ
diff --git a/jedai-core/target/classes/DataModel/SimilarityPairs.class b/jedai-core/target/classes/DataModel/SimilarityPairs.class
index 8b81af8d..c92afd87 100644
Binary files a/jedai-core/target/classes/DataModel/SimilarityPairs.class and b/jedai-core/target/classes/DataModel/SimilarityPairs.class differ
diff --git a/jedai-core/target/classes/DataModel/UnilateralBlock.class b/jedai-core/target/classes/DataModel/UnilateralBlock.class
index 0c56e8e8..df96511c 100644
Binary files a/jedai-core/target/classes/DataModel/UnilateralBlock.class and b/jedai-core/target/classes/DataModel/UnilateralBlock.class differ
diff --git a/jedai-core/target/classes/DataModel/VertexWeight.class b/jedai-core/target/classes/DataModel/VertexWeight.class
index 432c3706..7cbce90e 100644
Binary files a/jedai-core/target/classes/DataModel/VertexWeight.class and b/jedai-core/target/classes/DataModel/VertexWeight.class differ
diff --git a/jedai-core/target/classes/DataReader/AbstractReader.class b/jedai-core/target/classes/DataReader/AbstractReader.class
index bc034550..8d731900 100644
Binary files a/jedai-core/target/classes/DataReader/AbstractReader.class and b/jedai-core/target/classes/DataReader/AbstractReader.class differ
diff --git a/jedai-core/target/classes/DataReader/EntityReader/AbstractEntityReader.class b/jedai-core/target/classes/DataReader/EntityReader/AbstractEntityReader.class
index 124a929f..ffa080a4 100644
Binary files a/jedai-core/target/classes/DataReader/EntityReader/AbstractEntityReader.class and b/jedai-core/target/classes/DataReader/EntityReader/AbstractEntityReader.class differ
diff --git a/jedai-core/target/classes/DataReader/EntityReader/EntityCSVReader.class b/jedai-core/target/classes/DataReader/EntityReader/EntityCSVReader.class
index 83bb2c07..211480ca 100644
Binary files a/jedai-core/target/classes/DataReader/EntityReader/EntityCSVReader.class and b/jedai-core/target/classes/DataReader/EntityReader/EntityCSVReader.class differ
diff --git a/jedai-core/target/classes/DataReader/EntityReader/EntityDBReader.class b/jedai-core/target/classes/DataReader/EntityReader/EntityDBReader.class
index 218a5aec..878b5b9e 100644
Binary files a/jedai-core/target/classes/DataReader/EntityReader/EntityDBReader.class and b/jedai-core/target/classes/DataReader/EntityReader/EntityDBReader.class differ
diff --git a/jedai-core/target/classes/DataReader/EntityReader/EntityRDFReader.class b/jedai-core/target/classes/DataReader/EntityReader/EntityRDFReader.class
index d73c4a75..0ccdc157 100644
Binary files a/jedai-core/target/classes/DataReader/EntityReader/EntityRDFReader.class and b/jedai-core/target/classes/DataReader/EntityReader/EntityRDFReader.class differ
diff --git a/jedai-core/target/classes/DataReader/EntityReader/EntitySerializationReader.class b/jedai-core/target/classes/DataReader/EntityReader/EntitySerializationReader.class
index 255a9149..0780677c 100644
Binary files a/jedai-core/target/classes/DataReader/EntityReader/EntitySerializationReader.class and b/jedai-core/target/classes/DataReader/EntityReader/EntitySerializationReader.class differ
diff --git a/jedai-core/target/classes/DataReader/EntityReader/IEntityReader.class b/jedai-core/target/classes/DataReader/EntityReader/IEntityReader.class
index aff78c30..cb26e741 100644
Binary files a/jedai-core/target/classes/DataReader/EntityReader/IEntityReader.class and b/jedai-core/target/classes/DataReader/EntityReader/IEntityReader.class differ
diff --git a/jedai-core/target/classes/DataReader/EntityReader/XMLreader.class b/jedai-core/target/classes/DataReader/EntityReader/XMLreader.class
index dc360fb5..dc1f55d9 100644
Binary files a/jedai-core/target/classes/DataReader/EntityReader/XMLreader.class and b/jedai-core/target/classes/DataReader/EntityReader/XMLreader.class differ
diff --git a/jedai-core/target/classes/DataReader/GroundTruthReader/AbstractGtReader.class b/jedai-core/target/classes/DataReader/GroundTruthReader/AbstractGtReader.class
index 7ac22736..f3d838c9 100644
Binary files a/jedai-core/target/classes/DataReader/GroundTruthReader/AbstractGtReader.class and b/jedai-core/target/classes/DataReader/GroundTruthReader/AbstractGtReader.class differ
diff --git a/jedai-core/target/classes/DataReader/GroundTruthReader/GtCSVReader.class b/jedai-core/target/classes/DataReader/GroundTruthReader/GtCSVReader.class
index ce861bb4..3721f8a3 100644
Binary files a/jedai-core/target/classes/DataReader/GroundTruthReader/GtCSVReader.class and b/jedai-core/target/classes/DataReader/GroundTruthReader/GtCSVReader.class differ
diff --git a/jedai-core/target/classes/DataReader/GroundTruthReader/GtIIMBbenchmarksReader.class b/jedai-core/target/classes/DataReader/GroundTruthReader/GtIIMBbenchmarksReader.class
index 8944e532..63eea444 100644
Binary files a/jedai-core/target/classes/DataReader/GroundTruthReader/GtIIMBbenchmarksReader.class and b/jedai-core/target/classes/DataReader/GroundTruthReader/GtIIMBbenchmarksReader.class differ
diff --git a/jedai-core/target/classes/DataReader/GroundTruthReader/GtOAEIbenchmarksReader.class b/jedai-core/target/classes/DataReader/GroundTruthReader/GtOAEIbenchmarksReader.class
index 08104856..8bc25af1 100644
Binary files a/jedai-core/target/classes/DataReader/GroundTruthReader/GtOAEIbenchmarksReader.class and b/jedai-core/target/classes/DataReader/GroundTruthReader/GtOAEIbenchmarksReader.class differ
diff --git a/jedai-core/target/classes/DataReader/GroundTruthReader/GtRDFReader.class b/jedai-core/target/classes/DataReader/GroundTruthReader/GtRDFReader.class
index e302a492..71ff18a9 100644
Binary files a/jedai-core/target/classes/DataReader/GroundTruthReader/GtRDFReader.class and b/jedai-core/target/classes/DataReader/GroundTruthReader/GtRDFReader.class differ
diff --git a/jedai-core/target/classes/DataReader/GroundTruthReader/GtSerializationReader.class b/jedai-core/target/classes/DataReader/GroundTruthReader/GtSerializationReader.class
index 12c8c5cd..781f792d 100644
Binary files a/jedai-core/target/classes/DataReader/GroundTruthReader/GtSerializationReader.class and b/jedai-core/target/classes/DataReader/GroundTruthReader/GtSerializationReader.class differ
diff --git a/jedai-core/target/classes/DataReader/GroundTruthReader/IGroundTruthReader.class b/jedai-core/target/classes/DataReader/GroundTruthReader/IGroundTruthReader.class
index c2c7579e..104b0773 100644
Binary files a/jedai-core/target/classes/DataReader/GroundTruthReader/IGroundTruthReader.class and b/jedai-core/target/classes/DataReader/GroundTruthReader/IGroundTruthReader.class differ
diff --git a/jedai-core/target/classes/DataReader/IDataReader.class b/jedai-core/target/classes/DataReader/IDataReader.class
index 0b8bb6bb..17f6d920 100644
Binary files a/jedai-core/target/classes/DataReader/IDataReader.class and b/jedai-core/target/classes/DataReader/IDataReader.class differ
diff --git a/jedai-core/target/classes/EntityClustering/AbstractEntityClustering.class b/jedai-core/target/classes/EntityClustering/AbstractEntityClustering.class
index 459b5a43..70bf0556 100644
Binary files a/jedai-core/target/classes/EntityClustering/AbstractEntityClustering.class and b/jedai-core/target/classes/EntityClustering/AbstractEntityClustering.class differ
diff --git a/jedai-core/target/classes/EntityClustering/CenterClustering.class b/jedai-core/target/classes/EntityClustering/CenterClustering.class
index 7aac472e..60802ea4 100644
Binary files a/jedai-core/target/classes/EntityClustering/CenterClustering.class and b/jedai-core/target/classes/EntityClustering/CenterClustering.class differ
diff --git a/jedai-core/target/classes/EntityClustering/ConnectedComponentsClustering.class b/jedai-core/target/classes/EntityClustering/ConnectedComponentsClustering.class
index fb681f09..1449040f 100644
Binary files a/jedai-core/target/classes/EntityClustering/ConnectedComponentsClustering.class and b/jedai-core/target/classes/EntityClustering/ConnectedComponentsClustering.class differ
diff --git a/jedai-core/target/classes/EntityClustering/CutClustering.class b/jedai-core/target/classes/EntityClustering/CutClustering.class
index 194ca453..9a0cd74f 100644
Binary files a/jedai-core/target/classes/EntityClustering/CutClustering.class and b/jedai-core/target/classes/EntityClustering/CutClustering.class differ
diff --git a/jedai-core/target/classes/EntityClustering/IEntityClustering.class b/jedai-core/target/classes/EntityClustering/IEntityClustering.class
index be00160a..869d4664 100644
Binary files a/jedai-core/target/classes/EntityClustering/IEntityClustering.class and b/jedai-core/target/classes/EntityClustering/IEntityClustering.class differ
diff --git a/jedai-core/target/classes/EntityClustering/MarkovClustering.class b/jedai-core/target/classes/EntityClustering/MarkovClustering.class
index de5a122a..e70a90c2 100644
Binary files a/jedai-core/target/classes/EntityClustering/MarkovClustering.class and b/jedai-core/target/classes/EntityClustering/MarkovClustering.class differ
diff --git a/jedai-core/target/classes/EntityClustering/MergeCenterClustering.class b/jedai-core/target/classes/EntityClustering/MergeCenterClustering.class
index f257e94a..c4835bdd 100644
Binary files a/jedai-core/target/classes/EntityClustering/MergeCenterClustering.class and b/jedai-core/target/classes/EntityClustering/MergeCenterClustering.class differ
diff --git a/jedai-core/target/classes/EntityClustering/RicochetSRClustering.class b/jedai-core/target/classes/EntityClustering/RicochetSRClustering.class
index e99aa538..8d201fa5 100644
Binary files a/jedai-core/target/classes/EntityClustering/RicochetSRClustering.class and b/jedai-core/target/classes/EntityClustering/RicochetSRClustering.class differ
diff --git a/jedai-core/target/classes/EntityClustering/UniqueMappingClustering.class b/jedai-core/target/classes/EntityClustering/UniqueMappingClustering.class
index 95a0a03d..f31c27a5 100644
Binary files a/jedai-core/target/classes/EntityClustering/UniqueMappingClustering.class and b/jedai-core/target/classes/EntityClustering/UniqueMappingClustering.class differ
diff --git a/jedai-core/target/classes/EntityMatching/AbstractEntityMatching.class b/jedai-core/target/classes/EntityMatching/AbstractEntityMatching.class
index 1a9b1e75..eb064091 100644
Binary files a/jedai-core/target/classes/EntityMatching/AbstractEntityMatching.class and b/jedai-core/target/classes/EntityMatching/AbstractEntityMatching.class differ
diff --git a/jedai-core/target/classes/EntityMatching/GroupLinkage.class b/jedai-core/target/classes/EntityMatching/GroupLinkage.class
index 37e7c0bf..dca43168 100644
Binary files a/jedai-core/target/classes/EntityMatching/GroupLinkage.class and b/jedai-core/target/classes/EntityMatching/GroupLinkage.class differ
diff --git a/jedai-core/target/classes/EntityMatching/IEntityMatching.class b/jedai-core/target/classes/EntityMatching/IEntityMatching.class
index 1e7d3771..69d5b5c3 100644
Binary files a/jedai-core/target/classes/EntityMatching/IEntityMatching.class and b/jedai-core/target/classes/EntityMatching/IEntityMatching.class differ
diff --git a/jedai-core/target/classes/EntityMatching/ProfileMatcher.class b/jedai-core/target/classes/EntityMatching/ProfileMatcher.class
index c85b0291..a8832d0a 100644
Binary files a/jedai-core/target/classes/EntityMatching/ProfileMatcher.class and b/jedai-core/target/classes/EntityMatching/ProfileMatcher.class differ
diff --git a/jedai-core/target/classes/TextModels/AbstractModel.class b/jedai-core/target/classes/TextModels/AbstractModel.class
index 93701655..bb9cfd32 100644
Binary files a/jedai-core/target/classes/TextModels/AbstractModel.class and b/jedai-core/target/classes/TextModels/AbstractModel.class differ
diff --git a/jedai-core/target/classes/TextModels/BagModel.class b/jedai-core/target/classes/TextModels/BagModel.class
index e52d6549..cbaad6ef 100644
Binary files a/jedai-core/target/classes/TextModels/BagModel.class and b/jedai-core/target/classes/TextModels/BagModel.class differ
diff --git a/jedai-core/target/classes/TextModels/CharacterNGramGraphs.class b/jedai-core/target/classes/TextModels/CharacterNGramGraphs.class
index 868643df..41f13e65 100644
Binary files a/jedai-core/target/classes/TextModels/CharacterNGramGraphs.class and b/jedai-core/target/classes/TextModels/CharacterNGramGraphs.class differ
diff --git a/jedai-core/target/classes/TextModels/CharacterNGrams.class b/jedai-core/target/classes/TextModels/CharacterNGrams.class
index 0b0caf38..fbb24134 100644
Binary files a/jedai-core/target/classes/TextModels/CharacterNGrams.class and b/jedai-core/target/classes/TextModels/CharacterNGrams.class differ
diff --git a/jedai-core/target/classes/TextModels/GraphModel.class b/jedai-core/target/classes/TextModels/GraphModel.class
index de246908..1ac2a4bc 100644
Binary files a/jedai-core/target/classes/TextModels/GraphModel.class and b/jedai-core/target/classes/TextModels/GraphModel.class differ
diff --git a/jedai-core/target/classes/TextModels/ITextModel.class b/jedai-core/target/classes/TextModels/ITextModel.class
index b41f0fa7..b6a2fb15 100644
Binary files a/jedai-core/target/classes/TextModels/ITextModel.class and b/jedai-core/target/classes/TextModels/ITextModel.class differ
diff --git a/jedai-core/target/classes/TextModels/IncrementalCounter.class b/jedai-core/target/classes/TextModels/IncrementalCounter.class
index e8cee908..1820734b 100644
Binary files a/jedai-core/target/classes/TextModels/IncrementalCounter.class and b/jedai-core/target/classes/TextModels/IncrementalCounter.class differ
diff --git a/jedai-core/target/classes/TextModels/TokenNGramGraphs.class b/jedai-core/target/classes/TextModels/TokenNGramGraphs.class
index e2acbaf1..c0e4cac4 100644
Binary files a/jedai-core/target/classes/TextModels/TokenNGramGraphs.class and b/jedai-core/target/classes/TextModels/TokenNGramGraphs.class differ
diff --git a/jedai-core/target/classes/TextModels/TokenNGrams.class b/jedai-core/target/classes/TextModels/TokenNGrams.class
index cdca71ca..c18b1fe5 100644
Binary files a/jedai-core/target/classes/TextModels/TokenNGrams.class and b/jedai-core/target/classes/TextModels/TokenNGrams.class differ
diff --git a/jedai-core/target/classes/TextModels/TokenNGramsWithGlobalWeights.class b/jedai-core/target/classes/TextModels/TokenNGramsWithGlobalWeights.class
index dbdd1762..83a165d6 100644
Binary files a/jedai-core/target/classes/TextModels/TokenNGramsWithGlobalWeights.class and b/jedai-core/target/classes/TextModels/TokenNGramsWithGlobalWeights.class differ
diff --git a/jedai-core/target/classes/Utilities/BlocksPerformance.class b/jedai-core/target/classes/Utilities/BlocksPerformance.class
index 4e9e58fd..68be324e 100644
Binary files a/jedai-core/target/classes/Utilities/BlocksPerformance.class and b/jedai-core/target/classes/Utilities/BlocksPerformance.class differ
diff --git a/jedai-core/target/classes/Utilities/ClustersPerformance.class b/jedai-core/target/classes/Utilities/ClustersPerformance.class
index a38b3319..528e70c3 100644
Binary files a/jedai-core/target/classes/Utilities/ClustersPerformance.class and b/jedai-core/target/classes/Utilities/ClustersPerformance.class differ
diff --git a/jedai-core/target/classes/Utilities/Comparators/BlockCardinalityComparator.class b/jedai-core/target/classes/Utilities/Comparators/BlockCardinalityComparator.class
index 490289f6..0f4958fb 100644
Binary files a/jedai-core/target/classes/Utilities/Comparators/BlockCardinalityComparator.class and b/jedai-core/target/classes/Utilities/Comparators/BlockCardinalityComparator.class differ
diff --git a/jedai-core/target/classes/Utilities/Comparators/BlockUtilityComparator.class b/jedai-core/target/classes/Utilities/Comparators/BlockUtilityComparator.class
index fb602784..5d5cde24 100644
Binary files a/jedai-core/target/classes/Utilities/Comparators/BlockUtilityComparator.class and b/jedai-core/target/classes/Utilities/Comparators/BlockUtilityComparator.class differ
diff --git a/jedai-core/target/classes/Utilities/Comparators/ComparisonWeightComparator.class b/jedai-core/target/classes/Utilities/Comparators/ComparisonWeightComparator.class
index 350e9820..44eb9c40 100644
Binary files a/jedai-core/target/classes/Utilities/Comparators/ComparisonWeightComparator.class and b/jedai-core/target/classes/Utilities/Comparators/ComparisonWeightComparator.class differ
diff --git a/jedai-core/target/classes/Utilities/Comparators/SimilarityEdgeComparator.class b/jedai-core/target/classes/Utilities/Comparators/SimilarityEdgeComparator.class
index 4ae14214..7bf6d8cb 100644
Binary files a/jedai-core/target/classes/Utilities/Comparators/SimilarityEdgeComparator.class and b/jedai-core/target/classes/Utilities/Comparators/SimilarityEdgeComparator.class differ
diff --git a/jedai-core/target/classes/Utilities/Comparators/VertexWeightComparator.class b/jedai-core/target/classes/Utilities/Comparators/VertexWeightComparator.class
index 53b4b298..8ca29256 100644
Binary files a/jedai-core/target/classes/Utilities/Comparators/VertexWeightComparator.class and b/jedai-core/target/classes/Utilities/Comparators/VertexWeightComparator.class differ
diff --git a/jedai-core/target/classes/Utilities/Converter.class b/jedai-core/target/classes/Utilities/Converter.class
index 335acee6..ca005b97 100644
Binary files a/jedai-core/target/classes/Utilities/Converter.class and b/jedai-core/target/classes/Utilities/Converter.class differ
diff --git a/jedai-core/target/classes/Utilities/DataStructures/AbstractDuplicatePropagation.class b/jedai-core/target/classes/Utilities/DataStructures/AbstractDuplicatePropagation.class
index d62515fc..4576a76d 100644
Binary files a/jedai-core/target/classes/Utilities/DataStructures/AbstractDuplicatePropagation.class and b/jedai-core/target/classes/Utilities/DataStructures/AbstractDuplicatePropagation.class differ
diff --git a/jedai-core/target/classes/Utilities/DataStructures/BilateralDuplicatePropagation.class b/jedai-core/target/classes/Utilities/DataStructures/BilateralDuplicatePropagation.class
index cc66dd15..6053a1bf 100644
Binary files a/jedai-core/target/classes/Utilities/DataStructures/BilateralDuplicatePropagation.class and b/jedai-core/target/classes/Utilities/DataStructures/BilateralDuplicatePropagation.class differ
diff --git a/jedai-core/target/classes/Utilities/DataStructures/EntityIndex.class b/jedai-core/target/classes/Utilities/DataStructures/EntityIndex.class
index a9970156..ddb7bfe8 100644
Binary files a/jedai-core/target/classes/Utilities/DataStructures/EntityIndex.class and b/jedai-core/target/classes/Utilities/DataStructures/EntityIndex.class differ
diff --git a/jedai-core/target/classes/Utilities/DataStructures/GroundTruthIndex.class b/jedai-core/target/classes/Utilities/DataStructures/GroundTruthIndex.class
index 9a05404e..6be218ae 100644
Binary files a/jedai-core/target/classes/Utilities/DataStructures/GroundTruthIndex.class and b/jedai-core/target/classes/Utilities/DataStructures/GroundTruthIndex.class differ
diff --git a/jedai-core/target/classes/Utilities/DataStructures/UnilateralDuplicatePropagation.class b/jedai-core/target/classes/Utilities/DataStructures/UnilateralDuplicatePropagation.class
index 5b6ca7fc..15373232 100644
Binary files a/jedai-core/target/classes/Utilities/DataStructures/UnilateralDuplicatePropagation.class and b/jedai-core/target/classes/Utilities/DataStructures/UnilateralDuplicatePropagation.class differ
diff --git a/jedai-core/target/classes/Utilities/Enumerations/BlockBuildingMethod.class b/jedai-core/target/classes/Utilities/Enumerations/BlockBuildingMethod.class
index d37fe827..cead5aed 100644
Binary files a/jedai-core/target/classes/Utilities/Enumerations/BlockBuildingMethod.class and b/jedai-core/target/classes/Utilities/Enumerations/BlockBuildingMethod.class differ
diff --git a/jedai-core/target/classes/Utilities/Enumerations/RepresentationModel.class b/jedai-core/target/classes/Utilities/Enumerations/RepresentationModel.class
index f72d322f..fd00f444 100644
Binary files a/jedai-core/target/classes/Utilities/Enumerations/RepresentationModel.class and b/jedai-core/target/classes/Utilities/Enumerations/RepresentationModel.class differ
diff --git a/jedai-core/target/classes/Utilities/Enumerations/SimilarityMetric.class b/jedai-core/target/classes/Utilities/Enumerations/SimilarityMetric.class
index c991934d..4de29db2 100644
Binary files a/jedai-core/target/classes/Utilities/Enumerations/SimilarityMetric.class and b/jedai-core/target/classes/Utilities/Enumerations/SimilarityMetric.class differ
diff --git a/jedai-core/target/classes/Utilities/Enumerations/WeightingScheme.class b/jedai-core/target/classes/Utilities/Enumerations/WeightingScheme.class
index 7266c0d4..d6264af8 100644
Binary files a/jedai-core/target/classes/Utilities/Enumerations/WeightingScheme.class and b/jedai-core/target/classes/Utilities/Enumerations/WeightingScheme.class differ
diff --git a/jedai-core/target/classes/Utilities/PrintToFile.class b/jedai-core/target/classes/Utilities/PrintToFile.class
index 5d37776f..6ad2e608 100644
Binary files a/jedai-core/target/classes/Utilities/PrintToFile.class and b/jedai-core/target/classes/Utilities/PrintToFile.class differ
diff --git a/jedai-core/target/maven-archiver/pom.properties b/jedai-core/target/maven-archiver/pom.properties
index 180187dd..67f58aea 100644
--- a/jedai-core/target/maven-archiver/pom.properties
+++ b/jedai-core/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
#Generated by Maven
-#Thu Jun 22 10:17:42 EEST 2017
-version=1.1-SNAPSHOT
+#Thu Jun 22 12:28:59 EEST 2017
+version=1.1
groupId=jedai-core
-artifactId=jedai-core
+artifactId=jedaiLibrary
diff --git a/jedai-core/target/surefire-reports/BlockBuilding.TestAllMethodsCleanCleanER.txt b/jedai-core/target/surefire-reports/BlockBuilding.TestAllMethodsCleanCleanER.txt
index 7b75a25c..d9241d49 100644
--- a/jedai-core/target/surefire-reports/BlockBuilding.TestAllMethodsCleanCleanER.txt
+++ b/jedai-core/target/surefire-reports/BlockBuilding.TestAllMethodsCleanCleanER.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: BlockBuilding.TestAllMethodsCleanCleanER
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.024 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.009 sec
diff --git a/jedai-core/target/surefire-reports/BlockBuilding.TestAllMethodsDirtyER.txt b/jedai-core/target/surefire-reports/BlockBuilding.TestAllMethodsDirtyER.txt
index 1b6e7409..5d88f7f2 100644
--- a/jedai-core/target/surefire-reports/BlockBuilding.TestAllMethodsDirtyER.txt
+++ b/jedai-core/target/surefire-reports/BlockBuilding.TestAllMethodsDirtyER.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: BlockBuilding.TestAllMethodsDirtyER
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
diff --git a/jedai-core/target/surefire-reports/BlockProcessing.ComparisonRefinement.TestAllMethods.txt b/jedai-core/target/surefire-reports/BlockProcessing.ComparisonRefinement.TestAllMethods.txt
index e307de62..76b6413e 100644
--- a/jedai-core/target/surefire-reports/BlockProcessing.ComparisonRefinement.TestAllMethods.txt
+++ b/jedai-core/target/surefire-reports/BlockProcessing.ComparisonRefinement.TestAllMethods.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: BlockProcessing.ComparisonRefinement.TestAllMethods
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec
diff --git a/jedai-core/target/surefire-reports/DataReader.TestDBReader.txt b/jedai-core/target/surefire-reports/DataReader.TestDBReader.txt
index beeb27d8..19d923f2 100644
--- a/jedai-core/target/surefire-reports/DataReader.TestDBReader.txt
+++ b/jedai-core/target/surefire-reports/DataReader.TestDBReader.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: DataReader.TestDBReader
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
diff --git a/jedai-core/target/surefire-reports/DataReader.TestEntityCSVReader.txt b/jedai-core/target/surefire-reports/DataReader.TestEntityCSVReader.txt
index 8786034b..8ad10806 100644
--- a/jedai-core/target/surefire-reports/DataReader.TestEntityCSVReader.txt
+++ b/jedai-core/target/surefire-reports/DataReader.TestEntityCSVReader.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: DataReader.TestEntityCSVReader
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
diff --git a/jedai-core/target/surefire-reports/DataReader.TestGtIIMBbenchmarksReader.txt b/jedai-core/target/surefire-reports/DataReader.TestGtIIMBbenchmarksReader.txt
index 4840d8a1..9ab51dee 100644
--- a/jedai-core/target/surefire-reports/DataReader.TestGtIIMBbenchmarksReader.txt
+++ b/jedai-core/target/surefire-reports/DataReader.TestGtIIMBbenchmarksReader.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: DataReader.TestGtIIMBbenchmarksReader
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec
diff --git a/jedai-core/target/surefire-reports/DataReader.TestGtOAEIbenchmarksReader.txt b/jedai-core/target/surefire-reports/DataReader.TestGtOAEIbenchmarksReader.txt
index c375ea4a..c11386c5 100644
--- a/jedai-core/target/surefire-reports/DataReader.TestGtOAEIbenchmarksReader.txt
+++ b/jedai-core/target/surefire-reports/DataReader.TestGtOAEIbenchmarksReader.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: DataReader.TestGtOAEIbenchmarksReader
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec
diff --git a/jedai-core/target/surefire-reports/DataReader.TestGtRDFReader.txt b/jedai-core/target/surefire-reports/DataReader.TestGtRDFReader.txt
index 093a4286..aec8503a 100644
--- a/jedai-core/target/surefire-reports/DataReader.TestGtRDFReader.txt
+++ b/jedai-core/target/surefire-reports/DataReader.TestGtRDFReader.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: DataReader.TestGtRDFReader
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
diff --git a/jedai-core/target/surefire-reports/EntityMatching.TestAllMethods.txt b/jedai-core/target/surefire-reports/EntityMatching.TestAllMethods.txt
index dec7a5d9..ae95411c 100644
--- a/jedai-core/target/surefire-reports/EntityMatching.TestAllMethods.txt
+++ b/jedai-core/target/surefire-reports/EntityMatching.TestAllMethods.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: EntityMatching.TestAllMethods
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.002 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 sec
diff --git a/jedai-core/target/surefire-reports/EntityMatching.TestGroupLinkage.txt b/jedai-core/target/surefire-reports/EntityMatching.TestGroupLinkage.txt
index d118b89b..e8e2cc43 100644
--- a/jedai-core/target/surefire-reports/EntityMatching.TestGroupLinkage.txt
+++ b/jedai-core/target/surefire-reports/EntityMatching.TestGroupLinkage.txt
@@ -1,4 +1,4 @@
-------------------------------------------------------------------------------
Test set: EntityMatching.TestGroupLinkage
-------------------------------------------------------------------------------
-Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec
+Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 sec
diff --git a/jedai-core/target/surefire-reports/TEST-BlockBuilding.TestAllMethodsCleanCleanER.xml b/jedai-core/target/surefire-reports/TEST-BlockBuilding.TestAllMethodsCleanCleanER.xml
index 2e8b3f9f..663e8c85 100644
--- a/jedai-core/target/surefire-reports/TEST-BlockBuilding.TestAllMethodsCleanCleanER.xml
+++ b/jedai-core/target/surefire-reports/TEST-BlockBuilding.TestAllMethodsCleanCleanER.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/jedai-core/target/surefire-reports/TEST-BlockBuilding.TestAllMethodsDirtyER.xml b/jedai-core/target/surefire-reports/TEST-BlockBuilding.TestAllMethodsDirtyER.xml
index 31431748..6d8d96b1 100644
--- a/jedai-core/target/surefire-reports/TEST-BlockBuilding.TestAllMethodsDirtyER.xml
+++ b/jedai-core/target/surefire-reports/TEST-BlockBuilding.TestAllMethodsDirtyER.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/jedai-core/target/surefire-reports/TEST-BlockProcessing.ComparisonRefinement.TestAllMethods.xml b/jedai-core/target/surefire-reports/TEST-BlockProcessing.ComparisonRefinement.TestAllMethods.xml
index 155be1cc..ad0b39d3 100644
--- a/jedai-core/target/surefire-reports/TEST-BlockProcessing.ComparisonRefinement.TestAllMethods.xml
+++ b/jedai-core/target/surefire-reports/TEST-BlockProcessing.ComparisonRefinement.TestAllMethods.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/jedai-core/target/surefire-reports/TEST-DataReader.TestDBReader.xml b/jedai-core/target/surefire-reports/TEST-DataReader.TestDBReader.xml
index 6f77342a..a9b3100d 100644
--- a/jedai-core/target/surefire-reports/TEST-DataReader.TestDBReader.xml
+++ b/jedai-core/target/surefire-reports/TEST-DataReader.TestDBReader.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/jedai-core/target/surefire-reports/TEST-DataReader.TestEntityCSVReader.xml b/jedai-core/target/surefire-reports/TEST-DataReader.TestEntityCSVReader.xml
index dcca49a5..93337e0e 100644
--- a/jedai-core/target/surefire-reports/TEST-DataReader.TestEntityCSVReader.xml
+++ b/jedai-core/target/surefire-reports/TEST-DataReader.TestEntityCSVReader.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/jedai-core/target/surefire-reports/TEST-DataReader.TestGtOAEIbenchmarksReader.xml b/jedai-core/target/surefire-reports/TEST-DataReader.TestGtOAEIbenchmarksReader.xml
index 063c1cda..024e19c7 100644
--- a/jedai-core/target/surefire-reports/TEST-DataReader.TestGtOAEIbenchmarksReader.xml
+++ b/jedai-core/target/surefire-reports/TEST-DataReader.TestGtOAEIbenchmarksReader.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/jedai-core/target/surefire-reports/TEST-DataReader.TestGtRDFReader.xml b/jedai-core/target/surefire-reports/TEST-DataReader.TestGtRDFReader.xml
index 946e2620..1144ef84 100644
--- a/jedai-core/target/surefire-reports/TEST-DataReader.TestGtRDFReader.xml
+++ b/jedai-core/target/surefire-reports/TEST-DataReader.TestGtRDFReader.xml
@@ -1,5 +1,5 @@
-
+
diff --git a/jedai-core/target/test-classes/BlockBuilding/TestAllMethodsCleanCleanER.class b/jedai-core/target/test-classes/BlockBuilding/TestAllMethodsCleanCleanER.class
index e16ed9ed..1b0336ac 100644
Binary files a/jedai-core/target/test-classes/BlockBuilding/TestAllMethodsCleanCleanER.class and b/jedai-core/target/test-classes/BlockBuilding/TestAllMethodsCleanCleanER.class differ
diff --git a/jedai-core/target/test-classes/BlockBuilding/TestAllMethodsDirtyER.class b/jedai-core/target/test-classes/BlockBuilding/TestAllMethodsDirtyER.class
index 48b3abd8..8574e148 100644
Binary files a/jedai-core/target/test-classes/BlockBuilding/TestAllMethodsDirtyER.class and b/jedai-core/target/test-classes/BlockBuilding/TestAllMethodsDirtyER.class differ
diff --git a/jedai-core/target/test-classes/BlockProcessing/BlockRefinement/TestAllMethods.class b/jedai-core/target/test-classes/BlockProcessing/BlockRefinement/TestAllMethods.class
index 7b66303f..2b3bd987 100644
Binary files a/jedai-core/target/test-classes/BlockProcessing/BlockRefinement/TestAllMethods.class and b/jedai-core/target/test-classes/BlockProcessing/BlockRefinement/TestAllMethods.class differ
diff --git a/jedai-core/target/test-classes/BlockProcessing/ComparisonRefinement/TestAllMethods.class b/jedai-core/target/test-classes/BlockProcessing/ComparisonRefinement/TestAllMethods.class
index f5d803f4..506ec190 100644
Binary files a/jedai-core/target/test-classes/BlockProcessing/ComparisonRefinement/TestAllMethods.class and b/jedai-core/target/test-classes/BlockProcessing/ComparisonRefinement/TestAllMethods.class differ
diff --git a/jedai-core/target/test-classes/DataReader/TestDBReader.class b/jedai-core/target/test-classes/DataReader/TestDBReader.class
index 29f49c53..b5bd3af7 100644
Binary files a/jedai-core/target/test-classes/DataReader/TestDBReader.class and b/jedai-core/target/test-classes/DataReader/TestDBReader.class differ
diff --git a/jedai-core/target/test-classes/DataReader/TestEntityCSVReader.class b/jedai-core/target/test-classes/DataReader/TestEntityCSVReader.class
index 118ef4bd..d8d40612 100644
Binary files a/jedai-core/target/test-classes/DataReader/TestEntityCSVReader.class and b/jedai-core/target/test-classes/DataReader/TestEntityCSVReader.class differ
diff --git a/jedai-core/target/test-classes/DataReader/TestGtCSVReader.class b/jedai-core/target/test-classes/DataReader/TestGtCSVReader.class
index 65acac5d..379de628 100644
Binary files a/jedai-core/target/test-classes/DataReader/TestGtCSVReader.class and b/jedai-core/target/test-classes/DataReader/TestGtCSVReader.class differ
diff --git a/jedai-core/target/test-classes/DataReader/TestGtIIMBbenchmarksReader.class b/jedai-core/target/test-classes/DataReader/TestGtIIMBbenchmarksReader.class
index 53846d4d..d83930ea 100644
Binary files a/jedai-core/target/test-classes/DataReader/TestGtIIMBbenchmarksReader.class and b/jedai-core/target/test-classes/DataReader/TestGtIIMBbenchmarksReader.class differ
diff --git a/jedai-core/target/test-classes/DataReader/TestGtOAEIbenchmarksReader.class b/jedai-core/target/test-classes/DataReader/TestGtOAEIbenchmarksReader.class
index 8f253880..4a9e63d5 100644
Binary files a/jedai-core/target/test-classes/DataReader/TestGtOAEIbenchmarksReader.class and b/jedai-core/target/test-classes/DataReader/TestGtOAEIbenchmarksReader.class differ
diff --git a/jedai-core/target/test-classes/DataReader/TestGtRDFReader.class b/jedai-core/target/test-classes/DataReader/TestGtRDFReader.class
index 905558f5..d9b3d645 100644
Binary files a/jedai-core/target/test-classes/DataReader/TestGtRDFReader.class and b/jedai-core/target/test-classes/DataReader/TestGtRDFReader.class differ
diff --git a/jedai-core/target/test-classes/DataReader/TestRdfReader.class b/jedai-core/target/test-classes/DataReader/TestRdfReader.class
index cd8ccc34..eaca37b9 100644
Binary files a/jedai-core/target/test-classes/DataReader/TestRdfReader.class and b/jedai-core/target/test-classes/DataReader/TestRdfReader.class differ
diff --git a/jedai-core/target/test-classes/DataReader/TestXMLreader.class b/jedai-core/target/test-classes/DataReader/TestXMLreader.class
index bf8cf2a2..6da9fab6 100644
Binary files a/jedai-core/target/test-classes/DataReader/TestXMLreader.class and b/jedai-core/target/test-classes/DataReader/TestXMLreader.class differ
diff --git a/jedai-core/target/test-classes/EntityClustering/TestAllMethods.class b/jedai-core/target/test-classes/EntityClustering/TestAllMethods.class
index 8bcf6485..44074d84 100644
Binary files a/jedai-core/target/test-classes/EntityClustering/TestAllMethods.class and b/jedai-core/target/test-classes/EntityClustering/TestAllMethods.class differ
diff --git a/jedai-core/target/test-classes/EntityMatching/TestAllMethods.class b/jedai-core/target/test-classes/EntityMatching/TestAllMethods.class
index fe6df7fa..eb3f7f29 100644
Binary files a/jedai-core/target/test-classes/EntityMatching/TestAllMethods.class and b/jedai-core/target/test-classes/EntityMatching/TestAllMethods.class differ
diff --git a/jedai-core/target/test-classes/EntityMatching/TestGroupLinkage.class b/jedai-core/target/test-classes/EntityMatching/TestGroupLinkage.class
index f95e56d4..bc3eff63 100644
Binary files a/jedai-core/target/test-classes/EntityMatching/TestGroupLinkage.class and b/jedai-core/target/test-classes/EntityMatching/TestGroupLinkage.class differ
diff --git a/jedai-core/target/test-classes/GeneralExamples/DirtyErDatasetStatistics.class b/jedai-core/target/test-classes/GeneralExamples/DirtyErDatasetStatistics.class
index f15e16df..93ae115d 100644
Binary files a/jedai-core/target/test-classes/GeneralExamples/DirtyErDatasetStatistics.class and b/jedai-core/target/test-classes/GeneralExamples/DirtyErDatasetStatistics.class differ