2013-02-04 91 views
-2

我有一組URL,例如:如何對URL進行分類?

https://www.facebook.com/profile.php?id=456789 
https://www.facebook.com/messages/78134 
https://www.facebook.com/profile.php?id=123 
https://www.facebook.com/messages/781234 
https://www.facebook.com/45/settings/781234/ab 
https://www.facebook.com/48/settings/989213/ef 

該數據集具有至少100名的網址,以及說5-6類型。我期望的是:

[ 
    ['https://www.facebook.com/profile.php?id=456789', 
    'https://www.facebook.com/profile.php?id=123'], 
    ['https://www.facebook.com/messages/781234', 
    'https://www.facebook.com/messages/78134'], 
    ['https://www.facebook.com/45/settings/781234/ab', 
    'https://www.facebook.com/48/settings/989213/ef'] 
] 

如何對它們進行分類?沒有學習輸入。

+2

這是一個非微不足道的問題。到目前爲止,你有什麼? –

+2

您正按照您想要的任何標準以某種方式對其進行分類。你爲什麼要問我們?你如何認爲我們應該閱讀你的想法並告訴你你的想法? – sawa

+0

我還沒有解決方案,我試圖找出是否可以解決此問題的更好方法。 – Alagu

回答

1

你的問題沒有得到很好的定義,但這似乎根據所需的輸出工作:

require 'uri' 

URL_DIVISIONS = %w[profile messages settings] 
URL_DIVISION_REGEX = Regexp.union(URL_DIVISIONS) 

urls = %w[ 
    https://www.facebook.com/profile.php?id=456789 
    https://www.facebook.com/messages/78134 
    https://www.facebook.com/profile.php?id=123 
    https://www.facebook.com/messages/781234 
    https://www.facebook.com/45/settings/781234/ab 
    https://www.facebook.com/48/settings/989213/ef 
] 

pp urls.group_by{ |url| 
    URI.parse(url).path[URL_DIVISION_REGEX] 
} 

,輸出:

{"profile"=> 
    ["https://www.facebook.com/profile.php?id=456789", 
    "https://www.facebook.com/profile.php?id=123"], 
"messages"=> 
    ["https://www.facebook.com/messages/78134", 
    "https://www.facebook.com/messages/781234"], 
"settings"=> 
    ["https://www.facebook.com/45/settings/781234/ab", 
    "https://www.facebook.com/48/settings/989213/ef"]} 

如果需要列表而不分割信息,用途:

pp urls.group_by{ |url| 
    URI.parse(url).path[URL_DIVISION_REGEX] 
}.values 

,輸出:

[["https://www.facebook.com/profile.php?id=456789", 
    "https://www.facebook.com/profile.php?id=123"], 
["https://www.facebook.com/messages/78134", 
    "https://www.facebook.com/messages/781234"], 
["https://www.facebook.com/45/settings/781234/ab", 
    "https://www.facebook.com/48/settings/989213/ef"]] 

雖然我會保留它作爲哈希,並使用URL_DIVISIONS數組來循環訪問鍵,根據需要提取值。

+0

雖然不錯,但我認爲他正在尋找一個自學習分類器。 – Casper

1

這是一個自學習版本。你不指定學習的確切標準,所以你可能要調整的正則表達式,但也許你可以使用它作爲一個起點:

require 'uri' 

urls = %w[ 
    https://www.facebook.com/profile.php?id=456789 
    https://www.facebook.com/messages/78134 
    https://www.facebook.com/profile.php?id=123 
    https://www.facebook.com/messages/781234 
    https://www.facebook.com/45/settings/781234/ab 
    https://www.facebook.com/48/settings/989213/ef 
] 

pp urls.group_by { |url| 
    (URI.parse(url).path.match(/[a-z]+/) || ["unknown"])[0] 
} 

輸出:

{"messages"=> 
    ["https://www.facebook.com/messages/78134", 
    "https://www.facebook.com/messages/781234"], 
"profile"=> 
    ["https://www.facebook.com/profile.php?id=456789", 
    "https://www.facebook.com/profile.php?id=123"], 
"settings"=> 
    ["https://www.facebook.com/45/settings/781234/ab", 
    "https://www.facebook.com/48/settings/989213/ef"]} 
+0

謝謝 - 這似乎是一個不錯的選擇。基本上,我需要找出如何爲每組創建一個正則表達式。 – Alagu