如何对 URL 进行分类? [关闭]
Posted
技术标签:
【中文标题】如何对 URL 进行分类? [关闭]【英文标题】:How to classify URLs? [closed] 【发布时间】:2013-01-18 18:35:52 【问题描述】:我有一组网址,例如:
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 个 url,比如 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']
]
我如何对它们进行分类?没有学习投入。
【问题讨论】:
这是一个不平凡的问题。到目前为止你有什么? 您正在根据您心中的任何标准以某种方式对其进行分类。你为什么要这样问我们?您认为我们应该如何解读您的想法并告诉您您的想法? 我还没有解决方案,我正在尝试找出解决此问题的更好方法。 我期待某种学习算法的简单实现。如果问题格式不正确,我们深表歉意。 【参考方案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 数组循环遍历键,并根据需要提取值。
【讨论】:
虽然不错,但我觉得他在找自学分类器。【参考方案2】:这是一个自学版本。您没有指定学习的确切标准,因此您可能想要调整正则表达式,但也许您可以将其作为起点:
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"]
【讨论】:
谢谢 - 这似乎是一个不错的选择。基本上,我需要了解如何为每个集合创建一个正则表达式。以上是关于如何对 URL 进行分类? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章