0

データウェアハウス用の半自然言語インターフェースを構築したいと思います。単純なデータモデルは、たとえば次のようになります。

会社
- 属性名'
-「部門」への参照

デパートメント
-属性'タイプ'
-「従業員」への参照

従業員
-属性'年齢'
-属性「給与」

そして、私はそのようなクエリを作成したいと思います:

ACME employees、、Bugs Bunny salaryなどACME department types

文法にない入力については、データベースを呼び出して、sayACMEをに解決しCompanyます。

...そしてクエリを私のデータベース言語が理解できるパスに変えます:

[Company].departments.employees、、。[Employee].salary_[Company].departments.type

英語の文章を解析して正しいかどうかを言うときに、SWI-Prologを使用したことを覚えています。この場合、Prologはまだ道を進んでいますか?

ありがとう

4

3 に答える 3

1

SWI-Prologには、Chat80をインストールする準備ができています。必要な変更を加えて、あなたが求めているものと非常に似ていると思います。

セッションログからの単なるサンプルクエリ(注:SWI-Prologへのchat80の私自身の古いポートでした。パックはおそらくより機能的ですが、実行しようとはしていません):

what rivers are there ? 

Parse: 0.0168457sec.
whq
   $VAR
      1
   s
      np
         3+plu
         np_head
            int_det(B)
            []
            river
         []
      verb(be,active,pres+fin,[],pos)
      void
      []



Semantics: 0.0170898sec.
answer([B]) :-
   river(B)
 & exists B 
     true

Planning: 0.0sec.
answer([B]) :-
   river(B)
 & exists B 
     true
amazon, amu_darya, amur, brahmaputra, colorado, congo_river, cubango, danube, don, elbe, euphrates, ganges, hwang_ho, indus, irrawaddy, lena, limpopo, mackenzie, mekong, mississippi, murray, niger_river, nile, ob, oder, orange, orinoco, parana, rhine, rhone, rio_grande, salween, senegal_river, tagus, vistula, volga, volta, yangtze, yenisei, yukon and zambesi.

Reply: 0.166992sec.

談話が質問に答えるために必要な論理形式は、システムの中心点です。地面から作るのは本当に簡単ではありません!

私は本Prolog and Natural Language Analysis、F.Pereira、S.Shieber、1987年(イタリア語に翻訳された)を読みましたが、それでも私の好みです!英語のオリジナルはここから無料で入手できます。

于 2012-04-07T13:47:50.300 に答える
1

さらに良いことに、私は現在、Prologルールが埋め込まれたDCGを使用しています。

したがって、次のようなクラスと属性を持つモデルの場合:

c(会社、クラス(会社))->[会社]。
a(会社、属性(名前))->[名前]。

クラスのクラスの属性を要求できます。

q(q(A、C1、C2))-> a(T1、A)、[of]、c(T1、C1)
    、[of]、c(T2、C2)、{is_child(T1、T2)}。

そして、答えとして木を取り戻します。

于 2012-04-09T10:53:57.177 に答える
0

'文'をモデル内のパスに変換するこの例になりました。

%ルートクラス
class(ceo)。

%モデル関係
attribute_of(age、ceo)。
attribute_of(salary、ceo)。

%関係の文法
attribute('age'、age)。
attribute('salary'、salary)。
attribute('money'、salary)。

%回答形式
answer([クラス、属性]、クラス、属性)。

%言語ルール
%query(Attribute、'of'、Object、Answer)。
query(AttributeQ、'of'、ClassQ、Answer):-
    db(ClassQ、Class)、attribute(AttributeQ、Attribute)、attribute_of(Attribute、Class)、answer(Answer、Class、Attribute)。

%データベース
db('バッグスバニー'、ceo)。

例として、次のクエリ:

?- query('age','of','Bugs Bunny', Answer).

...私に与えます:

Answer = [ceo, age].

于 2012-04-07T11:08:41.447 に答える