【问题标题】:Simple search keyword suggestion tool or algorithm [duplicate]简单的搜索关键字建议工具或算法[重复]
【发布时间】:2015-06-30 21:33:48
【问题描述】:

我想做的是通过训练机器从历史搜索中学习来给出关键字(如谷歌自动建议)(基本上是让机器记住搜索时通常会出现哪些单词)。

谁能告诉我算法的基本思想(你可以指出我需要研究的方向)以及如何开始(一些可以工作但无效的简单算法)?

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    有很多string matching algorithms。出于您的目的,我会推荐 Levenshtein 算法。它是 Microsoft Word 中用于自动更正的算法。该算法返回一个字符串在到达另一个字符串之前需要处理的突变量。

    示例代码 (source)

    using System;
    
    /// <summary>
    /// Contains approximate string matching
    /// </summary>
    static class LevenshteinDistance
    {
        /// <summary>
        /// Compute the distance between two strings.
        /// </summary>
        public static int Compute(string s, string t)
        {
        int n = s.Length;
        int m = t.Length;
        int[,] d = new int[n + 1, m + 1];
    
        // Step 1
        if (n == 0)
        {
            return m;
        }
    
        if (m == 0)
        {
            return n;
        }
    
        // Step 2
        for (int i = 0; i <= n; d[i, 0] = i++)
        {
        }
    
        for (int j = 0; j <= m; d[0, j] = j++)
        {
        }
    
        // Step 3
        for (int i = 1; i <= n; i++)
        {
            //Step 4
            for (int j = 1; j <= m; j++)
            {
            // Step 5
            int cost = (t[j - 1] == s[i - 1]) ? 0 : 1;
    
            // Step 6
            d[i, j] = Math.Min(
                Math.Min(d[i - 1, j] + 1, d[i, j - 1] + 1),
                d[i - 1, j - 1] + cost);
            }
        }
        // Step 7
        return d[n, m];
        }
    }
    

    【讨论】:

    • 我意识到这是一个巨大而困难的领域,在我决定深入研究之前,您能否大致了解一下 Levenshtein 算法试图做什么?谢谢
    • 基本上我想做的是记住关键字对或组。我不需要对建议的关键字非常精确。我想让机器记住的是哪些关键字通常一起出现在搜索中,就像这样。
    • Levenshtein 算法返回一个字符串必须经过低谷才能成为另一个字符串的更改量。示例 "aunt" -> "ant" 返回 1,因为它需要更改一个字符才能成为 sedond 字符串。您需要将搜索字符串与现有关键字进行比较。
    • @bytecode77 感谢您的解释。好吧,实际上我不是在寻找关键字相似度算法,我在寻找可以对它们进行语义分组的东西,正如我上面所说,我只想找到通常在查询中搜索的搜索关键字对或组,就像搜索关键字时一样A,通常会与关键字B,或者A和B通常一起使用来搜索
    猜你喜欢
    • 2013-03-06
    • 2015-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    相关资源
    最近更新 更多