Определить предикат равенства Lambda-Calculus nltkPython

Программы на Python
Ответить
Anonymous
 Определить предикат равенства Lambda-Calculus nltk

Сообщение Anonymous »

Я пытаюсь определить представление слова «are» в лямбда-исчислении, которое является предикатом равенства для этого ccg:

Код: Выделить всё

ccg = '''
# CCG grammar
# complete the lexical entries with their categories and semantics

:- S, NP, N

logicians => NP { \\x. LOGICIANS(x) }
logicians => N { \\x. LOGICIANS(x) }
linguists => NP { \\x. LINGUISTS(x) }
linguists => N { \\x. LINGUISTS(x) }
engineers => NP { \\x. ENGINEERS(x) }
engineers => N { \\x. ENGINEERS(x) }

non => NP/N { \\N x. ~N(x) }

are => (S\\NP)/NP  {\\x y.are(x,y)}

all => NP/N { \\P Q. all x. (P(x) -> Q(x)) }
no => NP/N { \\P Q. all x. (P(x) -> ~Q(x)) }
some => NP/N { \\N V. exists x. (N(x) & V(x)) }
'''
С помощью этого ccg я хочу проанализировать предложения типа «все логики — лингвисты». Однако мне трудно найти правильное представление слова «есть». Например, я попытался определить «являются» как:

Код: Выделить всё

are => (S\\NP)/NP {\\X x.X(\y.are(x,y))}
К сожалению, это привело к ошибочной семантической интерпретации:

Код: Выделить всё

S {are(\x.LINGUISTS(x),\Q.all x.(LOGICIANS(x) -> Q(x)))}
Далее я попытался определить это как:

Код: Выделить всё

are => (S\\NP)/NP { \\X Y. all y. (X(y)  Y(y)) }
Но затем я столкнулся со следующей ошибкой, потому что y интерпретируется как переменная

Код: Выделить всё

LogicalExpressionException                Traceback (most recent call last)

/usr/local/lib/python3.10/dist-packages/nltk/sem/logic.py in parse(self, data, signature)
153         try:
--> 154             result = self.process_next_expression(None)
155             if self.inRange(0):

24 frames

LogicalExpressionException: 'y' is an illegal predicate name.  Individual variables may not be used as predicates.

The above exception was the direct cause of the following exception:

LogicalExpressionException                Traceback (most recent call last)

/usr/local/lib/python3.10/dist-packages/nltk/sem/logic.py in parse(self, data, signature)
157         except LogicalExpressionException as e:
158             msg = "{}\n{}\n{}^".format(e, data, " " * mapping[e.index - 1])
--> 159             raise LogicalExpressionException(None, msg) from e
160
161         if self.type_check:

LogicalExpressionException: 'y' is an illegal predicate name.  Individual variables may not be used as predicates.
all y.(LINGUISTS(y)  all x.(LOGICIANS(x) -> y(x)))
Я не могу изменить саму грамматику (правила S,NP,N), поэтому чувствую, что застрял. Есть ли способ определить отношение равенства в лямбда-исчислении для ccg?

Подробнее здесь: https://stackoverflow.com/questions/792 ... culus-nltk
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»