Ruby 如何将数字的英文字符串转换为浮点数(例如“二十六”=>;26.0)

Ruby 如何将数字的英文字符串转换为浮点数(例如“二十六”=>;26.0),ruby,algorithm,nlp,Ruby,Algorithm,Nlp,我正在构建一个聊天机器人,我希望能够解析表示人类年龄的数字量的字符串。当我问“你多大了?”时,用户应该能够输入“26”或“二十六”,并让机器人将其理解为26.0。该方法应处理将分数转换为小数的问题 示例: parse("six") # => 6.0 parse("twenty-five") # => 25.0 parse("three and a half") # => 3.5 在Ruby中是否已经有一个gem可以处理这个问题,或者编写一个

我正在构建一个聊天机器人,我希望能够解析表示人类年龄的数字量的字符串。当我问
“你多大了?”
时,用户应该能够输入
“26”
“二十六”
,并让机器人将其理解为
26.0
。该方法应处理将分数转换为小数的问题

示例:

parse("six")              # => 6.0
parse("twenty-five")      # => 25.0
parse("three and a half") # => 3.5

在Ruby中是否已经有一个gem可以处理这个问题,或者编写一个简单的
parse
方法是否足够简单?

这是一个只在输入字符串中查找数字词并将它们相加的解决方案。这适用于年龄<100岁的儿童

def parse(string)
  dict = {
    half: 0.5, one: 1, two: 2, three: 3, four: 4,
    five: 5, six: 6, seven: 7, eight: 8, nine: 9,
    ten: 10, eleven: 11, twelve: 12, thirteen: 13,
    fourteen: 14, fifteen: 15, sixteen: 16,
    seventeen: 17, eighteen: 18, nineteen: 19,
    twenty: 20, thirty: 30, forty: 40, fifty: 50,
    sixty: 60, seventy: 70, eighty: 80, ninety: 90
  }

  age = 0.0

  dict.each do |s, n|
    # Scans string for each number name, adding numeric value if found
    age += n if string[/\b#{s}\b/]
  end

  return age
end

parse "six"              # => 6.0
parse "twenty-five"      # => 25.0
parse "three and a half" # => 3.5
parse "four and twenty"  # => 24.0

这是一个只在输入字符串中查找数字词并将它们相加的解决方案。这适用于年龄<100岁的儿童

def parse(string)
  dict = {
    half: 0.5, one: 1, two: 2, three: 3, four: 4,
    five: 5, six: 6, seven: 7, eight: 8, nine: 9,
    ten: 10, eleven: 11, twelve: 12, thirteen: 13,
    fourteen: 14, fifteen: 15, sixteen: 16,
    seventeen: 17, eighteen: 18, nineteen: 19,
    twenty: 20, thirty: 30, forty: 40, fifty: 50,
    sixty: 60, seventy: 70, eighty: 80, ninety: 90
  }

  age = 0.0

  dict.each do |s, n|
    # Scans string for each number name, adding numeric value if found
    age += n if string[/\b#{s}\b/]
  end

  return age
end

parse "six"              # => 6.0
parse "twenty-five"      # => 25.0
parse "three and a half" # => 3.5
parse "four and twenty"  # => 24.0

用例是什么?我正在构建一个聊天机器人,我希望能够解析出数字响应。例如,我问
“你多大了?”
,用户可能会说
“26”
“二十六”
,我让机器人理解为
26.0
,或者只使用拆分字典“一”->1;“两个”->2。。。。。当一个数字大于100时,只需加上两个零;例如:“一百”将返回1(因为字典匹配),而+“00”是因为我们将“一百”替换为两个零。。。哪个将返回100什么是用例?我正在构建一个聊天机器人,我希望能够解析出数字响应。例如,我问
“你多大了?”
,用户可能会说
“26”
“二十六”
,我让机器人理解为
26.0
,或者只使用拆分字典“一”->1;“两个”->2。。。。。当一个数字大于100时,只需加上两个零;例如:“一百”将返回1(因为字典匹配),而+“00”是因为我们将“一百”替换为两个零。。。这将返回100个伟大的答案!完全超过我的,我要删除它+1.我认为您可以通过一些评论来改进您的答案,说明它是如何一步一步地工作的。肯定会对我的学习有所帮助。使用
inject
而不是
each
,因为这样没有任何副作用。回答得好!完全超过我的,我要删除它+1.我认为您可以通过一些评论来改进您的答案,说明它是如何一步一步地工作的。肯定会对我的学习有所帮助。使用
inject
而不是
each
,因为这样不会有任何副作用。