diff --git a/mining/src/main/java/amie/mining/assistant/DefaultMiningAssistant.java b/mining/src/main/java/amie/mining/assistant/DefaultMiningAssistant.java index 6f36b3f..90841e9 100644 --- a/mining/src/main/java/amie/mining/assistant/DefaultMiningAssistant.java +++ b/mining/src/main/java/amie/mining/assistant/DefaultMiningAssistant.java @@ -248,9 +248,13 @@ public void getDanglingAtoms(Rule query, double minCardinality, Collection // Pruning by maximum length for the \mathcal{O}_D operator. if(query.getRealLength() == this.maxDepth - 1) { if (this.exploitMaxLengthOption) { - if(!query.getOpenVariables().isEmpty() - && !this.allowConstants - && !this.enforceConstants) { + if (query.getOpenVariables().size() > 1) { + // There will be more than 2 open variables and we will not be able to close all of them. + return; + } + + if (!canAddInstantiatedAtoms()) { + // We can't count on instantiation operator to close the new dangling variable. return; } } diff --git a/mining/src/main/java/amie/mining/assistant/MiningAssistant.java b/mining/src/main/java/amie/mining/assistant/MiningAssistant.java index a5087b7..60a6ab5 100644 --- a/mining/src/main/java/amie/mining/assistant/MiningAssistant.java +++ b/mining/src/main/java/amie/mining/assistant/MiningAssistant.java @@ -600,7 +600,13 @@ public void getDanglingAtoms(Rule rule, double minSupportThreshold, Collection 1) { + // There will be more than 2 open variables and we will not be able to close all of them. + return; + } + + if (!canAddInstantiatedAtoms()) { + // We can't count on instantiation operator to close the new dangling variable. return; } } diff --git a/mining/src/main/java/amie/mining/assistant/experimental/SeedsCountMiningAssistant.java b/mining/src/main/java/amie/mining/assistant/experimental/SeedsCountMiningAssistant.java index c8d0ef4..0ef5176 100644 --- a/mining/src/main/java/amie/mining/assistant/experimental/SeedsCountMiningAssistant.java +++ b/mining/src/main/java/amie/mining/assistant/experimental/SeedsCountMiningAssistant.java @@ -206,9 +206,13 @@ public void getDanglingAtoms(Rule query, double minCardinality, Collection //General case if(query.getLength() == maxDepth - 1) { if (this.exploitMaxLengthOption) { - if(!openVariables.isEmpty() - && !this.allowConstants - && !this.enforceConstants) { + if (query.getOpenVariables().size() > 1) { + // There will be more than 2 open variables and we will not be able to close all of them. + return; + } + + if (!canAddInstantiatedAtoms()) { + // We can't count on instantiation operator to close the new dangling variable. return; } }