32 lines
1.2 KiB
Python
32 lines
1.2 KiB
Python
from crawler_platform.app.config.loader import ProjectConfig, SourceConfig
|
|
from crawler_platform.app.domains.perfume.extractor import PerfumeRuleBasedExtractor
|
|
|
|
|
|
def test_perfume_rule_based_extractor_maps_claims():
|
|
config = ProjectConfig(
|
|
project_name="perfume_subscription",
|
|
domain="perfume",
|
|
target_entities=["Perfume", "Brand", "Note"],
|
|
fields=["name", "brand", "top_notes", "middle_notes", "base_notes"],
|
|
sources=[SourceConfig(name="official_brand_site", trust_level=0.95)],
|
|
ontology={"aliases": {"top_notes": "hasTopNote"}},
|
|
)
|
|
text = """
|
|
Neroli Summer Eau de Parfum
|
|
Brand: Example Maison
|
|
Top notes: Bergamot, Neroli
|
|
Middle notes: Jasmine
|
|
Base notes: Musk
|
|
A fresh daily perfume for summer office wear. Price $89.
|
|
"""
|
|
bundle = PerfumeRuleBasedExtractor().extract(text, config)
|
|
predicates = {claim.predicate for claim in bundle.claims}
|
|
entity_names = {entity.name for entity in bundle.entities}
|
|
|
|
assert "Neroli Summer Eau de Parfum" in entity_names
|
|
assert "Bergamot" in entity_names
|
|
assert "hasTopNote" in predicates
|
|
assert "suitableForSeason" in predicates
|
|
assert "hasPrice" in predicates
|
|
|