Python 基于NLTK的语义分析

Python 基于NLTK的语义分析,python,parsing,nlp,nltk,chunking,Python,Parsing,Nlp,Nltk,Chunking,我正在尝试使用NLTK对语音导航命令进行语义分析,例如 “去旧金山”,“告诉我去主街123号的路”,等等 这可以通过一个相当简单的CFG语法来实现,比如 S -> COMMAND LOCATION COMMAND -> "go to" | "give me directions to" | ... LOCATION -> CITY | STREET | ... 问题是,这涉及到非原子(超过一个单词长)的文本,例如“go to”,NLTK似乎没有为其设置(如果我错了,请纠正我)

我正在尝试使用NLTK对语音导航命令进行语义分析,例如 “去旧金山”,“告诉我去主街123号的路”,等等

这可以通过一个相当简单的CFG语法来实现,比如

S -> COMMAND LOCATION
COMMAND -> "go to" | "give me directions to" | ...
LOCATION -> CITY | STREET | ...
问题是,这涉及到非原子(超过一个单词长)的文本,例如“go to”,NLTK似乎没有为其设置(如果我错了,请纠正我)。解析任务的先决条件是标记,所有标记器似乎总是标记单个单词。因此,我的选择似乎是:

a) 定义一个自定义标记器,可以将非语法标记分配给单词序列而不是单个单词(例如,“go to”:“COMMAND”)。 b) 使用功能来扩充语法,例如:

COMMAND -> VB[sem='go'] P[sem='to'] | ...
c) 使用chunker提取子结构(如COMMAND),然后对结果应用解析器。NLTK是否允许chunker->parser级联


这些选项中的一些看起来很复杂(黑客)。有好办法吗

您似乎想要识别命令

答案对此进行了研究,并包含了一个类似于选项(a)的解决方案,但有点不同,因为它允许标记者完成大部分工作。(b) 看起来确实有点黑。。。但是您正在创建一个非常定制的应用程序,所以它可以工作!我会用另一种方法(c)——解析,然后根据(a)中的CFG进行分块

然而,总的来说,正如另一个答案所解释的那样,似乎还没有一个完美的方法来做到这一点

你可能还想看看。他们的

mood()
函数尝试将已解析的句子识别为指示句、祈使句、条件句或虚拟句