Closed. This question needs to be more focused。它当前不接受答案。












想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。

去年关闭。



Improve this question




我正在构建一个 ruby 配方管理应用程序,作为其中的一部分,我希望能够将配料数量解析为可以比较和缩放的形式。我想知道什么是最好的工具来做到这一点。

我最初计划使用复杂的正则表达式,然后使用其他一些将人类可读的数字(例如twofive)转换为整数的代码,最后使用将1 cup3 teaspoons转换为某种基本度量的代码。我控制输入,因此我将实际成分分开。但是,我注意到用户输入的抽象度量是to taste1 package。至少对于抽象度量,我认为我可以忽略它们并进行缩放,并在其前面刮取任何数字。

这里还有更多的例子

1 tall can
1/4 cup
2 Leaves
1 packet
To Taste
One
Two slices
3-4 fillets
Half-bunch
2 to 3 pinches (optional)

有什么窍门吗?我注意到用户似乎对构成数量有些困惑。我可以尝试执行更严格的规则,并将tall canleaves之类的内容推送到组成部分。但是,为了执行该操作,我需要能够传达无效的内容。

我也不确定应该将数量转换为什么“基本”度量。

这些是我的目标。
  • 为了能够扩展配方。 任意度量单位,例如packages不必缩放,但可以精确缩放,例如cupsounces必须是。
  • 找出“主要”成分。 在这个问题的上下文中,这将主要通过弄清楚配方中最大的成分来完成。在生产中,必须根据成分的类型进行某种修饰,因为显然flour几乎从未被视为“主要”成分。但是,chocolate可以少量使用,仍然可以说是chocolate cake
  • 标准化输入。 为了保持网站上的一致性,我想保持一致的缩写。例如,应该使用pounds而不是lbs
  • 最佳答案

    您提出两个问题,识别/提取数量表达式(语法)和弄清楚它们表示什么数量(语义)。

    在弄清楚正则表达式是否足以让识别数量之前,您应该使自己成为外观的良好架构(语法)。您的示例如下所示:

    <amount> <unit> [of <ingredient>]
    
    <amount>可以采用多种形式:
    whole or decimal number, in digits (250, 0.75)
    common fraction (3/4)
    numeral in words (half, one, ten, twenty-five, three quarters)
    determiner instead of a numeral ("an onion")
    subjective (some, a few, several)
    

    数量也可以表示为两个简单<amount>的范围:
    two to three
    2 to 3
    2-3
    five to 10
    

    然后,您将拥有单位本身:
    general-purpose measurements (lb, oz, kg, g; pounds, ounces, etc.)
    cooking units (Tb, tsp)
    informal units (a pinch, a dash)
    container sizes (package, bunch, large can)
    no unit at all, for countable ingredients (as in "three lemons")
    

    最后,有一种特殊情况下的表达式永远不能与数量或单位组合,因此它们可以有效地将两者组合使用:
    a little
    to taste
    

    我建议您使用这个小型解析器来解决这个问题,您可以根据需要对其进行详细或粗糙的描述。如果这是您选择的工具,那么为所有这些编写正则表达式应该并不难,但正如您所看到的,这不仅仅是文本替换的问题。拉出各部分,并将每种成分表示为三重(amount, unit, ingredient)。 (对于可数,使用特殊单位“件”或其他;对于“少量”等,我将它们视为特殊单位)。

    剩下的问题是转换或比较数量。单位转换已经在很多地方完成,因此至少对于官方单位而言,获取转换表应该没有问题。例如,如果您输入“将4oz转换为克”,Google就会这样做。请注意,根据国家/地区,汤匙为either three or four tsp

    对于定义明确的单位,您可以很容易地将其标准化为您喜欢的单位,但非正式单位则有些棘手。对于“捏”,“破折号”等,我建议您找出大概的重量,以便可以正确缩放(十个捏= 2克,或其他)。除非您可以查找特定产品的尺寸,否则 jar 之类的东西是没有希望的。

    另一方面,主观的量是最简单的:如果您将“品尝”的比例放大十倍,那么它仍然是“品尝”的!

    最后一个想法:要识别主要成分,还需要某种成分数据库,因为大小很重要:“一个鸡蛋”可能不是主要成分,但是“一个小山羊,切成小块”可能就足够了。我会考虑将其用于版本2。

    关于regex - 解析配方的自然语言成分数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12413705/

    10-10 02:58