2024-05-28 20:19:21 发布
网友
我对使用自然语言工具包(NLTK)有疑问。我正在尝试制作一个应用程序,以便将自然语言问题转换为逻辑表示,并将查询转换为数据库。在
在下面使用simplify()方法后得到的结果逻辑打包并得到以下表达式:
exists z2.(owner(fido, z2) & (z0 = z2))
但我需要简化如下:
有没有别的方法可以按我的意思减刑?在
在NLTK中,simplify()执行beta缩减(according to the book),这不是您需要的。当你运用某些策略时,你所要求的只有在定理证明者的情况下才是可行的。在这种情况下,你要么需要知道你希望得到什么,要么你知道什么样的公理可以用来得到这样的结果。在
simplify()
NLTK中的定理证明器是Prover9,它提供了检查蕴涵关系的工具。基本上,您只能检查是否存在从表达式列表(前提)到目标表达式的有限步骤的证明。例如,在您的案例中,结果是:
============================== PROOF ================================= % Comments from original proof % Proof 1 at 0.00 (+ 0.00) seconds. % Length of proof is 8. % Level of proof is 4. % Maximum clause weight is 4. % Given clauses 0. 1 (exists x (owner(fido,x) & y = x)) # label(non_clause). [assumption]. 2 owner(fido,x) # label(non_clause) # label(goal). [goal]. 3 owner(fido,f1(x)). [clausify(1)]. 4 x = f1(x). [clausify(1)]. 5 f1(x) = x. [copy(4),flip(a)]. 6 -owner(fido,c1). [deny(2)]. 7 owner(fido,x). [back_rewrite(3),rewrite([5(2)])]. 8 $F. [resolve(7,a,6,a)]. ============================== end of proof ==========================
在NLTK python中:
更新
如果您坚持使用python中可用的工具,并且希望用正则表达式手动检查这个特定的模式。您可能可以使用正则表达式执行类似的操作(我不赞成,但让我们试试我那讨厌的策略):
def my_nasty_tactic(exp): parameter = re.findall(r'exists ([^.]*)\..*', exp) if len(parameter) == 1: parameter = parameter[0] substitution = re.findall(r'&[ ]*\([ ]*([^ ]+)[ ]*=[ ]*'+parameter+r'[ ]*\)', exp) if len(substitution) == 1: substitution = substitution[0] exp_abs = re.sub(r'exists(?= [^.]*\..*)', "\ ", exp) exp_abs = re.sub(r'&[ ]*\([ ]*' + substitution + '[ ]*=[ ]*'+parameter+r'[ ]*\)', '', exp_abs) return read_expr('(%s)(%s)' % (exp_abs, substitution)).simplify()
然后你可以这样使用它:
my_nasty_tactic('exists z2.(owner(fido, z2) & (z0 = z2))') # <ApplicationExpression owner(fido,z0)>
在NLTK中,
simplify()
执行beta缩减(according to the book),这不是您需要的。当你运用某些策略时,你所要求的只有在定理证明者的情况下才是可行的。在这种情况下,你要么需要知道你希望得到什么,要么你知道什么样的公理可以用来得到这样的结果。在NLTK中的定理证明器是Prover9,它提供了检查蕴涵关系的工具。基本上,您只能检查是否存在从表达式列表(前提)到目标表达式的有限步骤的证明。例如,在您的案例中,结果是:
在NLTK python中:
^{pr2}$更新
如果您坚持使用python中可用的工具,并且希望用正则表达式手动检查这个特定的模式。您可能可以使用正则表达式执行类似的操作(我不赞成,但让我们试试我那讨厌的策略):
然后你可以这样使用它:
相关问题 更多 >
编程相关推荐