Closed. This question needs to be more focused。它当前不接受答案。
想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
去年关闭。
Improve this question
我正在构建一个 ruby 配方管理应用程序,作为其中的一部分,我希望能够将配料数量解析为可以比较和缩放的形式。我想知道什么是最好的工具来做到这一点。
我最初计划使用复杂的正则表达式,然后使用其他一些将人类可读的数字(例如
这里还有更多的例子
有什么窍门吗?我注意到用户似乎对构成数量有些困惑。我可以尝试执行更严格的规则,并将
我也不确定应该将数量转换为什么“基本”度量。
这些是我的目标。
为了能够扩展配方。 任意度量单位,例如 找出“主要”成分。 在这个问题的上下文中,这将主要通过弄清楚配方中最大的成分来完成。在生产中,必须根据成分的类型进行某种修饰,因为显然 标准化输入。 为了保持网站上的一致性,我想保持一致的缩写。例如,应该使用
数量也可以表示为两个简单
然后,您将拥有单位本身:
最后,有一种特殊情况下的表达式永远不能与数量或单位组合,因此它们可以有效地将两者组合使用:
我建议您使用这个小型解析器来解决这个问题,您可以根据需要对其进行详细或粗糙的描述。如果这是您选择的工具,那么为所有这些编写正则表达式应该并不难,但正如您所看到的,这不仅仅是文本替换的问题。拉出各部分,并将每种成分表示为三重
剩下的问题是转换或比较数量。单位转换已经在很多地方完成,因此至少对于官方单位而言,获取转换表应该没有问题。例如,如果您输入“将4oz转换为克”,Google就会这样做。请注意,根据国家/地区,汤匙为either three or four tsp。
对于定义明确的单位,您可以很容易地将其标准化为您喜欢的单位,但非正式单位则有些棘手。对于“捏”,“破折号”等,我建议您找出大概的重量,以便可以正确缩放(十个捏= 2克,或其他)。除非您可以查找特定产品的尺寸,否则 jar 之类的东西是没有希望的。
另一方面,主观的量是最简单的:如果您将“品尝”的比例放大十倍,那么它仍然是“品尝”的!
最后一个想法:要识别主要成分,还需要某种成分数据库,因为大小很重要:“一个鸡蛋”可能不是主要成分,但是“一个小山羊,切成小块”可能就足够了。我会考虑将其用于版本2。
想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
去年关闭。
Improve this question
我正在构建一个 ruby 配方管理应用程序,作为其中的一部分,我希望能够将配料数量解析为可以比较和缩放的形式。我想知道什么是最好的工具来做到这一点。
我最初计划使用复杂的正则表达式,然后使用其他一些将人类可读的数字(例如
two
或five
)转换为整数的代码,最后使用将1 cup
和3 teaspoons
转换为某种基本度量的代码。我控制输入,因此我将实际成分分开。但是,我注意到用户输入的抽象度量是to taste
和1 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 can
和leaves
之类的内容推送到组成部分。但是,为了执行该操作,我需要能够传达无效的内容。我也不确定应该将数量转换为什么“基本”度量。
这些是我的目标。
packages
不必缩放,但可以精确缩放,例如cups
或ounces
必须是。 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