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.