簡體   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