4

Prolog を使用して RDF トリプルを照会する Python Web アプリケーションを作成したいと考えています。Python と SWI-Prolog のインターフェイスとしてpyswipを見つけました。現在、SWI-Prolog の RDF 機能を調べています。誰かが以前にこれを試したことがあるかどうか疑問に思っています-そして誰かが持っている場合: あなたのセットアップはどのように見えましたか? pyswip を SWI-Prolog セマンティック Web ライブラリで動作させるにはどうすればよいですか? または、これを簡単にする別の Python-Prolog インターフェースはありますか?

編集:

私は実際にこれに対する本当に素晴らしい解決策を見つけました。以前、RDF データに対して Prolog クエリを実行するために AllegroGraph 3.3 Python API を使用したことがありますが、Allegro Common Lisp に対する Prolog 拡張機能には、数値比較演算子などがないため、不足していると思いました。それ以来、私は AllegroGraph 4.6 を試してみましたが、彼らの Prolog 拡張機能に欠けているものはすべて、lispエスケープ ファンクターを使用して Allegro Common Lisp 式を記述し、実行する必要があること以外の処理を行うことができるという事実によって補われていることがわかりました。 Prolog 拡張機能によって提供されます。私が AllegroGraph 3.3 Python API を使用したときには、何らかの理由でこのファンクターが定義されていませんでしたが、明らかに Allegro の開発者はそれ以来長い道のりを歩んできました。

これは、Prolog を使用して RDF データをクエリする Python Web アプリを構築したい人におすすめです。超高速で超強力です。

4

2 に答える 2

4

私はpyswipを使用していませんが、しばらく前にそれを調べました。あなたの質問は説得力があり、pyswipは魅力的に見えます。特に「pythonic」インターフェースです。

それから私はなんとかインストールできましたが、完了したら(かなり最新のSWI-Prologを実行しているため、インストールの手順を微調整する必要がありました)、奇妙な問題を発生させずに簡単な紹介サンプルを実行することはできません:サンプル宣言の誤ったアリティ、SWI-Prologは、2^assertzでの誤った用語参照などについて不平を言います。そして、私はドキュメントを見つけることができません...。

Boost.PythonとC++SWI-Prolog FLI(外国語インターフェース)を使用することをお勧めします。

たぶん、たった1つのメソッドが必要です。たとえば、call / NにマップされたPrologEngine.call(TermArray)を使用して、豊富なPrologライブラリ(特にSemWeb)に完全にアクセスし、いくつかのリフレクティブ呼び出しを行います。

そうは言っても、それは簡単な作業ではないと思います。デバッグすると、おそらくpyswipがより良い方法を提供します...

何かのコーディングに協力することに興味があるかもしれません。BoostとC++FLIを少し知っていますが、私はPythonコーダーではなく、Googleドキュメント(またはより良いのはスプレッドシート)の使用のプロトタイプを作成するために使用しました...

OTOH私はPrologで書くのが好きです、そして今、トピックから外れて、私は余談を取り、あなたに少し異なるアプローチを提案します:SWIのHTTPサーバー機能を使用して、ロジックとプレゼンテーションの間のより明確なインターフェース(すなわちより多くのMVC)を作ります-プロローグ。

(X)HTML(+ JSON + SVG + ...)として公開するサーバーを作成し、Pythonで出力を使用(または解析)します。RPCの一種。

そうすることで、ロジックが強力に分離され、再利用性が大幅に向上します。もちろん、これは、トリプル'in se'ではなく、それらのセマンティクスに関心がある場合に意味があります。

常にデカップリングにより、デバッグもはるかに簡単になると思います。SWI-Prologのメイン開発者であるJanWielemakerは、Java(Pythonも同様だと思います)やPrologなど、一緒に実行される複雑なエンジンの動作を利用することの難しさについて、特にマルチスレッドが関係している場合(常にそれの)。そして今日、マルチスレッド使用されることになっています。

于 2012-06-06T01:19:34.537 に答える
3

pyswip の経験はありません。しかし、ご参考までに、ロボティクスのAI推論用のライブラリknowrobの経験があるので、 swi prolog は非常に有能であるようです。これが役立つかどうかはわかりませんが

于 2012-06-06T01:52:44.093 に答える