SWIProlog语义Web库和Python

2024-04-29 08:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我想编写一个使用Prolog查询RDF三元组的pythonweb应用程序。我找到了pyswip来连接Python和SWI-Prolog,目前我正在研究SWI-Prolog的RDF功能。我想知道以前是否有人尝试过这种方法——如果有人尝试过:你的设置是什么样子的?如何让pyswip使用SWI-Prolog语义web库?或者,有没有另一个Python Prolog接口可以让这更简单?在

编辑:

我真的找到了一个很好的解决办法。我以前用过Allegrograph3.3PythonAPI对RDF数据进行Prolog查询,但我认为他们对Allegro Common Lisp的Prolog扩展有点欠缺,因为它缺少数字比较运算符之类的东西。我已经试用了AllegroGraph 4.6,我发现他们的Prolog扩展中缺少的任何东西都可以通过使用lisp转义函子来编写Allegro Common Lisp表达式来处理任何你需要做的事情,而这些都不是Prolog扩展提供的。由于某些原因,在我使用Allegrograph3.3PythonAPI时没有定义这个函子,但是很明显Allegro的开发人员从那时起已经走过了很长的路。在

我建议任何想要构建一个使用Prolog查询RDF数据的pythonweb应用程序的人。它是超快速和超级强大。在


Tags: 数据方法功能应用程序pythonapiallegrordfcommon
2条回答

我对pyswip没有经验。但是作为参考,swi-prolog似乎很有能力,因为我有一些关于库knowrob的经验,这个库用于机器人学中的人工智能推理。不知道这是否有用

我没有用过pyswip,尽管不久前我看过它。你的问题很有说服力,pyswip看起来很吸引人,特别是“pythonic”界面。在

然后我设法安装,但当安装完成后(我不得不调整安装“说明”,因为我运行的是一个相当最新的SWI-Prolog),我无法在运行简单的介绍性示例时不引起奇怪的问题:示例声明的arity错误,SWI-Prolog抱怨2^assertz上错误处理的术语引用等等。我找不到任何文件。。。。在

我建议使用Boost.Python和C++ SWI Prolog FLI(外语接口)。在

也许我们只需要一个方法:比如催乳素.call(TermArray),映射到call/N,以完全访问富Prolog库(其中包括SemWeb)和一些反射调用。在

也就是说,我认为这是一项微不足道的任务,也许pyswip提供了一种更好的方法,一旦被调试。。。在

<>我可能会有兴趣合作编码一些东西,我知道有点Boost和C++ FLI,但我不是Python编码器,只是用它来谷歌文档的原型用法(或者更好,只是电子表格)…在

我很喜欢用Prolog写东西,现在,撇开话题,我会提出一个稍微不同的方法:使用SWI-Prolog的HTTP服务器功能,在逻辑和表示之间建立一个更清晰的接口(即更多的MVC)。在

编写一个以(X)HTML(+JSON+SVG+…)形式公开的server,然后在python中使用(或解析)输出。一种RPC。在

这样,逻辑将被强解耦,从而大大提高可重用性。 当然,如果你对三元组“in se”不感兴趣,而是对它们的语义感兴趣的话,这是有意义的。在

我认为调试也可以容易得多,总是由于解耦。 SWI Prolog的主要开发人员janwielemaker经常就如何利用运行在一起的复杂引擎的行为提出建议,比如Java(我认为Python也会类似)和Prolog,特别是当涉及多线程时(如果我们想到的话,总是这样)。 而今天,多线程正在被使用。在

相关问题 更多 >