如何从自然语言字符串中获取特定数据?
How to get specific data from a natural language string?
我正在构建一个 Rails 5 应用程序(使用 Nokogiri 抓取器),我正在尝试从字符串中提取数据。
这是我的字符串:
data = "3 rooms and kitchen, 43m²"
如何从该字符串中获取以下数据?
如果结果能以数组结尾就太好了。
3
43
我想我需要以某种方式使用正则表达式,但我不知道如何使用。
您可以使用scan方法:
data.scan(/\d+/)
#=> ["3", "43"]
如果你想要整数:
data.scan(/\d+/).map(&:to_i)
#=> [3, 43]
即使句子结构发生变化,您也可以使用 and
提取值:
room_types = %w(rooms kitchen)
extracted_values = data.split('and').map do |sd|
room_type = room_types.find{ |rt| sd.include?(rt) }
{ room_type => sd.scan(/\d+/).first.to_i }
end.reduce({}, :merge)
p extracted_values
#=> { "rooms" => 3, "kitchen" => 43 }
我正在构建一个 Rails 5 应用程序(使用 Nokogiri 抓取器),我正在尝试从字符串中提取数据。
这是我的字符串:
data = "3 rooms and kitchen, 43m²"
如何从该字符串中获取以下数据? 如果结果能以数组结尾就太好了。
3
43
我想我需要以某种方式使用正则表达式,但我不知道如何使用。
您可以使用scan方法:
data.scan(/\d+/)
#=> ["3", "43"]
如果你想要整数:
data.scan(/\d+/).map(&:to_i)
#=> [3, 43]
即使句子结构发生变化,您也可以使用 and
提取值:
room_types = %w(rooms kitchen)
extracted_values = data.split('and').map do |sd|
room_type = room_types.find{ |rt| sd.include?(rt) }
{ room_type => sd.scan(/\d+/).first.to_i }
end.reduce({}, :merge)
p extracted_values
#=> { "rooms" => 3, "kitchen" => 43 }