【问题标题】:prolog rule to change singular form of word to plural序言规则将单词的单数形式更改为复数形式
【发布时间】:2019-04-30 11:37:06
【问题描述】:

我正在尝试用prolog语言编写一些规则,将单数形式变为复数形式,并希望支持编写规则。

【问题讨论】:

  • 您能否发表一下您目前取得的成就,以及您面临的困难?否则,有些人可能会认为您只是在要求 stackoverflow 做功课。
  • 有些任务比变换更适合查找,这是其中之一,因为有大量异常(绵羊、鹅/鹅、孩子/孩子)。我之前通过使用 WordNet 并通过现有的单词复数器运行他们的术语并从中创建 Prolog 事实来为这个问题做了一个起点。我通过添加最简单的规则来修剪数据库以便于维护:通过仅添加“s”来实现复数。 This is the source code,没有一个复数形式得到验证。

标签: forms prolog plural


【解决方案1】:

我假设你想复数英语单词。一种方法是制定一般规则,并针对特殊情况制定一些具体规则。

% 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.

您或许可以让规则更智能。这就是我要开始的地方。

【讨论】:

    【解决方案2】:
    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'))).
    

    【讨论】:

      【解决方案3】:

      您可以查看这本书“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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-19
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 2013-05-20
        相关资源
        最近更新 更多