我正在尝试用序言语言编写一些规则以将单数形式更改为复数形式并希望支持编写规则。
问问题
475 次
3 回答
0
您可以查看这本书“ PROLOG 程序员的自然语言处理”(第 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.
于 2019-07-29T08:41:23.180 回答
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.
您可能可以使规则更智能。这就是我要开始的地方。
于 2019-05-01T16:56:07.210 回答
0
list_member(X,[X|_]).
list_member(X,[_|TALL]):-list_member(X,TALL).
isVowels(A):-list_member(A,[a, e, i, o, u]),!.
isConsonants(A):-list_member(A,[b, c, d, f, g, h, j, k, l, m, n, p, q, r, s, t, v, x, w,y,z]),!.
word:- write('Enter the word you want to know weather it followed by a an or the:.'),read(X),nl,
plular(X):-((isVowels(sub_atom(X, _, 1, 0, C)))->(write('Plular form of '),write(X),write(' is '),write(X),write('s'));(write('Plular form of '),write(X),write(' is '),write(X),write('es'))).
于 2019-05-02T14:49:30.073 回答