Python NLTK:从树值转换为Lambda函数表示法

Python NLTK:从树值转换为Lambda函数表示法,python,lambda,nltk,context-free-grammar,Python,Lambda,Nltk,Context Free Grammar,我试图将一个句子转换成lambda函数表示法,如第4.2节所示。使用代码,我可以将句子转换为语义值,并使用上下文无关语法解析句子,但如何将句子转换为lambda符号呢 import nltk grammar = nltk.CFG.fromstring(""" S -> NP VP VP -> V NP V -> "is" Adj -> "Chewing" Coj -> "and" Nom -> Adj Nom | N NP -&

我试图将一个句子转换成lambda函数表示法,如第4.2节所示。使用代码,我可以将句子转换为语义值,并使用上下文无关语法解析句子,但如何将句子转换为lambda符号呢

import nltk
grammar = nltk.CFG.fromstring("""
  S -> NP VP
  VP -> V NP 
  V -> "is" 
  Adj -> "Chewing"
  Coj -> "and"
  Nom -> Adj Nom | N
  NP ->  Nom Coj NP | N
  Det -> "a" | "an" | "the" | "my"
  N -> "gum" | "candy" | "thrilling"
  P -> "in" | "on" | "by" | "with"
  """)
sent = "Chewing gum and candy is thrilling".split()
rd_parser = nltk.RecursiveDescentParser(grammar, )
for tree in rd_parser.parse(sent):
    print (tree)

简短回答:您必须编写自己的语义语法。将CFG映射到lambda演算是不容易的

更长的答案

从CFG中,最接近语义树的是为非终端指定语义特征,SQL CFG示例是如何进行此操作的良好指南,请参见第1.1节。发件人:

将CFG映射到lambda演算,反之亦然,或者从文本中学习两者,仍然是一项值得研究的工作,所以目前还没有明确的方法

看到和

>>> nltk.data.show_cfg('grammars/book_grammars/sql0.fcfg')
% start S
S[SEM=(?np + WHERE + ?vp)] -> NP[SEM=?np] VP[SEM=?vp]
VP[SEM=(?v + ?pp)] -> IV[SEM=?v] PP[SEM=?pp]
VP[SEM=(?v + ?ap)] -> IV[SEM=?v] AP[SEM=?ap]
NP[SEM=(?det + ?n)] -> Det[SEM=?det] N[SEM=?n]
PP[SEM=(?p + ?np)] -> P[SEM=?p] NP[SEM=?np]
AP[SEM=?pp] -> A[SEM=?a] PP[SEM=?pp]
NP[SEM='Country="greece"'] -> 'Greece'
NP[SEM='Country="china"'] -> 'China'
Det[SEM='SELECT'] -> 'Which' | 'What'
N[SEM='City FROM city_table'] -> 'cities'
IV[SEM=''] -> 'are'
A[SEM=''] -> 'located'
P[SEM=''] -> 'in'