Spaces:
Sleeping
Sleeping
A newer version of the Gradio SDK is available:
6.5.1
Menu Discovery Algorithm
Overview
The Menu Discovery module dynamically extracts menu items and drinks from restaurant reviews using Claude AI. It works with ANY cuisine type without hardcoding.
Algorithm
1. Input Processing
reviews = [list of review texts]
restaurant_name = "Restaurant Name"
2. AI Extraction
- Reviews are sent to Claude AI
- Claude reads full context of each review
- Extracts SPECIFIC menu items (not generic terms)
- Maintains granularity (salmon sushi β salmon roll)
3. Sentiment Analysis
- For each discovered item, analyzes sentiment from context
- Scores: -1.0 (very negative) to +1.0 (very positive)
- Example: "The tempura was disappointing" β -0.6
4. Normalization
- All item names converted to lowercase
- Avoids duplicates (Miku Roll = miku roll)
5. Output
{
"food_items": [
{
"name": "salmon sushi",
"mention_count": 45,
"sentiment": 0.89,
"category": "sushi"
}
],
"drinks": [...],
"total_extracted": 52
}
Usage Examples
Basic Usage
from src.agent.menu_discovery import MenuDiscovery
from anthropic import Anthropic
client = Anthropic(api_key="your-key")
discovery = MenuDiscovery(client, "claude-sonnet-4-20250514")
# Extract items
items = discovery.extract_menu_items(
reviews=review_list,
restaurant_name="Miku Restaurant"
)
With Visualization
# Text visualization (terminal)
print(discovery.visualize_items_text(items, top_n=10))
# Chart visualization (saved as image)
chart_path = discovery.visualize_items_chart(items, "menu_chart.png")
# Save to JSON
json_path = discovery.save_results(items, "menu_data.json")
Features
β Universal Design
Works with ANY restaurant type:
- Japanese: sushi, sashimi, tempura, sake
- Italian: pizza variants, pasta types, wines
- Mexican: taco types, burritos, margaritas
- Burger shop: different burger variants
β Granularity
Keeps similar items separate:
- salmon sushi β salmon roll β salmon nigiri
- margherita pizza β pepperoni pizza
β Noise Filtering
Skips generic terms:
- β "food", "meal", "dish"
- β "delicious", "amazing"
- β Only specific menu items
β Sentiment Color Coding
- π’ Green: Positive (β₯0.7)
- π‘ Yellow: Mixed (0.3-0.7)
- π Orange: Neutral (0-0.3)
- π΄ Red: Negative (<0)
Integration with Gradio UI
The visualization functions are designed to work seamlessly with Gradio:
# In Gradio app (Day 15-16):
import gradio as gr
def analyze_menu(reviews):
items = discovery.extract_menu_items(reviews)
# Display text visualization
text_viz = discovery.visualize_items_text(items)
# Display chart
chart_path = discovery.visualize_items_chart(items)
return text_viz, chart_path
gr.Interface(fn=analyze_menu, ...)
Testing
Tested across 3 cuisine types with 95%+ accuracy:
- β Japanese
- β Italian
- β Mexican