मैं जेना की अनुमान क्षमताओं का उपयोग करना चाहता हूं, लेकिन जब मैं इंफमोडेल का उपयोग कर रहा हूं तो मुझे कुछ प्रदर्शन समस्याएं आ रही हैं।जेना: डेटा/प्रदर्शन समस्याओं का अनुमान कैसे लगाएं
गुण::
hasX (Ranges(intersection): X, inverse properties: isXOf)
|-- hasSpecialX (Ranges(intersection): X, inverse properties: isSpecialXOf)
isXOf (Domains(intersection): X, inverse properties: hasX)
|--isSpecialXOf (Domains(intersection): X, inverse properties: hasSpecialX)
इसके अलावा वहाँ एक वर्ग 'वस्तु' है:
Object hasSpecialX some X
स्पष्ट रूप से संग्रहीत किया जाता है निम्नलिखित डेटा:
यहाँ मेरी सत्तामीमांसा का एक सरलीकृत अवलोकन दिया गया है
SomeObject a Object
SomeX a X
SomeObject hasSpecialX SomeX
निम्न क्वेरी का उपयोग करके मैं यह निर्धारित करना चाहता हूं कि एक वर्ग किस उदाहरण से संबंधित है। धारणाओं के अनुसार, केवल 'SomeObject' वापस किया जाना चाहिए।
SELECT ?x WHERE { ?x :hasX :SomeX . }
हालांकि, ds.getDefaultModel()
के खिलाफ क्वेरी करने से काम नहीं करता है, क्योंकि डेटा स्पष्ट रूप से संग्रहीत नहीं है। जब मैं दूसरी ओर infModel
का उपयोग कर रहा हूं, तो क्वेरी कभी खत्म नहीं होती है। सबसे लंबे समय तक मैं गर्भपात से 25 मिनट पहले इंतजार कर रहा था। (Triplestore लगभग 180 MB का आकार की है)
यह मेरा कोड है:
OntModel ont = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_MICRO_RULE_INF, null);
ont.read("file:..." , "RDF/XML");
Reasoner reasoner = ReasonerRegistry.getOWLMicroReasoner();
reasoner = reasoner.bindSchema(ont);
Dataset dataset = TDBFactory.createDataset(...);
Model model = dataset.getDefaultModel();
InfModel infModel = ModelFactory.createInfModel(reasoner, model);
QueryExecution qe = null;
ResultSet rs;
try {
String qry = "SELECT ?x WHERE { ?x :hasX :SomeX . }";
qe = QueryExecutionFactory.create(qry, infModel);
rs = qe.execSelect();
while(rs.hasNext()) {
QuerySolution sol = rs.nextSolution();
System.out.println(sol.get("x"));
}
} finally {
qe.close();
infModel.close();
model.close();
dataset.close();
}
क्या कोड के साथ गलत ऊपर है, वरना क्या कारण यह काम नहीं करता हो सकता है?
इसके अलावा, मैं जानना चाहता हूं कि क्या मैं प्रदर्शन को बढ़ा सकता हूं यदि मैं 'अनुमानित सिद्धांतों को ऑटोलॉजी के रूप में निर्यात करता हूं' (प्रोटेज द्वारा प्रदान किया गया)?
संपादित करें: मैं तब तक मैं गोली का उपयोग करने की कोशिश की है, लेकिन अभी भी मैं नहीं मिल सकता है किसी अनुमानित मॉडल, के रूप में मैं अपने अन्य प्रश्न में वर्णित है: OutOfMemoryError using Pellet as Reasoner। तो मैं और क्या कर सकता हूँ?
आपके उत्तर के लिए धन्यवाद! मुझे यकीन नहीं है कि 'डेटा डालने से पहले अनुमान कैसे करें'। क्या आप कृपया यह बता सकते हैं कि यह कैसे करें? – Pedro
इसके लिए आप उदाहरण के लिए किसी भी तर्क, गोली का उपयोग कर सकते हैं। –
मुझे लगता है कि मैं 'infModel.getDeductionsModel()' का उपयोग करके अनुमानित मॉडल तक पहुंच सकता हूं, लेकिन गणना करने में कुछ समय लगता है और उपरोक्त मेरे कोड के कारण प्रदर्शन समस्या शायद इसलिए है क्योंकि आंतरिक रूप से संपूर्ण डेटाबेस पर अनुमान लगाया जाता है। लेकिन जैसा कि मेरा ऑटोलॉजी अभी भी बदल रहा है, मैं भौतिक रूप से उसी टीडीबी में अनुमानित डेटा को स्टोर नहीं करना चाहता हूं। तो उस मामले में सबसे अच्छा अभ्यास क्या है? अनुमानित डेटा आम तौर पर एक अलग ट्रिपल स्टोर में संग्रहीत किया जाता है? – Pedro