gpt4 book ai didi

php - 如何分解搜索查询

转载 作者:行者123 更新时间:2023-11-29 04:26:49 26 4
gpt4 key购买 nike

我正在为 CCG 开发一个搜索引擎。我希望用户能够根据查询找到卡片,例如 “可以丢弃 ec 的 blue brigade hero enhancements”“purple kings of israel”。有许多变量可供搜索:旅(紫色、蓝色)、类型(英雄、邪恶角色 [ec's])、特殊能力(丢弃)和标识符(以色列国王)。我正在考虑使用正则表达式来查找常见的搜索参数。我知道这并不容易,微调需要很长时间,但有人能指出我正确的方向吗?正则表达式甚至是推荐的解决方案吗?我不知道它是否重要,但我正在使用 php 和 mysql。

最佳答案

您必须编写解析器来解析此类查询字符串。

正则表达式对于在查询字符串中查找“动词”和“名词”很有用,但您可能还需要一个描述查询语言的非上下文语法,例如:

<QUERY> := <TARGET_SPEC>
<TARGET_SPEC> := <OBJECT> 'that can' <ABILITY>
<TARGET_SPEC> := <OBJECT>
<OBJECT> := <COLOR> <WHAT>
<OBJECT> := <WHAT>
<COLOR> := 'blue' | 'red' | 'purple' | 'green'
<WHAT> := <ITEM> | <HERO>
<ITEM> := <ADJECTIVE> <ITEM>
<ADJECTIVE> := 'brigade' | 'hero' | 'magic' | 'enhanced' | 'rustproof'
<ITEM> := 'enhancements' | 'sword' | 'potion'
<HERO> := <HERO> 'of' <COUNTRY>
<HERO> := 'kings' | 'knights' | 'thiefs'
<COUNTRY> := 'israel' | 'palestine' | 'jordan' | 'egypt'
<ABILITY> := <ABILITY> 'and' <ABILITY>
<ABILITY> := 'swim' | 'dance' | discard <DISCARDABLE> | 'kill' <HERO> | 'use' <ITEM>
<DISCARDABLE> := 'ec's' | 'et's' | 'etc'

围绕这种语法构建的解析器将能够确定查询的哪一部分是对象,即能力、颜色、国家等。例如,给定输入字符串“red knights of jordan that can swim”,解析器将选择正确的规则并应用它们:

<QUERY> := 'red knights of jordan that can swim'
<TARGET_SPEC> := 'red knights of jordan that can swim'
<TARGET_SPEC> := 'red knights of jordan' 'that can' 'swim'
<OBJECT> := 'red knights of jordan'
<ABILITY> := 'swim'
<COLOR> := 'red'
<WHAT> := 'knights of jordan'
<HERO> := 'knights' 'of' 'jordan'
<HERO> := 'knights'
<COUNTRY> := 'jordan'

根据提取的信息,您将能够创建搜索条件。

使用语法还有一个额外的好处,可以解决一些其他方法难以解决的歧义 - 例如,如果用户要求“可以杀死白骑士的红色国王”,那么简单的算法只需通过匹配来寻找颜色每个带有可用颜色列表的单词都会失败。

我推荐阅读一本关于编译器设计的书 - Dragon Book是一个经典的选择(您不必阅读所有内容,只需阅读有关词法分析器和解析器的部分)。

如果您不想自己编写整个解析器的代码(因为这可能非常耗时且容易出错),您将需要一个解析器生成器(即,一个为给定的解析器源代码创建的程序语法); here是一个对 PHP 有一些建议的问题。

您还应该考虑阅读自然语言处理技术。斯坦福大学有在线类(class)here ,我现在正在“参加”,可以全心全意地推荐它。

关于php - 如何分解搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9884287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com