8 练习
☼ 将下列句子翻译成命题逻辑,并用
Expression.fromstring()
验证结果。提供显示你的翻译中命题变量如何对应英语表达的一个要点。- If Angus sings, it is not the case that Bertie sulks.
- Cyril runs and barks.
- It will snow if it doesn’t rain.
- It’s not the case that Irene will be happy if Olive or Tofu comes.
- Pat didn’t cough or sneeze.
- If you don’t come if I call, I won’t come if you call.
☼ 翻译下面的句子为一阶逻辑的谓词参数公式。
- Angus likes Cyril and Irene hates Cyril.
- Tofu is taller than Bertie.
- Bruce loves himself and Pat does too.
- Cyril saw Bertie, but Angus didn’t.
- Cyril is a fourlegged friend.
- Tofu and Olive are near each other.
☼ 翻译下列句子为成一阶逻辑的量化公式。
- Angus likes someone and someone likes Julia.
- Angus loves a dog who loves him.
- Nobody smiles at Pat.
- Somebody coughs and sneezes.
- Nobody coughed or sneezed.
- Bruce loves somebody other than Bruce.
- Nobody other than Matthew loves somebody Pat.
- Cyril likes everyone except for Irene.
- Exactly one person is asleep.
☼ 翻译下列动词短语,使用λ-抽象和一阶逻辑的量化公式。
- feed Cyril and give a capuccino to Angus
- be given ‘War and Peace’ by Pat
- be loved by everyone
- be loved or detested by everyone
- be loved by everyone and detested by no-one
☼ 思考下面的语句:
>>> read_expr = nltk.sem.Expression.fromstring
>>> e2 = read_expr('pat')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
exists y.love(pat, y)
显然这里缺少了什么东西,即
e1
值的声明。为了ApplicationExpression(e1, e2)
被β-转换为exists y.love(pat, y)
,e1
必须是一个以pat
为参数的λ-抽象。你的任务是构建这样的一个抽象,将它绑定到e1
,使上面的语句都是满足(上到字母方差)。此外,提供一个e3.simplify()
的非正式的英文翻译。现在根据
e3.simplify()
的进一步情况(如下所示)继续做同样的任务。>>> print(e3.simplify())
exists y.(love(pat,y) | love(y,pat))
>>> print(e3.simplify())
exists y.(love(pat,y) | love(y,pat))
>>> print(e3.simplify())
walk(fido)
☼ 如前面的练习中那样,找到一个λ-抽象
e1
,产生与下面显示的等效的结果。>>> e2 = read_expr('chase')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
\x.all y.(dog(y) -> chase(x,pat))
>>> e2 = read_expr('chase')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
\x.exists y.(dog(y) & chase(pat,x))
>>> e2 = read_expr('give')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
\x0 x1.exists y.(present(y) & give(x1,y,x0))
☼ 如前面的练习中那样,找到一个λ-抽象
e1
,产生与下面显示的等效的结果。>>> e2 = read_expr('bark')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
exists y.(dog(x) & bark(x))
>>> e2 = read_expr('bark')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
bark(fido)
>>> e2 = read_expr('\\P. all x. (dog(x) -> P(x))')
>>> e3 = nltk.sem.ApplicationExpression(e1, e2)
>>> print(e3.simplify())
all x.(dog(x) -> bark(x))
◑ 开发一种方法,翻译英语句子为带有二元广义量词的公式。在此方法中,给定广义量词
Q
,量化公式的形式为Q(A, B)
,其中A
和B
是〈e, t〉类型的表达式。那么,例如all(A, B)
为真当且仅当A
表示的是B
所表示的一个子集。◑ 扩展前面练习中的方法,使量词如 most 和 exactly three 的真值条件可以在模型中计算。
◑ 修改
sem.evaluate
代码,使它能提供一个有用的错误消息,如果一个表达式不在模型的估值函数的域中。★ 从儿童读物中选择三个或四个连续的句子。一个例子是
nltk.corpus.gutenberg
中的故事集:bryant-stories.txt
,burgess-busterbrown.txt
和edgeworth-parents.txt
。开发一个语法,能将你的句子翻译成一阶逻辑,建立一个模型,使它能检查这些翻译为真或为假。★ 实施前面的练习,但使用 DRT 作为意思表示。
(Warren & Pereira, 1982)为出发点,开发一种技术,转换一个自然语言查询为一种可以更加有效的在模型中评估的形式。例如,给定一个
(P(x) & Q(x))
形式的查询,将它转换为(Q(x) & P(x))
,如果Q
的范围比P
小。
关于本文档…
针对 NLTK 3.0 作出更新。本章来自于 Natural Language Processing with Python,Steven Bird, Ewan Klein 和Edward Loper,Copyright © 2014 作者所有。本章依据 Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License [http://creativecommons.org/licenses/by-nc-nd/3.0/us/] 条款,与 自然语言工具包 [http://nltk.org/
] 3.0 版一起发行。
本文档构建于星期三 2015 年 7 月 1 日 12:30:05 AEST