|
|
import json
|
|
|
import random
|
|
|
from typing import List, Dict, Any
|
|
|
|
|
|
class CulturalDatabase:
|
|
|
def __init__(self):
|
|
|
self.cultural_facts = [
|
|
|
{
|
|
|
"country": "Japan",
|
|
|
"fact": "In Japan, it's considered rude to blow your nose in public. People excuse themselves to do it privately.",
|
|
|
"category": "etiquette",
|
|
|
"source": "Japanese Cultural Studies"
|
|
|
},
|
|
|
{
|
|
|
"country": "Japan",
|
|
|
"fact": "Japanese business cards (meishi) are exchanged with both hands and should be received with respect and careful examination.",
|
|
|
"category": "business",
|
|
|
"source": "Japanese Business Etiquette Guide"
|
|
|
},
|
|
|
{
|
|
|
"country": "India",
|
|
|
"fact": "India has 22 official languages and over 1,600 spoken languages, making it one of the most linguistically diverse countries.",
|
|
|
"category": "language",
|
|
|
"source": "Indian Linguistic Survey"
|
|
|
},
|
|
|
{
|
|
|
"country": "India",
|
|
|
"fact": "In Indian culture, touching someone's feet is a sign of respect, especially for elders and teachers.",
|
|
|
"category": "greeting",
|
|
|
"source": "Indian Cultural Traditions"
|
|
|
},
|
|
|
{
|
|
|
"country": "Brazil",
|
|
|
"fact": "Brazilians typically hug and kiss on the cheek when greeting, even in business settings.",
|
|
|
"category": "greeting",
|
|
|
"source": "Brazilian Social Customs"
|
|
|
},
|
|
|
{
|
|
|
"country": "Brazil",
|
|
|
"fact": "In Brazil, the 'OK' hand gesture is considered offensive, similar to giving someone the middle finger.",
|
|
|
"category": "etiquette",
|
|
|
"source": "Brazilian Cultural Guide"
|
|
|
},
|
|
|
{
|
|
|
"country": "Germany",
|
|
|
"fact": "Germans value punctuality so much that being late is considered very disrespectful, even by a few minutes.",
|
|
|
"category": "business",
|
|
|
"source": "German Business Culture"
|
|
|
},
|
|
|
{
|
|
|
"country": "Germany",
|
|
|
"fact": "In Germany, it's customary to maintain eye contact during toasts and say 'Prost' or 'Zum Wohl'.",
|
|
|
"category": "food",
|
|
|
"source": "German Dining Etiquette"
|
|
|
},
|
|
|
{
|
|
|
"country": "China",
|
|
|
"fact": "In Chinese culture, the number 8 is considered extremely lucky because it sounds like the word for 'prosperity'.",
|
|
|
"category": "beliefs",
|
|
|
"source": "Chinese Numerology Studies"
|
|
|
},
|
|
|
{
|
|
|
"country": "China",
|
|
|
"fact": "When receiving a business card in China, accept it with both hands and take a moment to read it carefully.",
|
|
|
"category": "business",
|
|
|
"source": "Chinese Business Etiquette"
|
|
|
},
|
|
|
{
|
|
|
"country": "France",
|
|
|
"fact": "French people typically don't eat meals while walking or standing - dining is seen as a social ritual to be savored.",
|
|
|
"category": "food",
|
|
|
"source": "French Culinary Culture"
|
|
|
},
|
|
|
{
|
|
|
"country": "France",
|
|
|
"fact": "In France, it's polite to greet shopkeepers with 'Bonjour' when entering and 'Au revoir' when leaving.",
|
|
|
"category": "etiquette",
|
|
|
"source": "French Social Customs"
|
|
|
},
|
|
|
{
|
|
|
"country": "South Korea",
|
|
|
"fact": "In Korea, you should use both hands when giving or receiving business cards as a sign of respect.",
|
|
|
"category": "business",
|
|
|
"source": "Korean Business Protocol"
|
|
|
},
|
|
|
{
|
|
|
"country": "South Korea",
|
|
|
"fact": "Korean age calculation includes the time spent in the womb, so Koreans are typically 1-2 years older in 'Korean age'.",
|
|
|
"category": "general",
|
|
|
"source": "Korean Cultural Practices"
|
|
|
},
|
|
|
{
|
|
|
"country": "Mexico",
|
|
|
"fact": "Mexican families often have multiple generations living together, and family loyalty is highly valued.",
|
|
|
"category": "family",
|
|
|
"source": "Mexican Family Structures"
|
|
|
},
|
|
|
{
|
|
|
"country": "Mexico",
|
|
|
"fact": "In Mexico, personal space is smaller than in many Western cultures, and people stand closer during conversations.",
|
|
|
"category": "etiquette",
|
|
|
"source": "Mexican Social Norms"
|
|
|
},
|
|
|
{
|
|
|
"country": "Egypt",
|
|
|
"fact": "In Egypt, showing the sole of your foot to someone is considered offensive, so keep feet flat on the ground when sitting.",
|
|
|
"category": "etiquette",
|
|
|
"source": "Egyptian Cultural Guidelines"
|
|
|
},
|
|
|
{
|
|
|
"country": "Egypt",
|
|
|
"fact": "Egyptian hospitality is legendary - guests are often offered tea or coffee multiple times as a sign of welcome.",
|
|
|
"category": "food",
|
|
|
"source": "Egyptian Hospitality Traditions"
|
|
|
},
|
|
|
{
|
|
|
"country": "Russia",
|
|
|
"fact": "Russians believe that smiling without reason is insincere, so don't be surprised by serious expressions in public.",
|
|
|
"category": "expression",
|
|
|
"source": "Russian Social Behavior"
|
|
|
},
|
|
|
{
|
|
|
"country": "Russia",
|
|
|
"fact": "In Russia, it's traditional to remove shoes when entering someone's home, and slippers are often provided for guests.",
|
|
|
"category": "etiquette",
|
|
|
"source": "Russian Home Customs"
|
|
|
},
|
|
|
{
|
|
|
"country": "Thailand",
|
|
|
"fact": "In Thailand, the head is considered sacred, so never touch someone's head, even children.",
|
|
|
"category": "etiquette",
|
|
|
"source": "Thai Cultural Sensitivities"
|
|
|
},
|
|
|
{
|
|
|
"country": "Thailand",
|
|
|
"fact": "Thai people use the 'wai' greeting - pressing palms together and bowing slightly - as a sign of respect.",
|
|
|
"category": "greeting",
|
|
|
"source": "Thai Greeting Customs"
|
|
|
},
|
|
|
{
|
|
|
"country": "Italy",
|
|
|
"fact": "In Italy, cappuccino is traditionally only drunk in the morning, never after meals.",
|
|
|
"category": "food",
|
|
|
"source": "Italian Coffee Culture"
|
|
|
},
|
|
|
{
|
|
|
"country": "Italy",
|
|
|
"fact": "Italians often speak with their hands, and gestures are an integral part of communication.",
|
|
|
"category": "language",
|
|
|
"source": "Italian Communication Styles"
|
|
|
}
|
|
|
]
|
|
|
|
|
|
def search_facts(self, query: str) -> List[Dict[str, Any]]:
|
|
|
"""
|
|
|
Search for relevant cultural facts based on query
|
|
|
"""
|
|
|
query_lower = query.lower()
|
|
|
relevant_facts = []
|
|
|
|
|
|
|
|
|
for fact in self.cultural_facts:
|
|
|
if fact['country'].lower() in query_lower:
|
|
|
relevant_facts.append(fact)
|
|
|
|
|
|
|
|
|
if not relevant_facts:
|
|
|
for fact in self.cultural_facts:
|
|
|
if fact['category'].lower() in query_lower:
|
|
|
relevant_facts.append(fact)
|
|
|
|
|
|
|
|
|
if not relevant_facts:
|
|
|
keywords = query_lower.split()
|
|
|
for fact in self.cultural_facts:
|
|
|
fact_text = fact['fact'].lower()
|
|
|
if any(keyword in fact_text for keyword in keywords):
|
|
|
relevant_facts.append(fact)
|
|
|
|
|
|
return relevant_facts[:5]
|
|
|
|
|
|
def get_random_fact(self) -> Dict[str, Any]:
|
|
|
"""
|
|
|
Get a random cultural fact
|
|
|
"""
|
|
|
return random.choice(self.cultural_facts)
|
|
|
|
|
|
def get_facts_by_country(self, country: str) -> List[Dict[str, Any]]:
|
|
|
"""
|
|
|
Get all facts for a specific country
|
|
|
"""
|
|
|
return [fact for fact in self.cultural_facts if fact['country'].lower() == country.lower()]
|
|
|
|
|
|
def get_facts_by_category(self, category: str) -> List[Dict[str, Any]]:
|
|
|
"""
|
|
|
Get all facts for a specific category
|
|
|
"""
|
|
|
return [fact for fact in self.cultural_facts if fact['category'].lower() == category.lower()]
|
|
|
|
|
|
def get_all_countries(self) -> List[str]:
|
|
|
"""
|
|
|
Get list of all countries in the database
|
|
|
"""
|
|
|
return list(set(fact['country'] for fact in self.cultural_facts))
|
|
|
|
|
|
def get_all_categories(self) -> List[str]:
|
|
|
"""
|
|
|
Get list of all categories in the database
|
|
|
"""
|
|
|
return list(set(fact['category'] for fact in self.cultural_facts)) |