我可以将英文文本转换为 sql 查询的最佳方式是什么。例如,如果我希望用户通过键入“显示 GPA 高于 3 的大学生”来运行查询。或“显示有 2 个或更多孩子的母亲”到目前为止我找到的最接近的链接是:http ://english2sql.com/demo.html ,但它看起来不太受支持,因为我发送给他们的电子邮件被退回对我来说。如果有一些我可以使用的开源库,最好是在 C# 中,那会很棒。有什么建议么?
4 回答
您将面临的问题是将松散的语法(英语)转换为严格的语法(SQL),例如:“给我获取有关其孩子上高中的父母的所有记录。”、“给我看孩子上高中的父母” -schools”,“让我看看有孩子上高中的父母。”
所有这些语句都可能解析为 SQL ...
SELECT * FROM Parents WHERE AttendsHighSchool = 1;
要构建这种用于查询系统的自然语言,您需要深入研究人工智能领域。您可能需要考虑构建一个基于某些参数构建 SQL 查询的 UI,
IE
"Show me " [DropDown containing tables]
where [DropDown containing Arguments] [DropDown containing operators] [DropDown containing values] "
您可以查看SharpNLP项目。它具有非常有趣的解析和标记句子的能力。一旦你有了一个标记流,你就可以从中分析和构造其他“句子”,例如在 SQL 中。
比如说,你可以识别像“show”、“display”这样的动词标记,并且知道这将是一个 SELECT 查询,然后你找到一个名词并将其视为表名,像“with”这样的介词将变成“WHERE ",文章标记可以被忽略,等等。
下面是一个示例,说明它如何标记一个句子、识别每个标记的类型等等:Parsing English Sentences
您还可以查看M 语言,它是 Microsoft 的一种 DSL 建模语言(我在其中一个 PDC 上看到过它)。使用它可能比 SharpNLP 之类的东西更容易使用,因为您可以轻松定义自己的语法规则,因此它会理解诸如“给我看有 2 个以上孩子的母亲”之类的短语,并且会确切地知道如何处理它们。但是我不知道现在 M 语言的状态如何。
你可以试试Kueri.me,一个将简单的英语转换为 SQL 的平台。即使以不同的形式提供,它也能够理解用户输入。
例如,
- 让我看看 GPA 高于 3 的大学生
- GPA高于3的学生
- 平均绩点 > 3
该平台开箱即用,具有基本的过滤、分组和排序功能。您可以进一步配置表格以获得额外的语言覆盖。
例如,您可能想要启用地理位置,例如
- 告诉我来自底特律的 GPA 大于 3 的学生
- 带我看看 20 公里内来自纽约市的学生
或定义动词
- 告诉我去年注册并参加了 30 多节课的学生
请注意,我来自 Kueri。
试试FriendlyData API。它接受简单的英语并生成 SQL 语句或返回带有来自您数据库的数据的 JSON 对象