java - 将自然语言问题转换为 SQL 查询

标签 java desktop-application opennlp

<分区>

我想使用 opennlp Java 库将自然语言问题转换为 SQL 查询,即

Who won women figure skating in Sochi?

应转换为

select name from winners where event='skating_woman'

有人知道哪些类有用以及如何实现吗?

同时粘贴我试过的代码。
我已将问题转换为陈述,然后再转换为标记。

/////////1st part

String paragraph = "Did Matt win the men slalom?";
InputStream is1 = new FileInputStream("bins/en-sent.bin");
SentenceModel model1 = new SentenceModel(is1);
SentenceDetectorME sdetector = new SentenceDetectorME(model1);
String sentences[] = sdetector.sentDetect(paragraph);
System.out.println(sentences[0]);
is1.close();

////////2nd part
InputStream is2 = new FileInputStream("bins/en-token.bin");
TokenizerModel model2 = new TokenizerModel(is2);
Tokenizer tokenizer = new TokenizerME(model2);
String tokens[] = tokenizer.tokenize(sentences[0]);
for (String a : tokens)
    System.out.println(a);
is2.close();

最佳答案

对此的简单回答是您“可以”做到 - 但它不切实际并且几乎不可能。原因很简单,您可以有许多相似的问题,这些问题的含义可能完全相同。使用 SQL 查询,您必须保留特定的语法才能获取数据……使用标准语言,您可能有 100 种不同的语法来获取相同的东西。将其映射到 SQL 语言是非常不切实际的,几乎是不可能的。

是的,您可以强制用户使用特定的词或特定的问题格式,以便您的程序可以将它们解释为 SQL 查询 - 但这又一次打破了您想要实现的范式,不是吗

编辑:

因为你太绝望了;)你可以“潜在地”做这样的事情

让我们想象一个非常简单的查询

SELECT * FROM USERS WHERE AGE = '20';

有哪些可能的人类语言问题?

  • 你能告诉我所有 20 岁的人吗?
  • 显示 20 岁的人
  • 这个群体中有多少人是 20 岁的?
  • 这张表中有多少人有 20 年?
  • 我们有 20 岁的人吗?
  • 搜索所有 20 岁的人

然后您可以做的是创建某种 Map<key,value>在哪里。

Key = USERS;
Value = people, humans, 

还有一张 map

Key = SELECT;
Value = Can you show me, Display, Do we have, Search, How many;

等等 - 这将创建一个复杂的映射,其中包含所有可能的短语,这些短语可能表示相同的意思并对应于给定的 SQL 查询语法元素。这可能不是最好的解决方案,但它是我可能会做的 - 至少这是我会开始的

关于java - 将自然语言问题转换为 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22983003/

相关文章:

c# - Windows 桌面应用程序的想法

java - 在桌面应用程序中存储配置设置的最佳实践是什么?

java - 适用于整个文本文件的 OpenNLP 句子检测 API

java - GSON - JsonSyntaxException - 第 7 行第 4 列的预期名称

java - 根据我的需要,正确的 java 应用程序类型是什么?

java - 如何找到存储在链表中的值而不是存储在 HashMap 中的值

java - 异常:缺少manifest.properties

java - 如何在OpenNLP中进行嵌套命名实体识别?

java - 列表包含要在 java 中使用 lambda 设置的另一个列表

java - 同步HashMap与ConcurrentHashMap编写测试