2

フレーズ検索とキーワード検索を一緒に実装しています (おそらくこの種の検索には名前がありますが、わかりません)。たとえば、 I like turtlesという検索は次のように一致する必要があります。

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