Se si desidera eseguire questa operazione rapidamente e raccogliendo la quantità minima di raccolta di risorse, è possibile che si ottengano alcune buone euristiche e alcune espressioni regolari.
Poiché si dice che la lista è "un po 'formattata", lavorerò sul presupposto che esiste una direttiva ingrediente per riga.
Vorrei iniziare con una lista di nomi di misure, che sono una classe relativamente chiusa (come la chiamiamo in linguistica), come $measurements=['cup', 'tablespoon', 'teaspoon', 'pinch', 'dash', 'to taste', ...]
. Si potrebbe anche creare un dizionario che associa diversi elementi a un valore normalizzato (quindi $measurements={cup:['cup', 'c'], tablespoon:['tablespoon', 'tbsp', 'tablesp', ...], ...}
o quant'altro.)
Quindi, su ogni riga, è possibile trovare l'unità di misura se si trova nel dizionario. Successivamente, cerca i numeri (che possono essere formattati come decimali - per esempio 1,5 - o come frazioni complesse - ad es. 2 1/2 o 2-1/2) e supponiamo che sia il conteggio delle unità di cui hai bisogno. Se non ci sono numeri, allora puoi semplicemente supporre che l'unità sia una (come forse è il caso di "assaggiare" e simili).
Infine, si può supporre che tutto ciò che rimane sia l'ingrediente reale.
Immagino che questa euristica copra il 75-80% dei casi. Avrai ancora un sacco di casi d'angolo, come quando la ricetta richiede "2 arance", o - peggio! - "Succo di 2 arance". In questi casi, vorresti aggiungerli (durante una sorta di curazione offline) come eccezioni, o lasciarti "OK" se non vengono trattati correttamente.
Definire "* un po '* formattato". –
Pronuncia "1 tazza di latte", "latte, 1 tazza", "pizzico di sale", "2 lattine di latte 250 ml" ... – StackOverflowNewbie
Possibile duplicato di http://stackoverflow.com/questions/4457830/nlp-programmazione -tools-con-php – rid