use crate::dataset::{Dataset, Triple};
pub fn kg_to_dataset(kg: &lattix::KnowledgeGraph) -> Dataset {
let triples: Vec<Triple> = kg
.triples()
.map(|t| {
Triple::new(
t.subject().as_str(),
t.predicate().as_str(),
t.object().as_str(),
)
})
.collect();
Dataset {
train: triples,
valid: Vec::new(),
test: Vec::new(),
}
}
pub fn extract_subsumption_triples(kg: &lattix::KnowledgeGraph, predicate: &str) -> Dataset {
let triples: Vec<Triple> = kg
.triples()
.filter(|t| t.predicate().as_str() == predicate)
.map(|t| {
Triple::new(
t.subject().as_str(),
t.predicate().as_str(),
t.object().as_str(),
)
})
.collect();
Dataset {
train: triples,
valid: Vec::new(),
test: Vec::new(),
}
}
#[cfg(test)]
mod tests {
use super::*;
fn make_test_kg() -> lattix::KnowledgeGraph {
let mut kg = lattix::KnowledgeGraph::new();
kg.add_triple(lattix::Triple::new("Dog", "subClassOf", "Animal"));
kg.add_triple(lattix::Triple::new("Cat", "subClassOf", "Animal"));
kg.add_triple(lattix::Triple::new("Dog", "hasColor", "Brown"));
kg
}
#[test]
fn test_kg_to_dataset() {
let kg = make_test_kg();
let ds = kg_to_dataset(&kg);
assert_eq!(ds.train.len(), 3);
assert!(ds.valid.is_empty());
assert!(ds.test.is_empty());
}
#[test]
fn test_extract_subsumption() {
let kg = make_test_kg();
let ds = extract_subsumption_triples(&kg, "subClassOf");
assert_eq!(ds.train.len(), 2);
assert_eq!(ds.train[0].relation, "subClassOf");
}
#[test]
fn test_extract_empty() {
let kg = make_test_kg();
let ds = extract_subsumption_triples(&kg, "nonexistent");
assert!(ds.train.is_empty());
}
}