gpt4 book ai didi

JavaScript 搜索算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:52:41 24 4
gpt4 key购买 nike

我正在为我的一个项目开发一个使用 JavaScript 的客户端搜索系统,在让搜索功能按照人们期望的方式运行时遇到了特别的麻烦。

目前,搜索词,在数组 q 中排序,并用 for 循环循环(所以 q[i] 是当前正在处理的术语),选择它们所属的单词,并且彼此之间也没有任何影响。

这会导致两个问题。

  1. 对于第一个问题,搜索 intro 会返回一篇Introduction 文章,正如您所料,但类似地搜索 con 返回关于条件 的文章,这并不是真正有用的功能。

  2. 第二个更严重的问题是搜索词不会相互影响,因此搜索 introduction 对喜剧 Actor 设置笑话很重要,返回“introduction”和“设置”文章,因为这些术语在查询中。

循环遍历每个搜索词(在循环每篇文章的循环内)并对结果进行优先排序的代码片段如下:

rq = new RegExp(q[i], 'gim');
eq = new RegExp("\\b" + escape(q[i]) + "\\b", 'gi');

if (rq.test(title) || rq.test(keywords)) {
match = true;
if (title.match(rq) != null) {
if (title.match(eq) != null) {
priority += (title.match(eq).length * 5)
}
priority += (title.match(rq).length); // Is this wise?
}
if (keywords.match(rq) != null) {
if (keywords.match(eq) != null) {
priority += (keywords.match(eq).length * 3);
}
priority += (keywords.match(rq).length); // Is this wise?
}
}

这些行为在做出算法决策时是不可避免的,但是我实在想不出更好的方法来做到这一点(而且显然有更好的方法)。也许我只是想多了。

最佳答案

一些观察:

(1) “搜索 intro 会返回一篇 Introduction 文章,正如您所料,但类似地,搜索 cond 会返回一篇关于条件的文章,这可能不是用户正在寻找的内容。”我不明白这里的区别。看起来像是匹配前缀的两种情况。此外,后缀/中缀 ion 将同时匹配 IntroductionConditions,至少对于你的 rq正则表达式。

(2) .match()这里返回一个匹配字符串数组,因为你有 g修饰符集。如果title是“喧嚣与骚动”,priority += (title.match(rq).length)给出两倍priority the 而不是 fury。我不确定我是否理解为什么多个匹配项应该获得更多 priority .正如 Florent 所提到的,您可能希望将 theand 视为停用词,以免这些不重要的词的多次匹配淹没了您真正关心的词的匹配。

(3) 您可能希望提供诸如“此短语中的所有词,按此确切顺序”、“所有词,按任何顺序”和“这些词中的任何一个”之类的选项。您在 eq 的正确轨道上, 在单词边界匹配。或者您可能希望明确支持某种词干提取或通配符语法,例如,intro"匹配 Introductionintro 不匹配.

更新

实现“所有单词,以任何顺序”很简单——您可能想多了。此代码段设置 matchtrue如果所有 qtitle 中找到或 keywords , false否则:

var match = true;
for (i = 0; i < q.length; i++) {
eq = new RegExp("\\b" + escape(q[i]) + "\\b", 'gi');
if (!eq.test(title)) {
match = false;
break;
}
if (!eq.test(keywords)) {
match = false;
break;
}
}

关于JavaScript 搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11758500/

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