He'll also run into the problem of restaurants sometimes categorizing entrees as appetizers (is a caeser salad an entree or an appetizer?) so the NLP portion will be especially difficult. What about dish names that are in other languages?
I could go on... Tough problem!
One approach is
https://blog.openai.com/unsupervised-sentiment-neuron/
where you can throw in a great amount of unlabeled data and build an internal representation that models the data well enough that you can train something that works like an HMM or CRF with a tiny amount of labeled data.
If you are willing to do something rule-based, I've used
https://en.wikipedia.org/wiki/Case-based_reasoning
to organize the work in annotating corpuses. Often I can prove that a certain rule set covers X% of the cases, then add a rule to do X+epsilon% until the results are "good enough".
Feel free to click on my profile link and send me a message if you want to chat more.
I would suggest using an ontology, or rolling your own from the English Wikipedia database dump, as a basis for tokenization of the menu text and go from there. What structured content exactly are you trying to extract?
In that case you wouldn't need ML at all but pattern matching combined with named entity recognition probably would do just fine.