ily*_*eck 5 python parsing nlp chunking nltk
我正在尝试使用NLTK语音解析语音导航命令,例如"去旧金山","给我指向123 Main Street"等等.
这可以通过一个相当简单的CFG语法来完成,例如
S -> COMMAND LOCATION
COMMAND -> "go to" | "give me directions to" | ...
LOCATION -> CITY | STREET | ...
Run Code Online (Sandbox Code Playgroud)
问题是这涉及非原子(超过一个单词长)的文字,例如"转到",NLTK似乎没有设置(如果我错了,请纠正我).解析任务将标记作为先决条件,并且所有标记器似乎始终标记单个单词.所以,我的选择似乎是:
a)定义一个自定义标记器,它可以将非语法标签分配给单词序列而不是单个单词(例如,"转到":"命令").b)使用特征来增强语法,例如:
COMMAND -> VB[sem='go'] P[sem='to'] | ...
Run Code Online (Sandbox Code Playgroud)
c)使用chunker提取像COMMAND这样的子结构,然后将解析器应用于结果.NLTK是否允许chunker-> parser级联?
其中一些选项似乎令人费解(黑客).有好办法吗?
看来您想确定必要条件。
这个答案已经对此进行了研究,并包含一个类似于您的选项(a)的解决方案,但有点不同,因为它让标记器完成大部分工作。(b) 确实看起来有点 hacky...但是您正在创建一个非常自定义的应用程序,所以它可以工作!我会以相反的方式执行 (c) - 解析,然后根据 (a) 中的 CFG 进行分块。
然而,总的来说,正如其他答案所解释的那样,似乎还没有一个完美的方法来做到这一点。
您可能还想查看pattern.en(另请参阅他们的 GitHub 存储库)。他们的
mood()函数尝试将解析的句子识别为指示性、命令性、条件性或虚拟语气
| 归档时间: |
|
| 查看次数: |
3273 次 |
| 最近记录: |