java - semantica - Prólogo swi en la web semántica.
principios de la web semántica (2)
Me gustaría escuchar a las personas que tienen experiencia en programación del mundo real utilizando la biblioteca semántica de swi-prolog.
Edit: El motivo de esta pregunta es que, entre las muchas personas con las que hablé con experiencia de prólogo, la mayoría de ellos parece haberla utilizado para algunos programas de inteligencia artificial en sus proyectos académicos. Quería saber si alguien lo ha utilizado ampliamente en un entorno de producción. Debido a la capacidad de mantenimiento en tiempo real, el rendimiento es diferente de tener un proyecto realizado para obtener buenas calificaciones.
¿Cómo te integraste con un lenguaje de programación como Java?
Edición: Como se mencionó en la respuesta, parece que los servicios REST o el uso de la interfaz extranjera de swi prolog son las dos mejores opciones.
¿Para qué usaste las bibliotecas de prólogos (en el contexto de la web semántica)?
Probablemente no obtendrá una respuesta definitiva para esto aquí. Puede ser, esta pregunta pertenece al desbordamiento semántico. Tengo una idea justa ahora y continuaré esta discusión en el foro más apropiado.
¿Qué entorno de desarrollo se utilizó? Emacs o su variante proporcionada por swi prolog parece ser la respuesta abrumadora.
Nunca quise un IDE como Intellij IDEA para Java. Después de todo, ¿qué haría, auto completo? 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 a identificar anomalías en mis conjuntos de conocimientos. De mala calidad y limitado. Pero no creo que haya nada más.
Realmente me gusta la idea de usar swi prolog, pero me mantendré alejado si afecta la productividad.
Como se mencionó en la respuesta, el prólogo debe usarse para realizar lo que es bueno. Siempre supe esto y por lo tanto mi pregunta sobre la integración con otro lenguaje de programación. Parece que la mayor productividad es la calidad de los desarrolladores y está en fase de desarrollo. Los problemas en su sistema pueden estar inactivos y no pueden solucionarse fácilmente, pero se pueden manejar mediante 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.
Descargo de responsabilidad: no utilicé SWI-Prolog en un entorno comercial / de producción, no probé la interfaz SWI / Java (aunque se informó que la lista de correo SWI-Prolog funciona razonablemente bien), y no tengo interés en la web semántica.
Dicho esto, escribí un proyecto grande y no trivial utilizando SWI-Prolog, y no era una aplicación de juguete, lo necesitaba para poder trabajar y terminar mi investigación. Por lo tanto, tengo algunas credenciales para responder a esta pregunta, incluso si no son todas las requeridas .
En el contexto de un proyecto grande, es mejor tratar a Prolog como un lenguaje específico de dominio para escribir rutinas de búsqueda, no a diferencia de SQL y almacenamiento. Prolog hace una cosa extremadamente bien, y es resolver problemas de búsqueda. Si su problema puede reducirse a encontrar una asignación válida a 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 la modificación Las consultas y reglas. También se ejecutará razonablemente rápido, especialmente si compila los predicados. El prólogo a menudo es lento no porque sea inherentemente lento, sino porque ejecuta rutinas de búsqueda en un espacio de búsqueda grande.
Teniendo eso en cuenta, puede integrarlo con Java de la misma manera que integra SQL: Prolog se encarga de resolver la búsqueda. Almacena los datos permanentes y las reglas, y ejecuta las consultas. La aplicación Java se encarga de cualquier otra cosa.
Los entornos de desarrollo son un punto débil para Prolog. No obtendrás un IDE elegante - Simplemente porque hay muy pocas cosas por las que pensar. Los programas de Prolog rara vez tienen información completa en tiempo de compilación, por lo que no obtendrás una finalización automática perfecta. Simplemente utilicé 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 comunes: un marco de análisis integrado (reglas DCG), un gran sistema de macros (expansión de términos) y meta-predicados (call, findall, etc.). Si sabes cómo usarlos, estos son ases reales en tu mazo.
Para resumir: ¿Prolog aumenta o daña la productividad? Eso depende de lo que actualmente bloquee tu productividad. Si pierde demasiado tiempo preguntándose cómo implementar la representación del conocimiento y las rutinas de búsqueda en Java: simplemente use Prolog; No es como si implementaras tus propios árboles rojo-negro en lugar de usar SQL. Si está buscando un rendimiento suave en tiempo real y un IDE que se eche a perder, pruebe con otra cosa.
Tampoco lo usé realmente en un entorno de producción, pero lo integré en el banco de trabajo Bioclipse basado en Java / Eclipse, para ser usado 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 facilidad de uso de la integración del prólogo en Bioclipse.
Responderé brevemente 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 titulado "SWI-Prolog como herramienta de Web semántica para consultas semánticas en Bioclipse: integración y evaluación comparativa del rendimiento" así como en mis publicaciones de blog relevantes. El código fuente está disponible en un repositorio github .
¿Cómo te integraste con un lenguaje de programación como Java?
Utilicé la interfaz JPL Java Prolog
¿Para qué usaste las bibliotecas de prólogos (en el contexto de la web semántica)?
Lo utilicé para hacer una comparación de patrones con una base de datos RDF de unos 60000 espectros de RMN, que contenían picos de distintas alturas. Utilicé esto 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 superó con mucho a estas dos herramientas).
¿Qué entorno de desarrollo se utilizó?
Eclipse RCP
Realmente me gusta la idea de usar swi prolog, pero me mantendré alejado si afecta la productividad.
Mi experiencia es que además del aumento de la productividad para ciertos problemas, el rendimiento de ciertas operaciones también es mucho mejor que las herramientas escritas en lenguajes de programación convencionales.