我正在寻找一个 PHP 库,它允许用户基本上使用真正的英语输入要运行的命令。基本上,我希望用户能够执行以下操作:
Please search for all users in Europe
这等同于 select * where users = 'Europe'
或者我的意图的另一个例子:
查找(查找)John Smith 的电子邮件地址
注意:如果您可以说 for John Smith, Jane Smith, and John Doe
就更好了
理想情况下,我希望这个库具有可扩展性,这样我就可以在某些事情出现时编写需要发生的事情,例如 find,email
或 search,users
有人知道可以执行上述操作的 PHP 库吗?
最佳答案
据我所知,目前没有基于自然语言查询进行搜索的库,无论是 PHP 还是任何其他编程语言(我假设您不能使用 IBM Watson :))。
我认为可行的方法是基于语法的解析器和模糊搜索:
使用像 Jison 这样的解析器生成器您可以在用户浏览器上解析和“理解”与生成语法对应的所有语句,仅向服务器发送生成的查询或中间表示。
它比 PHP 解析器更好,因为用户可以在键入时立即得到反馈,而且它比提交表单并收到错误更令人沮丧。在这种情况下,查询解释将是 99% 正确的,但在许多情况下,完全正确(从人类的角度来看)的查询将被拒绝,因为语法没有预见到。
另一种情况,你可以做一些预处理,比如去除停用词,将文本小写,词干提取等,然后用全文搜索引擎搜索(Lucene可能是最强大的,但它是用Java ). PostgreSQL support it MySQL 也有一些全文搜索功能。还可以基于基本 RDBMS 构建原始引擎,使用索引和标记化空格和标点符号的文本。
哪种方式取决于您的数据的多样性和噪声程度以及预期查询的多样性。 你也可以尝试实现一种混合的方法,即使用语法解析文本,如果失败则使用全文搜索。
关于用于模糊搜索的 PHP 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15370710/