Files
AI/참고/ontocast-main/test/aggregation/test_clustering.py
2026-05-12 19:40:31 +09:00

90 lines
2.9 KiB
Python

from typing import cast
from unittest.mock import Mock
from rdflib import URIRef
from ontocast.onto.constants import DEFAULT_IRI
from ontocast.tool.agg.clustering import ClusterRepresentativeSelector
from ontocast.tool.agg.normalizer import EntityRepresentation
def test_simplicity_score_prefers_simple_uris(
cluster_representative_selector: ClusterRepresentativeSelector,
) -> None:
simple = URIRef("http://ex.org/Thing")
complex_uri = URIRef("http://example.org/deeply/nested/path/ComplexEntity_123")
simple_score = cluster_representative_selector.compute_simplicity_score(simple)
complex_score = cluster_representative_selector.compute_simplicity_score(
complex_uri
)
assert simple_score < complex_score
def test_select_representative_prefers_ontology_entity(
cluster_representative_selector: ClusterRepresentativeSelector,
) -> None:
ont_entity = URIRef("http://ontology.org/Thing")
chunk_entity = URIRef(f"{DEFAULT_IRI}/entity_long_name")
ont_rep = Mock(is_ontology_entity=True)
chunk_rep = Mock(is_ontology_entity=False)
reps = cast(
dict[URIRef, EntityRepresentation],
{ont_entity: ont_rep, chunk_entity: chunk_rep},
)
selected = cluster_representative_selector.select_representative(
[ont_entity, chunk_entity], reps
)
assert selected == ont_entity
def test_select_representative_prefers_simple_non_ontology_uri(
cluster_representative_selector: ClusterRepresentativeSelector,
) -> None:
simple = URIRef("http://chunk1.org/Thing")
complex_uri = URIRef("http://chunk2.org/very_long_complex_entity_name_123")
simple_rep = Mock(is_ontology_entity=False)
complex_rep = Mock(is_ontology_entity=False)
reps = cast(
dict[URIRef, EntityRepresentation],
{simple: simple_rep, complex_uri: complex_rep},
)
selected = cluster_representative_selector.select_representative(
[simple, complex_uri], reps
)
assert selected == simple
def test_select_representative_returns_singleton(
cluster_representative_selector: ClusterRepresentativeSelector,
) -> None:
entity = URIRef("http://chunk1.org/Only")
rep = Mock(is_ontology_entity=False)
reps = cast(dict[URIRef, EntityRepresentation], {entity: rep})
selected = cluster_representative_selector.select_representative([entity], reps)
assert selected == entity
def test_create_mapping_maps_all_cluster_members(
cluster_representative_selector: ClusterRepresentativeSelector,
) -> None:
e1 = URIRef("http://chunk1.org/A")
e2 = URIRef("http://chunk1.org/B")
e3 = URIRef("http://chunk2.org/C")
rep1 = Mock(is_ontology_entity=False)
rep2 = Mock(is_ontology_entity=False)
rep3 = Mock(is_ontology_entity=False)
reps = cast(dict[URIRef, EntityRepresentation], {e1: rep1, e2: rep2, e3: rep3})
mapping = cluster_representative_selector.create_mapping([[e1, e2], [e3]], reps)
assert mapping[e1] == mapping[e2]
assert mapping[e3] == e3