2011-05-15 129 views
3

我有兴趣编写一个解析引擎,比如Inform这样的解析引擎,它非常强大。文本游戏命令解析?

我已经尝试了几种不同的方法:

  • 正则表达式。对于正则表达式,我只能匹配{verb} {noun1 optional-noun2} {optional-preposition} {indirect-noun1 optional-indirect-noun2}这不起作用。
  • 预定义动词列表及其匹配的介词和名词。这种方法太复杂了,因为必须有大量的预定义数据。
  • 拆分成不同的单词并通过字典映射运行它们。再次,这是太复杂,不实际,由于某些词的含糊不清,如“看”或“放(上,下)”

我知道语言处理,但我实际上不知道如何开始和有些东西太复杂了。 (没有CS背景,我现在只是自己学习)。

的一些想法,我有:

  • 我已经说过了,自然语言处理。
  • 设计一个解析器,解析类似于SQL的东西。

还有其他想法吗?我将如何去设计和实施它们?

注意我使用Python作为我的语言。如果你错过了,我不会设计一种编程语言,我只是解析用户命令,比如“go north”或复杂的东西,比如“用毯子把火扑灭”

+2

您可能想看看pyparsing模块pyparsing.wikispaces.com – 2011-05-15 23:06:49

+0

我觉得写我自己的解析器会让我受益更多,因为我会学到更多东西。 – Pwnna 2011-05-15 23:07:37

+0

我的观点是编写pyparsing模块,以便了解它是如何完成的。 – Pwnna 2011-05-15 23:09:47

回答

2

除了提到的pyparsing,看起来非常合适(我只用它一点点),你应该看看使用nltk。这是一个伟大的自然语言处理工具集,甚至还有一个book

+0

是的,我也看到了这一点:http://www.gnu-darwin.org/www001/ports-1.5a-CURRENT/devel/py-parsing/work/pyparsing-1.4.5/docs/pycon06-AdventureEngineUsingPyparsing-notes。 pdf – Pwnna 2011-05-15 23:31:10

+0

看起来非常合适 – zeekay 2011-05-15 23:33:55

+1

'pyparsing'几乎不合适,因为它会创建递归下降解析器。当你的语法只有一点模棱两可(任何NL语法分析器很快就会有)时,它会停下来;我见过这种情况。改为使用NLTK。 – 2011-05-16 08:45:44