2

我正在同时实现短语和关键字搜索(很可能这种搜索有一个名称,但我不知道)。举例来说,我喜欢海龟的搜索应该匹配:

I like turtles
He said I like turtles
I really like turtles
I really like those reptiles called turtles
Turtles is what I like

简而言之,一个字符串必须包含所有要匹配的关键字。

然后是对搜索结果进行排序的问题。

天真地,我假设匹配最接近结果的开头和原始查询,结果越好。我该如何表达这个代码?

我的第一种方法是根据原始查询中关键字与预期位置的接近程度,为每个结果中的每个关键字分配一个分数。在伪代码中:

score(result,query) {
    keywords = query.split(" ");
    score = 0
    for i to keywords.length() {
       score += score(result,query,keywords,i)
    }
    return score
}

score(result,query,keywords,i) {
    index = text.indexOf(keywords[i])
    if (i == 0) return index;

    previousIndex = text.indexOf(keywords[i-1])
    indexInSearch = query.indexOf(keywords[i])
    previousIndexInSearch = query.indexOf(keywords[i-1])

    expectedIndex = previousIndex + (indexInSearch - previousIndexInSearch)

    return abs(index - expectedIndex)
}

分数越低,结果越好。上述示例的分数似乎足够好:

I like turtles = 0
I really like turtles = 7
He said I like turtles = 8
I really like those reptiles called turtles = 38
Turtles is what I like = 39

这是对搜索结果进行排序的可行方法吗?

撇开任何形式的语义分析不谈,我还能考虑什么来改进它?

4

0 回答 0