Giter VIP home page Giter VIP logo

ch2sql's Introduction

ch2sql

目标是用自然语言查询电子表格中的数据(区别于关系型数据库,我们只关心单表问题) . 总体思路是以查询输入语句和电子表格信息为输入, 结合自然语言处理工具将查询语句映射到数据库语义相关的节点中,最后转换为SQL类似的JSON表示结构

特性列表

  • 结合数据表语义分词, 确保字段名,常见的值不会被分词算法拆分.例如: 'APP下载量' 是表格的一个属性名, 不能拆分为'APP'和'下载量'两个词

  • 用词向量方法映射属性节点(AN)和值节点(NN) AN ,NN 以外的节点采用硬编码匹配方法, 优先匹配. 则剩下的节点可能是AN,NN,UN(UNKNOWN NODE) 三种可能. 依次与Table中记录的Column name 列表与Column Value比对,比对的结果是(0,1)之间的一个score, score越大, 则两者之间越匹配

  • 修改了开源的Synonyms, 开源版本中对word2vec模型中不存在的词统一返回size 为(100,) 值全部为0的向量. 这样会造成的问题是,如果用户比较的两个词都不在模型中,返回的score会比较大,尽管两个词没有多大的关系. 我们将不存在词的 向量设置为随机向量.显著提高了word2vec模型中不存在词的判定准确度

  • 查询改写 对输入的查询语言进行处理. 通过正则表达式将"比...大|高|多"的形式统一改写称为大于... 的形式. 将"在...和|到 ... 之间"的查询形式统一改写成'小于...并且大于...'的形式

转换策略

开发日志

  • (在此之前没有记录)
  • 2018-2-5 查询改写函数(sentence 模块中query_rewrite函数)

使用方法

TODO LIST

  • [ ]目前仍然有一个缺陷, 我们可以结合数据表的属性和值改变结巴分词的分词策略,让这些特定值不能拆分. 属性名"客户类别"不会被拆分,但是如果用户的 输入是"客户分类", 显然和"客户类别"是同一个意思, 但是这个词会被拆分为"客户", "分类"两个词.这显然是不正确的. 改进想法: "编码", "类别"这些词通常会和其他的名词一起组合出现在数据表的属性名中. 如"客户类别", "用户编码", 在扫描数据表信息时 将"客户"与"类别"拆开,然后将"客户"与"类别"的近义词组合, 这样会生成很多"客户类别","客户种类"等标准属性名的别名.将这些别名存储在一起 ;在对查询语句分词时添加到词典列表中,就能确保这些词不会被拆分开
  • [ ]比较问题中,中文中常常使用"比***大"的形式,考虑使用正则解决这个问题

ch2sql's People

Contributors

alexsun1995 avatar linbuliao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

ch2sql's Issues

node mapping first version

Goal

map 自然语言的分词结果到数据库语义的节点中

Example

"京东商城的总税费"
result:

word:京东商城 --> type:VN -->sql symbol:客户名称.京东商城
word:的 --> type:UN -->sql symbol: 
word:总 --> type:FN -->sql symbol:SUM
word:税费 --> type:AN -->sql symbol:税费

VN ==> Value Node
UN ==> Unknown Node
FN ==> Function Node
AN ==> Attribute Node

同时支持同义词识别
如果查询为: 京东商城的总税款
则结果为:

word:京东商城 --> type:VN -->sql symbol:客户名称.京东商城
word:的 --> type:UN -->sql symbol: 
word:总 --> type:FN -->sql symbol:SUM
word:税款 --> type:AN -->sql symbol:税费

(数据表有全名为"税费"的属性)
同义词识别模块使用词向量和编辑距离相结合的形式

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.