代码之家  ›  专栏  ›  技术社区  ›  Gilles

使用文本搜索查找所有可能结果的算法

  •  1
  • Gilles  · 技术社区  · 14 年前

    我现在正在制作一个网络爬虫来抓取视频游戏网站上所有可能的角色(最终幻想十四磁石)。

    我做这件事的界面是使用网站的搜索。 http://lodestone.finalfantasyxiv.com/rc/search/characterForm

    如果搜索结果超过1000个字符,则只返回前1000个字符。文本搜索似乎也不理解*?或者。

    如果搜索字母a,我会得到所有名字中有a的字符,而不是所有以a开头的字符。

    我想我可以搜索所有字符组合aa、ab、ba等,但这不能保证我:

    • 我永远不会得到超过1000个结果
    • 它似乎不是很有效,有许多字符会出现多次,需要过滤掉。

    我正在寻找一个算法如何构造我的搜索文本。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Gareth Rees    14 年前

    作为一个实际问题,您是否向Square Enix请求过某种API访问或数据库转储?他们可能更喜欢这样,而不是让你抓取他们的搜索结果。

    纯粹从抽象的角度考虑,还不清楚任何搜索策略能否成功地找到所有结果。假设有一个叫“Ar”的角色,你会怎么找到它?如果你搜索“ar”,结果只会到达Ak。如果你搜索“a”或“r”,情况会更糟。任何其他搜索都无法找到此字符。(实际上,你可以通过猜测“Ar”的世界和/或主要技能来找到它,但理论上,这个世界上可能有太多具有这种技能的角色,所以这仍然是无效的。)

        2
  •  0
  •   Dialecticus    14 年前

    这里的主要问题是你打算怎么处理这些角色。你的计划的目的是什么?撇开这一点,你可以搜索单个字母,并根据主要技能和世界进行过滤(使用双循环)。任何辅音的点击率都不可能超过1000次。如果要搜索以元音开头的名称,请在循环中使用bigraph元音-其他字母,该循环将其他字母从a迭代到Z。

    额外的优化是尝试猜测列表中需要的字母将从哪一页开始。如果您有总页数(TNOP),那么您的列表将从TNOP*LETTER/27页附近的某个位置开始,其中LETTER是字母表中字母的顺序。