使用python的NLTK fcfg语法

时间:2016-11-25 20:54:27

标签: python python-3.x nlp nltk

我是NLP的新手。我在nltk_data中找到了这个文件。 我想写自己的语法。在写这些之前我需要知道(SEM =(?v +?pp))的含义是什么。 请帮我知道这个。

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

1 个答案:

答案 0 :(得分:2)

在这一行:

VP[SEM=(?v + ?pp)] -> IV[SEM=?v] PP[SEM=?pp]

简短回答: SEM=(?v + ?pp)正在连接两个字符串,第一个来自V中节点的SEM要素,第二个来自PP

更长的回答:语法为您提供了一个解析器,您可以为给定的文本形成树结构。在此树的每个节点上,您可以在使用解析器构建功能时操纵功能。这样,您就可以为树形成语义表示。在这些表示之间,您可以看到第一顺序逻辑和lambda函数,有用的表示是您在此处使用的SQL查询。根据解析器,您可能需要对功能进行不同的操作。在lambda函数上,解析器需要函数组合和逻辑运算,而在SQL查询中,解析器主要用于字符串连接。

更新

在此语法中,每行规则都有两面(左侧和右侧):lhs -> rhs 解析器应该找到一个树,其父节点是非终端lhs节点之一,并遵循其中一个规则,因为它们只接收来自rhs的子节点。

然后,对于语义部分,父节点的语义表示是组成其直接子节点表示的结果。

在此语法中,在右侧,您可以使用问号如:?var来处理右侧兄弟姐妹之间的协议。然后,您可以通过将值分配给另一个功能将值传递给左侧(如果您的解析器支持函数应用程序或逻辑操作等操作,则可以操作它们)。父节点的语义表示基本上是其子节点的语义表示的结果。在FCFG中,您将语义表示从右侧传递到左侧。