我正在尝试以序言语言编写一些规则,以将单数形式更改为复数形式,并希望支持编写规则。
答案 0 :(得分:0)
我假设您想将英语单词复数。一种方法是有一条通用规则,还有一些针对特殊情况的特定规则。
% special cases
pluralize(deer, deer).
pluralize(mouse, mice).
pluralize(antenna, antennae).
% general rule
pluralize(Singular, Plural) :- atom_concat(Singular, s, Plural).
对于某些单词,这似乎可以:
?- pluralize(coin, X).
X = coins.
?- pluralize(date, X).
X = dates.
但是似乎有些话使它绊倒了
?- pluralize(fox, X).
X = foxs.
您可能会使规则更加智能。这就是我要开始的地方。
答案 1 :(得分:0)
您可以浏览本书“ Natural Language Processing for PROLOG Programmers”(第262-263页),该书描述了将单词的单数形式更改为复数形式的一些规则。我编写了一个适用于名词的简单程序。希望对您有所帮助。
morphology(W, Wo):-
(sub_atom(W,_, 2, 0, C), (C == sh; C = ch));
(sub_atom(W,_,1,0,P), (P == s; P == z; P == x)) ->
atom_concat(W,es,Wo) ;
(sub_atom(W,Q,1,0,L), (L == y)) ->
sub_atom(W,_,Q,1,L1), atom_concat(L1,ies,Wo) ;
atom_concat(W,s,Wo).
? morphology('Age', S).
S = 'Ages'.
? morphology(student, S).
S = students.