Я создаю приложение для управления рецептами рубина, и как часть его, я хочу иметь возможность анализировать количество ингредиентов в форме, которую я могу сравнить и масштабировать. Мне интересно, какие лучшие инструменты для этого.
Я изначально планировал сложное регулярное выражение, а затем на какой-то другой код, который преобразует человекочитаемые числа, такие как two
или five
в целые числа, и, наконец, код, который преобразует say 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
в часть ингредиента. Однако, чтобы обеспечить это, я должен иметь возможность сообщить, что недействительно.
Есть ли api или драгоценный камень, который я мог бы использовать? Вольфрам Альфа выглядел многообещающим сначала, но в конечном счете, я не думаю, что это сработает, если я не смогу сказать им, что я только кормлю их количеством рецептов.
Я также не уверен, что такое "базовое" измерение, в которое я должен преобразовывать величины.
РЕДАКТИРОВАТЬ: Просто чтобы устранить любую путаницу, это мои цели.
-
Чтобы иметь возможность масштабировать рецепты. Произвольные единицы измерения, такие как
packages
не нужно масштабировать, но точно такие, какcups
илиounces
должен быть. -
Выясните основные ингредиенты.. В контексте этого вопроса это будет сделано в основном путем выяснения того, какой самый большой ингредиент в рецепте. В производстве должен быть какой-то модификатор, основанный на типе ингредиента, потому что, очевидно,
flour
почти никогда не считается "основным" ингредиентом. Однакоchocolate
можно использовать экономно, и все равно можно сказать achocolate cake
. -
Нормализовать ввод. Чтобы сохранить некоторую согласованность на сайте, я хочу сохранить согласованные аббревиатуры. Например, вместо
pounds
он должен бытьlbs
.
Я также добавил тег NLTK, потому что мне интересно, будет ли это проще в python с NLTK.