2011-01-26 23 views
22

Me gustaría escuchar a personas que tienen experiencia en programación en el mundo real al usar la biblioteca semántica de swi-prolog.Prólogo Swi en Web Semántica

Editar: El motivo de esta pregunta es que, entre las muchas personas con las que hablé con la experiencia de prólogo, la mayoría de ellas parece haberlo usado para algunos programas de IA en sus proyectos académicos. Quería saber si alguien lo ha usado ampliamente en un entorno de producción. Debido a que la mantenibilidad en tiempo real, el rendimiento es diferente de tener un proyecto hecho para obtener buenas calificaciones.

¿Cómo se integró con un lenguaje de programación como Java?

Editar: Como se menciona en la respuesta, parece que los servicios REST o el uso de la interfaz externa de swi prolog son las dos mejores opciones.

¿Para qué usaste las librerías de prolog (en el contexto de la web semántica)?

Probablemente no obtenga una respuesta definitiva para esto aquí. Puede ser, esta pregunta pertenece al desbordamiento semántico. Tengo una buena idea ahora y continuaré esta discusión en un foro más apropiado.

¿Qué entorno de desarrollo se ha utilizado? Emacs o su variante proporcionada por swi prolog parece ser la respuesta abrumadora.

Nunca he querido un IDE como Intellij IDEA para java. Después de todo, ¿qué haría, auto completar? Entiendo la necesidad de un lenguaje basado en reglas. Por otra parte, la razón por la que discutí el entorno de desarrollo, es para ayudarme a rastrear mi regla (depuración) y también probablemente identificar anomalías en mis conjuntos de conocimientos. El trazador gráfico de prólogo de Swi se ocupa del primer requisito, pero al menos para mí, apareció de mala calidad y limitado. Pero no creo que haya nada más.

Me gusta mucho la idea de usar el prólogo swi pero me alejaré de él, si esto afecta la productividad.

Como se menciona en la respuesta, el prólogo se debe usar para realizar lo que es bueno. Siempre supe esto y, por lo tanto, mi pregunta sobre la integración con otros lenguajes de programación. Parece que el mayor problema de productividad es la calidad de los desarrolladores y está en fase de desarrollo. Los problemas en su sistema pueden estar inactivos y no ser fácilmente reparables, pero podrían manejarse usando un conjunto de preguntas para verificar la validez de su sistema.

Nota: cuando menciono la respuesta, me refiero a la respuesta proporcionada por @littletable. También para las personas interesadas en swi prolog para web semántica, thea parece interesante.

+1

Java nivel superior que Prolog? ja! – salva

+0

Gracioso. ¿Cómo defines la programación de nivel superior? Extracción de hardware, portabilidad ... Cualquier lenguaje que dependa de establecer reglas y trabaje directamente con lógica no es una programación de nivel superior. Cuando estás enseñando alguna introducción a un idioma y él te pregunta cómo puedo iterar y le dices, ¿por qué quieres usar la iteración? ¿Por qué no puedes definir una regla transitiva? No es una programación de alto nivel. –

+0

Me temo que esta pregunta puede ser demasiado específica para SO. Puede intentar preguntar esto en la lista de correo de SWI-Prolog, https://lists.iai.uni-bonn.de/mailman/listinfo.cgi/swi-prolog –

Respuesta

12

Descargo de responsabilidad: No utilicé SWI-Prolog en un entorno comercial/de producción, no probé la interfaz SWI/Java (aunque se informó en la lista de correo de SWI-Prolog para que funcione razonablemente bien), y tengo sin interés en la web semántica.

Dicho esto, escribí un proyecto grande y no trivial usando SWI-Prolog, y no era una aplicación de juguete; necesitaba que funcionara para terminar mi investigación. Por lo tanto, tengo algunas credenciales para responder esta pregunta, incluso si no todas las requieren.

En el contexto de un proyecto grande, es mejor tratar Prolog como un lenguaje específico de dominio para escribir rutinas de búsqueda. No como el SQL y el almacenamiento. Prolog hace una cosa extremadamente bien, y eso soluciona problemas de búsqueda. Si su problema puede reducirse a la búsqueda de una asignación válida para un conjunto de variables dado un conjunto de hechos y reglas, Prolog es su arma de elección: no tendrá que preocuparse por nada más en su codificación que no sea ajustar las consultas y reglas. También funcionará razonablemente rápido, especialmente si compila los predicados. Prolog a menudo no es lento porque es inherentemente lento, sino porque ejecuta rutinas de búsqueda en un espacio de búsqueda grande.

Teniendo esto en cuenta, puede integrarlo con Java de manera similar a la integración de SQL: Prolog se ocupa de resolver la búsqueda. Almacena los datos permanentes y las reglas, y ejecuta las consultas. La aplicación Java se ocupa de cualquier otra cosa.

Los entornos de desarrollo son un punto débil para Prolog. No obtendrá un IDE elegante, simplemente porque hay muy pocas cosas que le apetecen. Los programas de Prolog rara vez tienen información completa en tiempo de compilación, por lo que no obtendrá una finalización automática perfecta. Simplemente usé Emacs, con el shell Prolog siempre abierto. Para la mayoría de las cosas, el trazador/depurador de texto Prolog hará el truco. SWI viene con su propio depurador gráfico, pero no lo he probado.

Prolog tiene varias ventajas poco conocidas: una estructura de análisis incorporada (reglas DCG), un gran sistema de macros (expansión de términos) y metadatos (llamada, findall, etc.). Si sabes cómo usarlos, estos son ases reales en tu mazo.

En resumen: ¿Prolog aumenta o daña la productividad? Eso depende de lo que actualmente bloquea su productividad. Si pierde demasiado tiempo preguntándose cómo implementar la representación del conocimiento y las rutinas de búsqueda en Java, solo use Prolog; No es como si implementara sus propios árboles rojo-negro en lugar de usar SQL. Si está buscando un rendimiento en tiempo real suave y un IDE malogrado, intente con algo más.

+1

Genial, este es el tipo de respuesta que estaba buscando. El problema que tengo tiene que ver con el conocimiento representado en forma de modelo (modelo de búho semántico, pero no se preocupe demasiado por los detalles) y la biblioteca existente escrita en prólogo que podría representar este conocimiento y exponer este conocimiento para las capacidades de búsqueda e inferencia. (Voy a dejar de comentar para mantener una apariencia de coherencia) –

+1

Contd: La parte que, podría explicar más a fondo es esta afirmación "Teniendo esto en cuenta, puede integrarlo con Java de manera similar si integra SQL". ¿Cómo puedo pasar los datos a Prolog y obtener el resultado nuevamente en Java? –

+0

@ doc_180: Tiene al menos 3 opciones simples. (a) Ejecute el servidor HTTP SWI-Prolog y úselo como un servicio web REST. (b) Abra un conducto al proceso Prolog y envíe consultas como texto y reciba resultados como texto. (c) Use JPL http://www.swi-prolog.org/packages/jpl/ (no lo intenté yo mismo, pero informé que funcionaba). –

5

No lo usé realmente en un entorno de producción tampoco, pero lo integé en Java/Eclipse basado en Bioclipse workbench, para ser utilizado en escenarios del mundo real, como parte de mi trabajo de tesis. Además, el trabajo de tesis se centró mucho en probar el rendimiento y la usabilidad de la integración de prólogos en Bioclipse.

Voy a dar respuestas cortas a las preguntas que hizo a continuación, pero para cualquier persona interesada, la mayor información se puede encontrar en mi informe de tesis llamado "SWI-Prolog as a Semantic Web Tool for semantic querying in Bioclipse: Integration and performance benchmarking", así como en mi etiqueta relevante blog posts. El código fuente está disponible en un github repo.

¿Cómo se integró con un lenguaje de programación como Java?

He utilizado el del JPL Java Prolog interface

¿Qué se utilizan bibliotecas de prólogo para (en el contexto de la web semántica)?

Lo usé para hacer algún patrón de coincidencia con una base de datos RDF de unos 60000 espectros de RMN, que contiene picos de distintas alturas. Lo usé para probar el rendimiento de SWI-Prolog para esta operación, en comparación con otras herramientas de la Web Semántica como Pellet y Jena (basadas en Java). (Por cierto, SWI-Prolog supera con creces a estas dos herramientas).

¿Qué entorno de desarrollo se ha utilizado?

Eclipse RCP

me gusta mucho la idea de usar el prólogo SWI sino que alejarse de ella, si afecta a la productividad.

Mi experiencia es que, además de aumentar la productividad para ciertos problemas, el rendimiento para ciertas operaciones también es mucho mejor que las herramientas escritas en lenguajes de programación convencionales.