繁体   English   中英

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

[英]How to identify a new pattern in a URL with a machine learning algorithm (Text mining)

在分析许多URL之后,我试图确定新的模式。 假设我们正在调查假设的网站Yoohle.com,它们的URL具有以下结构。

  • 域= 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 =值,因为它会告诉我是否存在新的合作关系(也许yoohle.com将为stackoverflow提供动力,并推动这种增长等)。

问题是,我如何构建可以比较2(或更多)个月的可靠产品,并确切地告诉我是什么在推动增长。 我想要得到这样的信息:“我们看到了增长,并且受到以下模式的驱动”

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

棘手的部分是,与本示例不同,您对令牌的含义一无所知,因为我不知道令牌代表partner_id。 另一个问题是,如果我们逐个标记地查看标记,这将产生误导,因为lan = en还将与新的合作伙伴联系,并假设用户仍将英语作为语言。

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

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

假设您正在查看实时数据,那么我们正在谈论分析给定月份中大约100K URL。

我会按照以下方式进行。 您可以创建下表:

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()使用数组聚合函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM