我正在学习一门名为“自然语言处理”的课程,虽然这门课程内容丰富,但我不知道所提供的内容是否能满足我所寻找的内容。
基本上,我想作为一个项目来实现Cortana或Siri的文本版本,即用户可以输入自然语言的计算机命令,并将它们处理并转换成适当的OS命令。我的问题是
发布于 2015-09-25 12:12:26
你想要创造的东西可以被认为是一个谨慎约束的聊天机器人,除了你不是试图与用户进行一般性的对话,而是处理特定的自然语言输入,并将它映射到特定的命令或动作。
本质上,您需要一个工具,该工具可以通过提取或至少识别各种重要的主题或主题元素来匹配各种用户输入,然后决定如何处理这些数据。
与其对自然语言处理进行抽象的讨论,不如提出一个建议。Use ChatScript.这是一个免费的开源工具,用于创建聊天机器人,它最近在Loebner聊天机器人竞赛中占据了第一位,就像它在过去几次这样做的那样:
http://chatscript.sourceforge.net/
该工具是用C++编写的,但是您不需要接触源代码就可以创建NLP应用程序;只需使用该工具提供的脚本语言即可。虽然最初是为聊天机器人编写的,但它已经扩展为一个非常友好的程序员工具,可以做任何类型的NLP应用程序。
最重要的是,您是,而不是受工具哲学限制的,也不是工具提供的框架所限制的。它拥有大多数脚本语言的所有功能,所以你不会发现自己为了完成你的应用程序而走了很长的路,但在最后一英里里却发现了一些致命的限制,它击败了你的应用程序,或者至少严重地削弱了它。
它还包括大量的本体,它们可以极大地启动您的开发工作,并且内置的预处理器可以完成语音部分解析、输入一致性和许多其他对编写脚本至关重要的任务,这些任务可以很容易地被概括为处理用户输入中的大量变化。它还具有与WordNet同步集数据库的完整接口。ChatScript中还有许多其他重要的特性,使得NLP开发变得更加容易,这里列出的太多了。它可以作为服务器在、Linux、或上运行,可以使用TCP套接字连接进行访问。
下面是一些ChatScript脚本代码的一个很小且过于简单的例子:
# Define the list of available devices in the user's household.
concept: ~available_devices( green_kitchen_lamp stove radio )
#! Turn on the green kitchen lamp.
#! Turn off that damn radio!
u: ( turn _[ on off ] *~2 _~available_devices )
# Save off the desired action found in the user's input. ON or OFF.
$action = _0
# Save off the name of the device the user wants to turn on or off.
$target_device = _1
# Launch the utility that turns devices on and off.
^system( devicemanager $action $target_device )上面是一个典型的ChatScript规则。你的应用程序会有很多这样的规则。这个规则是寻找来自用户的命令来打开和关闭房屋中的各种设备。#字符表示一行是注释。这是该规则的head的细目
如果规则模式与当前用户输入匹配,它将“触发”,然后执行规则的body。这个规则正文的内容是相当明显的,每一行上面的注释将帮助您理解如果触发规则会做什么。它保存了从用户输入到变量中捕获的所需操作和所需目标设备。(ChatScript变量名前面有一个或双美元符号。)然后,它执行一个名为devicemanager的程序,该程序实际上将打开或关闭所需的设备。
我想指出ChatScript的许多特性之一,这些特性使它成为一个强大的工业优势NLP工具。如果您查看以上规则,您将看到两个句子的前缀是一个由字符#!组成的字符串。这些不是评论,而是有效的句子。您可以在验证模式下运行ChatScript。在验证模式下,它将在脚本中找到所有验证语句。然后,它将对紧接它/它们之后的规则应用每个验证语句。如果规则模式与验证语句不匹配,则会将错误消息写入日志文件。这使得每个验证语句都是一个很小,易于实现的单元测试。因此,稍后,当您对脚本进行更改时,您可以在验证模式下运行ChatScript,并查看是否有任何问题发生。
https://stackoverflow.com/questions/32770511
复制相似问题