【问题标题】:Find trends in search engines query log在搜索引擎查询日志中查找趋势
【发布时间】:2012-06-08 06:36:04
【问题描述】:

我正在尝试对搜索查询日志进行一些研究。我的首要兴趣是发现趋势。 例如:冬天人们经常患唇疱疹。所以我想在冬天我们可以看到这种类型查询的增长。

我想如何检测趋势:

  1. 使用先验算法或其他方法获取频繁项集。
  2. 在一个时间范围内(一小时、一天等)计算每个集合的数量
  3. 使用线性回归找到相对函数变化 如果这是回归 ax + b,那么我们只计算 (a*(first_date)+b)/(a*(second_date)+b)

所以我有一个问题: 很难在大量数据(我有数百万个查询)上找到频繁项集。我已经实现了 apriory 算法,但它的工作速度很慢,支持率很低(例如 200k 查询中的 2 次可能需要一天时间)

就我而言,什么是最好的算法?也许我可以用另一种方式解决我的任务?

【问题讨论】:

  • @Yavar 我只有一台(或两台)机器。所以这就是为什么我不能去分发。

标签: algorithm data-mining


【解决方案1】:

这里有一个方法可以缩小范围,只计算请求时间范围内的字符串,而不是整个集合。
将您的查询存储在排序的可扩展数据结构中 - 我认为skip list 将非常适合这里。
跳过列表中的查询顺序将按时间升序排列。
注意:将新查询添加到跳过列表很容易 - 您总是追加它,因为它总是“更大”然后(发生在所有现有查询之后)。

现在,当您需要搜索时间范围时 - 您不需要遍历所有查询,而只需遍历查询的相关部分,因为可以快速找到时间范围的第一个和最后一个元素在跳过列表中。

为了提高效率,我会使用双映射为每个字符串赋予唯一的 ID,并且只存储 ID。从 ID 创建直方图可能比为原始字符串创建直方图更容易(从计算上讲)。找到最常见的 ID 后 - 您可以从映射中推断出它们引用了哪些字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2011-07-29
    • 1970-01-01
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多