Skip to content

Commit

Permalink
WIP: Cardinality restriction Experimentations
Browse files Browse the repository at this point in the history
  • Loading branch information
Louis-Mozart committed Jun 28, 2024
1 parent 248454d commit 1659519
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 47 deletions.
54 changes: 8 additions & 46 deletions ontolearn/triple_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -1018,48 +1018,8 @@ def instances(self, expression: OWLClassExpression, named_individuals: bool = Fa

yield from results

# elif isinstance(expression, OWLObjectMaxCardinality):

# property_expression = expression.get_property()
# filler_expression = expression.get_filler()

# # (1) Find individuals that are likely y \in C^I, i.e. φ(y, type, C)

# filler_individuals = {i for i in self.instances(filler_expression)}

# # 2) set max cardinality
# max_cardinality = expression.get_cardinality()

# # (3) Iterative (1) and return entities whose predicted score satisfies the condition.
# results = set()
# for individual in filler_individuals:# self.owl_individuals:

# if isinstance(property_expression, OWLObjectInverseOf):

# inverse_property = property_expression.get_inverse_property()
# scores = self.neural_link_predictor.predict(h=[individual.str],
# r=[inverse_property.str],
# within=None,
# logits=False).tolist()
# else:
# scores = self.neural_link_predictor.predict(r=[property_expression.str],
# t=[individual.str],
# within=None,
# logits=False).tolist()

# candidate_iris = [iri for iri, score in zip(self.neural_link_predictor.entity_to_idx.keys(), scores) if score >= self.gamma_for_nc]

# count = len(candidate_iris)

# if count <= max_cardinality:
# for iri in candidate_iris:
# try:
# results.add(OWLNamedIndividual(iri))
# except:
# print(f"Could not convert to OWLNamedIndividual {iri}")

# yield from results




elif isinstance(expression, OWLObjectMaxCardinality):

Expand All @@ -1071,8 +1031,6 @@ def instances(self, expression: OWLClassExpression, named_individuals: bool = Fa
# 1) define max cardinality
max_cardinality = expression.get_cardinality()

filler_individuals = {i for i in self.instances(filler_expression)}

# (2) Iterative (1) and return entities whose predicted score satisfies the condition.
results = set()
for individual in self.owl_individuals:
Expand All @@ -1097,8 +1055,12 @@ def instances(self, expression: OWLClassExpression, named_individuals: bool = Fa
count = sum(1 for idx, score in enumerate(scores) if score >= self.gamma_for_nc and
self.is_instance(self.neural_link_predictor.idx_to_entity[idx], filler_expression))

if count <= max_cardinality:
results.add(individual)
if max_cardinality == 0:
raise NotImplementedError("Handling for max cardinality of 0 is not implemented.")

else:
if count <= max_cardinality:
results.add(individual)

yield from results

Expand Down
2 changes: 1 addition & 1 deletion tests/test_concept_EBR.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,8 +215,8 @@ def get_reasoner_instances(reasoner: NeuralReasoner, class_expression: OWLClassE

print(len(ground_truth_1))
print(len(ground_truth_2))
print(len(reasoner_instances_2))
print(len(reasoner_instances_1))
print(len(reasoner_instances_2))

assert reasoner_instances_1 == reasoner_instances_2, "Reasoner fails"
print("test 6 done")
Expand Down

0 comments on commit 1659519

Please sign in to comment.