首页 文章

如何使用机器学习算法识别URL中的新模式(文本挖掘)

提问于
浏览
1

我在分析一些URL后尝试识别新模式 . 所以,假设我正在调查假设网站Yoohle.com,他们的网址具有以下结构 .

  • domain = yoohle.com

  • q =搜索短语

  • lan =使用的语言

  • pr = partner_id

  • br = browser_id

所以示例网址将如下所示

www.yoohle.com/test_folder/test_page?q=hello+world&lan=en&pr=stackoverflow&br=chrome

如果我正在调查这个网站的网站流量并且看到月份异常增加,我想知道是什么导致了这一点 . 在这个例子中,我可以解析URL并查看pr =值,因为它会告诉我是否有新的伙伴关系(也许stackoverflow将由yoohle.com提供支持并推动增加等)

问题是,我如何 Build 一个可以比较2个月(或更多个月)的强大功能,并告诉我究竟是什么推动了增长 . 我希望得到类似的结论,“我们看到了增长,它是由以下模式驱动的”

www.yoohle.com/test_folder/test_page%pr=stackoverflow%

棘手的部分是,你不知道令牌的意思,不像这个例子,因为我不知道什么令牌代表partner_id . 另一个问题是,如果我们通过令牌查看令牌,这将会产生误导,因为如果用户仍然会使用英语作为语言,则lan = en也将与新的合作伙伴一起使用 .

我的想法是通过查看所有组合来分析令牌,但这是非常昂贵的(4!在这个例子中,可能10!对于其他网站) . 同样分析令牌本身并不能解决问题,因为我仍然需要分析令牌的值 .

我尝试了k-means聚类,apriori算法对URL /文本挖掘进行了一些研究但是无法得到我想要的东西 . 关于如何构建算法的任何想法都将是有益的 .

想象一下,您正在查看实时数据,因此我们讨论的是在给定月份内分析大约100K的URL .

1 回答

  • 0

    我会采取以下方式 . 您可以创建下表:

    URL
    time
    time_month -- time rounded to month, for demonstration purpose
    q_bol   -- boolean flag whether question parameter was used
    q       -- question parameter value
    lan     -- language parameter value
    lan_bol -- boolean flag whether language parameter was used
    pr      -- partner parameter value
    pr_bol  -- boolean flag whether partner parameter was used
    br      -- browser parameter value
    br_bol  -- boolean flag whether browse parameter was used
    

    现在,您可以编写一些查询 .

    with t as (
    select 
      time_month,
      q_bol, lan_bol, pr_bol, br_bol, count(*)
    from
      urldata
    where
      time_month > '2013-02-01'::date and time_month < '2013-04-01'::date -- last two months data
    group by 
      time_month
    )
    
    , u as (
    select
    *,
    t2-coalesce(t1,0) as abs_change, -- change in pattern MoM,
    case when t1 is null then 0 else t2/t1 end as relchange  -- relative change
    from
    t t1 full outer join t t2 using (q_bol, lan_bol, pr_bol, br_bol)
    ) 
    
    select * from u where abs_change > 5000 or relchange > 3
    

    上面的查询为您提供了参数模式,其中月份变化超过5000个月或月度变化超过300% . 如果你可以在你的sql系统中使用 group by rollup 它也会提供更高级别的聚合(三个参数的组合,两个参数,一个参数) .

    您可以使用参数值执行相同的操作 . 因为您不知道值将包含哪些令牌,您可以在以下表结构中解析URL:

    -- urls
    id_url
    url
    time
    
    -- parameters
    id_url
    token
    value
    

    然后,您需要以某种方式重写上面的查询,例如你可以在PostgreSQL array_agg() 中使用数组聚合函数 .

相关问题