将自然语言转换为SQL查询

ln2sql的Python项目详细描述


#ln2sql

<;b>;ln2sql是一个用自然语言查询数据库的nlp工具。该工具接受输入数据库模型和句子,并将后者翻译为一个有效的sql语句,该语句能够查询输入数据模型。


以下法国论文(可在"docs/"目录中找到)对其进行了说明:

<;i>;<;a rel="license"href="https://www.researchgate.net/publication/278965118_fr2sql_de_bases_donnees_en_francais">;Beno_t Couderc和Jérémy Ferrero。fr2sql:法语数据库查询。(fr2sql:des données en fran_ais[法语]审讯)。在第17届朗诵会(附属于第22届塔林会议)的会议记录中。2015年6月。法国,卡昂。阿塔拉。pp.1-12<;/a>;<;/i>;

如果您使用ln2sql,请引用该论文。

它只是一个快速且脏兮兮的python包装器,但它具有一些速度优化功能。

*[数据模型只能从sql转储文件的解析中学习。因此,<;b>;不需要数据库连接<;b>;(https://github.com/ferrerojeremy/ln2sql数据库输入)

*在本文中,<;a rel="tt"href="http://www.cis.uni muenchen.de/~schmid/tools/treetagger/">;treetagger<;/a>;用于筛选输入语句acor的单词。通过这种方式,可以在输入语句的关键字和数据模型的关键字之间进行映射。
在ln2sql中,treegager被保留下来,支持导入个人配置文件(对于[语言](https://github.com/ferrerojeremy/ln2sql suppoRTED语言),[停止词和同义词](https://github.com/ferrerojeremy/ln2sql同义词和停止词列表)要更通用。

>;请注意,ln2sql因此无法自动解决性别和数字问题。因此,如果输入语句中有"student"一词,则该词与数据模型中的表"student"不匹配。要做到这一点,必须在[使用的aurus](https://github.com/ferrerojeremy/ln2sql同义词表和停止词列表)。
如果您想要使用treetagger的版本,则a<;a rel="wrapper"href="https://perso.limsi.fr/pointal/dev:treetaggerwrapper">;python wrapper<;/a>;存在,并且可以找到文档<;a rel="doc"href="http://treetaggerwrapper.readthedocs.io/en/latest/">;这里是<;/a>;

*[理论上,所有语言都可以支持。](https://github.com/ferrerojeremy/ln2sql支持的语言)

*语法仍然解析输入语句以生成相应的查询结构,但是现在这个structure存储在一个python类中,该类能够打印[a query structure json文件](https://github.com/ferrerojeremy/ln2sql/blob/master/readme.md json output)。因此,查询生成的哈希映射被放弃。此外,还采用了多线程实现。


\sql语句支持

-[x]select
-[x]one column
-[x]multiple column
-[x]all column
-[x]distinct select
-[x]aggregate functions
-[x]count select
-[x]sum select
-[x]平均选择
-[x]最小选择
-[x]最大选择
-[x]连接
-[x]内部连接
-[x]自然连接
-[x]其中
-[x]一个条件
-[x]多个条件
-[x]连接
-[x]分离
-[x]交叉条件
-[x]运算符
-[x]-[x]等于运算符
-[x]不等于运算符
-[x]大于运算符
-[x]小于运算符
-[x]类似运算符
-[]介于运算符之间(不是100%有效)
-[x]聚合fu条件
-[x]和条件
-[x]平均条件
-[x]最小条件
-[x]最大条件
-[x]按顺序
-[x]ASC
-[x]描述
-[x]按组
-[x]多个查询
-[x]异常和错误处理
-[]值检测(不是100%有效)

-[x]如何使用?

这些文件是csv文件。每一行代表一种关键字。忽略冒号之前的任何内容。关键字必须用逗号分隔。

您可以按照英文和法文模板构建自己的语言配置文件。


为此,需要加载相应的SQL转储文件。<;br/>;
a<;a rel="dump"ref="https://en.wikipedia.org/wiki/database\u dump">;数据库转储<;/a>;是一个包含表结构和/或数据库数据的记录的文件。


p align="center">;<;img src="https://raw.githubusercontent.com/ferrerojeremy/ln2sql/master/docs/database_loading.png"width="700">;



同义词表可以在"thesaurus/"目录中找到。您可以按照<;a rel="Thesaurus"href="http://extensions.openoffice.org/en/search"创建自己的主题词库。f%5b0%5d=field_project_tags%3a157">;OpenOffice模板<;/a>;

您可以使用停止字列表改进停止字筛选。您可以按照"stop word s/`directory"目录中的列表模板来构建自己的"stopwords"列表。



\\\\\\\\\\\\\<




>您可以按照以下方式直接使用python包装器:
``
>用法:
>python2sql.pypypypy-d&l t;path>;-l<;path>;-l<;path>;-i<;输入语句>;[-j<;path>;][-t<;path<;path>;][-s<;lt;lt;path>;[-s<;lt;lt;lt;路径>;]
参数:
-h打印此帮助消息
-d&l t;path>;指向SQL转储文件的路径
-l<;path>;指向语言配置文件的路径
-i<;输入语句>;要分析的输入语句
-j<;path>;指向JSON输出文件的路径
-t<;path>;指向同义词库文件的路径
-s<;path>;stopwords文件的路径
```
用法示例:
```
python ln2sql.py-d database/city.sql-l lang/english.csv-j output.json-i"使用blob名称计算有多少个城市?"
```

或通过图形界面键入以下命令:
````
python ln2sql-gui.py
```
将出现类似于下面的窗口:
<;p align="center">;<;img src="https://raw.githubusercontent.com/ferrerojeremy/ln2sql/master/docs/graphical\u user-interface.png"width="600">;<;/p>;

json输出


````
```````````json
{
"选择":{
"列":"年龄",
"类型":"avg"
},
"来自":{
"表":"学生"
>>},
"加入":{


"其中:{
"条件":[
"列":"姓名",
"操作员":"=",<
"表":"学生"
"学生"
"加入":{"加入":{



"其中:"
"其中:"{"条件":"{
"条件"条件:"[
"值":"doe"
},
{
{
"operator":"或"或
},
{"column":"age",
"operator":">;",
"value":"25"
>

>
<

"group by":{



"order"指:{






`






















<该工具在模型v下实现查看控制器模式。从python标准库导入的类不会显示在关系图中,除非继承所需的类(<;i>;例如<;/i>;<;i>;线程<;/i>;或<;i>;异常<;/i>;)。
<;p align="center">;<;img src="https://raw.githubusercontent.com/ferrerojeremy/ln2sql/master/docs/mvc_class_diagram.png">;<;/p>;
上面的关系图是用<;a rel="staruml"ref="http://staruml.io/">;staruml<;/a>;
<;br/>;
<;br/>;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在Spring YAML配置中避开SpEL美元符号?   java Flyway脚本跳过第一个后的第二个Flyway脚本   SwingJava:像JTable一样过滤面板   Java JTabbedPane将订单提升到所选选项卡   java如何水平打印jframe或赋予它打印属性?   java My inflate不显示xml文件,原因是什么?   同步(Singleton.class)和同步(obj)之间的java差异   如何在linux操作系统中使用Java获取服务器时区信息   java抽象方法和重写?   java选择相关对象的前N个元素   java无法计算对象的数量   类L安卓/widget/ImageView中没有字段mMaxWidth   JavaHibernate4.3.0。最终和春季数据JPA 1.4.3。释放