You selected nihongo7.pl

/*  Parsing Japanese Sentence by Prolog  */
% nihongo7.pl ( SWI-Prolog 7.6.4)
% date: 2, 7 Apr 2019 
% file format: UTF-8
% earlier version: nihongo.pl(1 Oct 2009, SWI-Prolog 5.6.52)

% 説明:かんたんな日本語文を解析するプログラムです。
% SWI-Prologの現行バージョンでは,日本語文字列を引用符なしで扱えます。
% 助詞などを演算子定義することで項として扱うことができます。


% 以下の演算子の定義は適当ですが,実験すると次のような適合性が分かります.
% 「です」や「ではありません」は左結合とする.
% 「。」は結合なしとする.
% これらは後置で,それ以外は中置とする.
%「の」「と」「に」「で」「を」については中置結合なしとする.
%「が」「は」については中置とし,結合はシンタックスエラーの少ないものを選ぶ.

%「が」を右結合⇒「は」は右結合
%「が」を左結合⇒「は」はどれでも可
%「が」を結合なし⇒「は」は右結合
%また
%「は」を右結合⇒「が」はどれでも可
%「は」を左結合⇒「が」は左結合
%「は」を結合なし⇒「が」は左結合

%よって,もし「が」を結合なしと仮定すると,「は」は右結合である.


%:- op(800, xfy, が ).
%:- op(800, yfx, が ). 
%
:- op(800, xfx, が ). 

%
:- op(800, xfy, は ).   
%:- op(800, yfx, は ).
%:- op(800, xfx, は ). 

:- op(850, yf, です ).  %左結合
:- op(850, yf, ではありません ). %左結合
:- op(700, xfx, の ).
:- op(700, xfx, で ).
:- op(700, xfx, に ).
:- op(700, xfx, と ).
%
:- op(900, xf, 。). %結合しない
%:- op(900, yf, 。).

s( 1, 太郎 は 学生 です。).
s( 1-a, 太郎は学生です。).
s( 2, 太郎 は 妹 が 学生 です。).
s( 3, (タマ は ( 猫 です。))).
s( 4,  タマ は  ( 学生 ではありません。 )).
s( 5,  花子 は  ( 女性 です。 )).
s( 6, ( 花子 は  ( 猫 が 好き ではありません。 ))).
s( 7,  太郎 は  ( 花子 が  (  好み の 女性 )  です。 )).
s( 8,  ゾウ は ハナ が  長い。 ).
s( 9, ( ゾウ は ハナ )  が  長い。 ).
s( 10, ( ゾウ の ハナ )  が  長い。 ).
s( 11, ( ゾウ の ハナ )  は  長い。 ).
s( 12,  ゾウ の  ( ハナ は  長い。 )).
s( 13,  ゾウ は  ( ハナ が  長い。 )).
s( 14,  ゾウ の ハナ は  長い。 ).
s( 15,  太郎 は  ( 花子 が  (  好み の 男性 )  です。 )).
s( 16,  太郎 は  ( ( 花子 が  好み )  の 男性 )  です。 )).
%

文(A,B):- s( A, B ).

/*

% がとは、共にxfyの場合

?- [nihongo7].
ERROR: c:/users/kenry/documents/doc/研究/2019/haru/nihongo.pl:35:71: Syntax error: Illegal start of term
true.

 ?- 文( N, I ), nl, write( N: I ),fail.

1:(太郎 は 学生 です。)
2:(太郎 は 妹 が 学生 です。)
3:(タマ は(猫 です。))
4:(タマ は(学生 ではありません。))
5:(花子 は(女性 です。))
6:(花子 は(猫 が 好き ではありません。))
7:(太郎 は(花子 が 好み の 女性 です。))
8:(ゾウ は ハナ が 長い。)
9:((ゾウ は ハナ)が 長い。)
10:(ゾウ の ハナ が 長い。)
11:(ゾウ の ハナ は 長い。)
12:(ゾウ の(ハナ は 長い。))
13:(ゾウ は(ハナ が 長い。))
14:(ゾウ の ハナ は 長い。)
15:(太郎 は(花子 が 好み の 男性 です。))
false.


% がとは、共にyfxの場合

?- [nihongo].
ERROR: c:/users/kenry/documents/doc/研究/2019/haru/nihongo.pl:38:71: Syntax error: Illegal start of term
true.

?- s( N, I ), nl, write( N: I ),fail.

1:(太郎 は 学生 です。)
2:(太郎 は 妹 が 学生 です。)
3:(タマ は(猫 です。))
4:(タマ は(学生 ではありません。))
5:(花子 は(女性 です。))
6:(花子 は(猫 が 好き ではありません。))
7:(太郎 は(花子 が 好み の 女性 です。))
8:(ゾウ は ハナ が 長い。)
9:(ゾウ は ハナ が 長い。)
10:(ゾウ の ハナ が 長い。)
11:(ゾウ の ハナ は 長い。)
12:(ゾウ の(ハナ は 長い。))
13:(ゾウ は(ハナ が 長い。))
14:(ゾウ の ハナ は 長い。)
15:(太郎 は(花子 が 好み の 男性 です。))
false.


% はのみyfx

ERROR: c:/users/kenry/documents/doc/研究/2019/haru/nihongo.pl:23:15: Syntax error: Operator priority clash
ERROR: c:/users/kenry/documents/doc/研究/2019/haru/nihongo.pl:29:16: Syntax error: Operator priority clash
ERROR: c:/users/kenry/documents/doc/研究/2019/haru/nihongo.pl:37:71: Syntax error: Illegal start of term
true.

?- s( N, I ), nl, write( N: I ),fail.

1:(太郎 は 学生 です。)
3:(タマ は(猫 です。))
4:(タマ は(学生 ではありません。))
5:(花子 は(女性 です。))
6:(花子 は(猫 が 好き ではありません。))
7:(太郎 は(花子 が 好み の 女性 です。))
9:((ゾウ は ハナ)が 長い。)
10:(ゾウ の ハナ が 長い。)
11:(ゾウ の ハナ は 長い。)
12:(ゾウ の(ハナ は 長い。))
13:(ゾウ は(ハナ が 長い。))
14:(ゾウ の ハナ は 長い。)
15:(太郎 は(花子 が 好み の 男性 です。))
false.


% がのみyfx

?- [nihongo].
ERROR: c:/users/kenry/documents/doc/研究/2019/haru/nihongo.pl:37:71: Syntax error: Illegal start of term
true.

?- s( N, I ), nl, write( N: I ),fail.

1:(太郎 は 学生 です。)
2:(太郎 は 妹 が 学生 です。)
3:(タマ は(猫 です。))
4:(タマ は(学生 ではありません。))
5:(花子 は(女性 です。))
6:(花子 は(猫 が 好き ではありません。))
7:(太郎 は(花子 が 好み の 女性 です。))
8:(ゾウ は ハナ が 長い。)
9:(ゾウ は ハナ が 長い。)
10:(ゾウ の ハナ が 長い。)
11:(ゾウ の ハナ は 長い。)
12:(ゾウ の(ハナ は 長い。))
13:(ゾウ は(ハナ が 長い。))
14:(ゾウ の ハナ は 長い。)
15:(太郎 は(花子 が 好み の 男性 です。))
false.


*/
 
% 補足:演算子の結合性と優先順位について.
/*

%SWF-Prologの組込述語をcurrent_op/3で調べてみる.

% yfx 中置:左結合
?- setof( P:X, current_op( X, yfx, P ), O ), length( O, N ).
O = [(*):400,  (+):500,  (-):500,  ('.'):100,  (/):400,  (//):400,  (/\):500,  (<<):400, ... : ...|...],
N = 16.

% xfy 中置:右結合
?- setof( P:X, current_op( X, xfy, P), O ), length(O,N).
O = [(*->):1050,  (','):1000,  (->):1050,  (:):600,  (;):1100,  (^):200,  ('|'):1105],
N = 7.

% xfx 中置:結合なし
?- setof( P:X, current_op( X, xfx, P), O ), length(O,N).
O = [(**):200,  (-->):1200,  (:-):1200,  (:<):700,  (:=):990,  (<):700,  (=):700,  (=..):700, ... : ...|...],
N = 31.

% fy 前置:結合
?- setof( P:X, current_op( X, fy, P), O ), length(O,N).
O = [(+):200,  (-):200,  (@):200,  (\):200,  (\+):900],
N = 5.

% fx 前置:結合なし
?- setof( P:X, current_op( X, fx, P), O ), length(O,N).
O = [($):1,  (:-):1200,  (?-):1200,  (discontiguous):1150,  (dynamic):1150,  (initialization):1150,  (meta_predicate):1150,  (module_transparent):1150, ... : ...|...],
N = 13.

% xf 後置:結合なし
?- current_op( X, xf, P ).
false.

% yf 後置:結合
?- current_op( X, yf, P ).
false.

%日本語の助詞「て,に,を,は,の,が,…」は文法上は後置詞だが...さて

*/


return to front page.