2011-01-26 12 views
22

Mi piacerebbe ascoltare persone che hanno esperienza di programmazione nel mondo reale usando la libreria semantica di swi-prolog.Swi prolog in Semantic Web

Modifica: La ragione di questa domanda è, tra le molte persone con cui ho parlato con l'esperienza di Prolog, la maggior parte di loro sembra averlo usato per alcune programmazioni di intelligenza artificiale nei loro progetti accademici. Volevo sapere se qualcuno lo ha usato ampiamente in un ambiente di produzione. Perché la manutenibilità in tempo reale, le prestazioni sono diverse dall'avere un progetto fatto per ottenere buoni voti.

Come ti sei integrato con un linguaggio di programmazione come Java?

Modifica: come accennato nella risposta, sembra che i servizi REST o l'utilizzo dell'interfaccia esterna di swi prolog siano le due migliori opzioni.

Per che cosa utilizzate le librerie prolog (nel contesto del web semantico)?

Probabilmente non otterrà una risposta definitiva per questo qui. Può essere, questa domanda appartiene all'overflow semantico. Ora ho un'idea giusta e continuerò questa discussione in un forum più appropriato.

Quale ambiente di sviluppo è stato utilizzato? Emacs o la sua variante fornita da swi prolog sembra essere la risposta travolgente.

Non ho mai voluto un IDE come Intellij IDEA per java. Dopotutto cosa dovrei fare, auto completamento? Comprendo la necessità di un linguaggio basato sulle regole. Poi di nuovo, il motivo per cui ho discusso l'ambiente di sviluppo, è quello di aiutarmi a tracciare la mia regola (debug) e probabilmente anche identificare le anomalie nei miei set di conoscenze. Prologo grafico di Prolog si prende cura del primo requisito, ma almeno a me, è apparso scadente e limitato. Ma non credo che ci sia qualcos'altro.

Mi piace molto l'idea di utilizzare swi prolog, ma se ne andrà, se influisce sulla produttività.

Come indicato nella risposta, il prologo deve essere utilizzato per eseguire ciò che è buono. Ho sempre saputo questo e quindi la mia domanda sull'integrazione con altri linguaggi di programmazione. Sembra che il maggior numero di addetti alla produttività sia la qualità degli sviluppatori e sia in fase di sviluppo. I problemi nel sistema potrebbero essere inattivi e non facilmente risolvibili, ma potrebbero essere gestiti utilizzando una serie di domande per verificare la validità del sistema.

Nota: quando menziono la risposta, intendo la risposta fornita da @littletable. Anche per le persone interessate allo swi prolog per il web semantico, thea sembra interessante.

+1

Java livello superiore rispetto a Prolog? ja! – salva

+0

Divertente. Come definisci la programmazione di livello superiore. Astrazione hardware, portabilità. Qualsiasi linguaggio che dipende dalle regole di impostazione e funziona direttamente con la logica non è una programmazione di livello superiore. Quando stai insegnando un'introduzione ad una lingua e ti chiede, come faccio a Iterare e gli dici, perché vuoi usare l'iterazione, perché non puoi definire una regola transitiva, la sua programmazione non di alto livello. –

+0

temo che questa domanda possa essere un po 'troppo specifica per SO. Puoi provare a chiedere questo sulla mailing list SWI-Prolog, https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog –

risposta

12

Disclaimer: Non ho usato SWI-Prolog in un ambiente commerciale/di produzione, non ho provato l'interfaccia SWI/Java (sebbene sia stata segnalata sulla mailing list SWI-Prolog per funzionare ragionevolmente bene), e ho nessun interesse nel web semantico.

Detto questo, ho scritto un progetto ampio e non banale utilizzando SWI-Prolog e non era un'applicazione giocattolo - avevo bisogno che funzionasse per completare la mia ricerca. Pertanto ho alcune credenziali per rispondere a questa domanda, anche se non tutte le richieste sono richieste.

Nel contesto di un progetto di grandi dimensioni, è preferibile trattare Prolog come linguaggio specifico del dominio per la scrittura di routine di ricerca - Non diversamente da SQL e archiviazione. Prolog fa una cosa estremamente bene e che risolve i problemi di ricerca. Se il tuo problema può essere limitato a trovare un assegnamento valido a un insieme di variabili dato un insieme di fatti e regole, Prolog è la tua arma di scelta: non dovrai preoccuparti di nient'altro nella tua codifica se non del tweaking le domande e le regole. Funzionerà anche abbastanza velocemente, specialmente se si compilano i predicati. Prolog è spesso lento non perché è intrinsecamente lento, ma perché esegue le routine di ricerca su un ampio spazio di ricerca.

Tenendo presente ciò, è possibile integrarlo con Java in modo analogo all'integrazione di SQL: Prolog si occupa di risolvere la ricerca. Memorizza i dati permanenti e le regole ed esegue le query. L'app Java si prende cura di qualsiasi altra cosa.

Gli ambienti di sviluppo sono un po 'soft-spot per Prolog. Non avrai un IDE di fantasia - Semplicemente perché ci sono davvero poche cose di cui essere fantasioso. I programmi Prolog raramente dispongono di informazioni complete in fase di compilazione, quindi non otterrete il completamento automatico perfetto. Ho semplicemente usato Emacs, con la shell Prolog sempre aperta. Per la maggior parte delle cose, il tracciante/debugger testuale Prolog farà il possibile. SWI viene fornito con il proprio debugger grafico, ma non l'ho provato.

Prolog presenta numerosi vantaggi raramente noti: un framework di analisi incorporato (regole DCG), un grande sistema di macro (espansione dei termini) e meta-predicati (chiamata, findall, ecc.). Se sai come usarli, questi sono veri assi nel tuo mazzo.

Per riassumere: Prolog aumenta o danneggia la produttività? Ciò dipende da ciò che attualmente blocca la tua produttività. Se si perde troppo tempo a chiedersi come implementare la rappresentazione della conoscenza e le routine di ricerca in Java - Basta usare Prolog; Non è come se si implementassero i propri alberi rosso-neri invece di usare SQL. Se stai cercando prestazioni soft-realtime e un IDE viziato, prova qualcos'altro.

+1

Ottimo, questo è il tipo di risposta che stavo cercando. Il problema che ho a che fare è con la conoscenza rappresentata in forma di modello (modello di gufo semantico, ma non preoccuparsi troppo dei dettagli) e la libreria esistente scritta in prolog che potrebbe rappresentare questa conoscenza ed esporre questa conoscenza per capacità di ricerca e inferenza. (Ho intenzione di interrompere il commento per mantenere una parvenza di coerenza) –

+1

Contd: La parte che, si potrebbe spiegare ulteriormente, è questa affermazione "Tenendo presente che è possibile integrarlo con Java in modo simile, si integra SQL". Come posso passare i dati al prologo e ottenere il risultato in java? –

+0

@ doc_180: hai almeno 3 opzioni semplici. (a) Eseguire il server HTTP SWI-Prolog e utilizzarlo come servizio web REST. (b) Aprire una pipe per il processo Prolog e inviare query come testo e ricevere risultati come testo. (c) Usa JPL http://www.swi-prolog.org/packages/jpl/ (non l'ho provato da solo, ma ho riferito di lavorare). –

5

Non l'ho davvero utilizzato in un ambiente di produzione, ma l'ho integrato in Java/Eclipse basato Bioclipse workbench, da utilizzare in scenari del mondo reale, come parte del mio lavoro di tesi. Inoltre, il lavoro di tesi si è concentrato molto sulla verifica delle prestazioni e sull'usabilità dell'integrazione prolog in Bioclipse.

Fornirò brevi risposte alle domande che hai fatto sotto, ma per chiunque sia interessato, la maggior parte delle informazioni può essere trovata nella mia relazione di tesi dal "SWI-Prolog as a Semantic Web Tool for semantic querying in Bioclipse: Integration and performance benchmarking", così come nel mio rilevante taggato blog posts. Il codice sorgente è disponibile in un github repo.

Come ti sei integrato con un linguaggio di programmazione come Java?

ho usato il il JPL Java Prolog interface

Cosa hai usato le librerie di prologo per (in un contesto di web semantico)?

L'ho usato per eseguire alcuni pattern matching su un database RDF di circa 60000 spettri NMR, contenenti picchi di altezze diverse. L'ho usato per testare le prestazioni di SWI-Prolog per questa operazione, rispetto ad altri strumenti del Semantic Web come Pellet e Jena (basati su Java). (BTW, SWI-Prolog ha di gran lunga sovraperformato entrambi questi strumenti).

Quale ambiente di sviluppo è stato utilizzato?

Eclipse RCP

Mi piace molto l'idea di utilizzare SWI-Prolog ma sarà prendere le distanze da esso, se essa riguarda la produttività.

La mia esperienza è che oltre all'aumento della produttività per determinati problemi, le prestazioni per determinate operazioni sono anche di gran lunga migliori rispetto agli strumenti scritti nei linguaggi di programmazione convenzionali.