-3

一連の 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 個の 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']
]

それらをどのように分類しますか?学習入力はありません。

4

2 に答える 2

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"]}
于 2013-02-04T05:36:05.003 に答える
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 配列を使用してキーをループし、必要に応じて値を抽出します。

于 2013-02-04T05:00:35.463 に答える