Si desea hacer esto rápidamente, y con la recolección de la menor cantidad de recolección de recursos, probablemente pueda encontrar algunas buenas heurísticas y algunas expresiones regulares.
Como dices que la lista está "un tanto formateada", trabajaré en la suposición de que hay una directiva de ingredientes por línea.
Comenzaré por crear una lista de nombres de mediciones, que son una clase relativamente cerrada (como la llamamos en lingüística), como $measurements=['cup', 'tablespoon', 'teaspoon', 'pinch', 'dash', 'to taste', ...]
. Incluso puede encontrar un diccionario que asigne varios elementos a un valor normalizado ($measurements={cup:['cup', 'c'], tablespoon:['tablespoon', 'tbsp', 'tablesp', ...], ...}
o lo que sea)
Luego, en cada línea, puede encontrar la unidad de medida si está en su diccionario. A continuación, busque números (que pueden formatearse como decimales, por ejemplo, 1.5, o como fracciones complejas, por ejemplo, 2 1/2 o 2-1/2), y suponga que es el recuento de las unidades que necesita. Si no hay números, puede suponer que la unidad es uno (como en el caso de "probar" y similares).
Finalmente, puede suponer que todo lo que queda es el ingrediente real.
Imagino que esta heurística cubriría el 75-80% de sus casos. Todavía tendrás muchas cajas de esquina, como cuando la receta requiere "2 naranjas", o ¡peor! - "Jugo de 2 naranjas". En estos casos, podría querer agregarlos (durante algún tipo de curaduría fuera de línea) como excepciones, o permitirse estar "bien" con que no se los trate adecuadamente.
Define "* algo * formateado". –
Diga "1 taza de leche", "leche, 1 taza", "pizca de sal", "2 latas de leche de 250 ml" ... – StackOverflowNewbie
Posible duplicado de http://stackoverflow.com/questions/4457830/nlp-programming -tools-using-php – rid