输入酒店名称时执行建议

Implementing suggestions when a hotel name is typed in

我正在开发酒店预订系统。我的任务是实现一种算法,当输入错误的酒店名称时,它会给出正确的建议。例如,如果用户将酒店名称键入 "MOFENBICK" 而不是真实名称 "MOVENPICK",那么我的算法应该建议 "did you mean MOVENPICK"。我计划使用 Machine Learning Ideas 来实现它。对于这个问题,最好的特征选择是什么?

您无需深入实施神经网络。这对于这个特定任务来说太过分了。

按照建议,使用编辑距离。 Levenshtein 距离背后的想法是它定义了一个字符串度量。简单来说,它允许计算机算法说 "mofenbick" 和 "movenpick" 的距离为 2(因为 2 个字母已更改)。

一些计算 Levennshtein 的伪代码:

function LevenshteinDistance(char s[1..m], char t[1..n]):

    // create two work vectors of integer distances
    declare int v0[n + 1]
    declare int v1[n + 1]

    // initialize v0 (the previous row of distances)
    // this row is A[0][i]: edit distance for an empty s
    // the distance is just the number of characters to delete from t
    for i from 0 to n:
        v0[i] = i

    for i from 0 to m-1:
        // calculate v1 (current row distances) from the previous row v0

        // first element of v1 is A[i+1][0]
        //   edit distance is delete (i+1) chars from s to match empty t
        v1[0] = i + 1

        // use formula to fill in the rest of the row
        for j from 0 to n-1:
            if s[i] = t[j]:
                substitutionCost := 0
            else:
                substitutionCost := 1
            v1[j + 1] := minimum(v1[j] + 1, v0[j + 1] + 1, v0[j] + substitutionCost)

        // copy v1 (current row) to v0 (previous row) for next iteration
        swap v0 with v1

    // after the last swap, the results of v1 are now in v0
    return v0[n]

一旦您通过字符串定义了指标,您当然需要一种快速查询酒店列表的方法。 天真的实现是 1. 遍历 database/set 中的所有酒店名称 2. 计算给定输入与酒店名称之间的编辑距离 3. 选择产生最小编辑距离的名称

虽然这对小集来说效果很好,但您可以使用 BK-Tree 进一步优化它。

阅读material: