将普通英语转换为SQL

时间:2012-07-21 12:49:26

标签: c# sql nlp

将英文文本转换为SQL查询的最佳方法是什么?例如,如果我希望用户通过输入“向我显示GPA高于3的大学生”来运行查询。或者“显示有两个或两个以上孩子的母亲”我到目前为止找到的最近的链接是:http://english2sql.com/demo.html,但它看起来并不支持,因为我发送给他的电子邮件反弹回来。如果有一些我可以使用的开源库,最好是在C#中,这将是非常棒的。有什么建议吗?

4 个答案:

答案 0 :(得分:3)

你将面临的问题是将松散的语法(英语)转换为严格的语法(SQL),例如:“给我所有关于孩子上高中的父母的记录。”,“告诉我父母的孩子在高中“,”让我看看在高中时有孩子的父母。“

所有这些语句都可以解析为SQL ...

SELECT * FROM Parents WHERE AttendsHighSchool = 1;

要构建这种自然语言来查询系统,您正在深入研究人工智能的领域。您可能需要考虑构建一个基于某些参数构建SQL查询的UI,

"Show me " [DropDown containing tables] 
where [DropDown containing Arguments] [DropDown containing operators] [DropDown containing values] "

答案 1 :(得分:2)

试用FriendlyData API。它接受普通英语并生成SQL语句或使用来自数据库的数据返回JSON-object

答案 2 :(得分:1)

您可以查看SharpNLP项目。 它具有非常有趣的解析和标记句子的能力。 一旦有了令牌流,你就可以从中分析和构造其他“句子”,例如在SQL中。

说,你可以识别像“show”,“display”这样的动词令牌并知道它将成为一个SELECT查询,然后你找到一个名词并将其视为一个表名,一个像“with”这样的介词将变成“WHERE”,文章标记可以被忽略等等。

以下是一个如何标记句子,识别每个标记的类型等的示例:Parsing English Sentences

另外,您可以查看M language这是Microsoft的DSL建模语言(我在其中一个PDC上看到过它)。使用它可能比使用SharpNLP更容易,因为您可以轻松定义自己的语法规则,因此它将理解“向我展示超过2个孩子的母亲”这样的短语,并且将确切知道如何处理它们。 但我现在不知道M语言的状态是什么。

答案 3 :(得分:1)

您可以尝试Kueri.me,这是一个将普通英语转换为SQL的平台。 即使以不同的形式提供,它也能够理解用户输入。

例如,

  • 告诉我GPA大于3的大学生
  • GPA高于3的学生
  • GPA> 3

该平台开箱即用,具有基本过滤,分组和排序功能。 您可以进一步配置表以获得额外的语言覆盖率。

例如,您可能希望启用地理位置,例如

  • 向我展示来自底特律的GPA大于3的学生
  • 向我展示20公里以内的纽约市学生

或定义动词

  • 告诉我去年注册并参加30多堂课的学生

请注意,我来自Kueri。