Soacti commited on
Commit
9058b05
·
verified ·
1 Parent(s): 1777223

Create fallback_questions.py

Browse files
Files changed (1) hide show
  1. fallback_questions.py +165 -193
fallback_questions.py CHANGED
@@ -1,199 +1,171 @@
1
- """
2
- Fallback quiz-spørsmål for når AI-modeller ikke er tilgjengelige
3
- Organisert etter tema og språk
4
- """
5
 
6
- FALLBACK_QUESTIONS = {
7
- "no": { # Norske spørsmål
8
- "norsk historie": [
9
- {
10
- "spørsmål": "Hvilket år ble Norge selvstendig fra Danmark?",
11
- "alternativer": ["1814", "1815", "1813", "1816"],
12
- "korrekt_svar": 0,
13
- "forklaring": "Norge ble selvstendig fra Danmark i 1814 etter Napoleonskrigene."
14
- },
15
- {
16
- "spørsmål": "Hvem var Norges første konge etter selvstendigheten i 1814?",
17
- "alternativer": ["Christian Frederik", "Karl Johan", "Oscar I", "Haakon VII"],
18
- "korrekt_svar": 0,
19
- "forklaring": "Christian Frederik ble valgt til konge av den norske riksforsamlingen på Eidsvoll i 1814."
20
- },
21
- {
22
- "spørsmål": "Hvilket år fikk kvinner stemmerett i Norge?",
23
- "alternativer": ["1913", "1915", "1910", "1920"],
24
- "korrekt_svar": 0,
25
- "forklaring": "Kvinner fikk stemmerett i Norge i 1913, som et av de første landene i verden."
26
- }
27
- ],
28
- "oslo": [
29
- {
30
- "spørsmål": "Hva heter Oslo kommunes rådhus?",
31
- "alternativer": ["Oslo rådhus", "Akershus festning", "Stortinget", "Slottet"],
32
- "korrekt_svar": 0,
33
- "forklaring": "Oslo rådhus er kjent for sin karakteristiske arkitektur og er stedet hvor Nobels fredspris deles ut."
34
- },
35
- {
36
- "spørsmål": "Hvilken øy i Oslofjorden er mest kjent for sine museer?",
37
- "alternativer": ["Bygdøy", "Hovedøya", "Gressholmen", "Langøyene"],
38
- "korrekt_svar": 0,
39
- "forklaring": "Bygdøy har flere av Norges viktigste museer, inkludert Vikingskipshuset og Kon-Tiki museet."
40
- },
41
- {
42
- "spørsmål": "Hva heter Oslos hovedgate for shopping?",
43
- "alternativer": ["Karl Johans gate", "Storgata", "Grensen", "Torggata"],
44
- "korrekt_svar": 0,
45
- "forklaring": "Karl Johans gate strekker seg fra Jernbanetorget til Det kongelige slott og er Oslos hovedstrøk."
46
- }
47
- ],
48
- "bergen": [
49
- {
50
- "spørsmål": "Hva kalles det fargerike kaiområdet i Bergen?",
51
- "alternativer": ["Bryggen", "Fisketorget", "Torgallmenningen", "Nordnes"],
52
- "korrekt_svar": 0,
53
- "forklaring": "Bryggen er UNESCOs verdensarvsted og består av fargerike trebygninger fra hansatiden."
54
- },
55
- {
56
- "spørsmål": "Hvilket fjell kan du ta Fløibanen opp til?",
57
- "alternativer": ["Fløyen", "Ulriken", "Løvstakken", "Sandviksfjellet"],
58
- "korrekt_svar": 0,
59
- "forklaring": "Fløibanen er en av Norges mest populære turistattraksjoner og tar deg opp til Fløyen."
60
- },
61
- {
62
- "spørsmål": "Bergen er kjent som 'Porten til' hva?",
63
- "alternativer": ["Fjordene", "Vestlandet", "Hardanger", "Sognefjorden"],
64
- "korrekt_svar": 0,
65
- "forklaring": "Bergen kalles 'Porten til fjordene' fordi den er utgangspunkt for mange fjordturer."
66
- }
67
- ]
68
- },
69
- "en": { # English questions
70
- "norwegian history": [
71
- {
72
- "spørsmål": "When did Norway gain independence from Denmark?",
73
- "alternativer": ["1814", "1815", "1813", "1816"],
74
- "korrekt_svar": 0,
75
- "forklaring": "Norway gained independence from Denmark in 1814 after the Napoleonic Wars."
76
- },
77
- {
78
- "spørsmål": "Who was Norway's first king after independence in 1814?",
79
- "alternativer": ["Christian Frederik", "Karl Johan", "Oscar I", "Haakon VII"],
80
- "korrekt_svar": 0,
81
- "forklaring": "Christian Frederik was elected king by the Norwegian constituent assembly at Eidsvoll in 1814."
82
- }
83
- ],
84
- "oslo": [
85
- {
86
- "spørsmål": "What is the name of Oslo's city hall?",
87
- "alternativer": ["Oslo City Hall", "Akershus Fortress", "Parliament", "Royal Palace"],
88
- "korrekt_svar": 0,
89
- "forklaring": "Oslo City Hall is known for its distinctive architecture and hosts the Nobel Peace Prize ceremony."
90
- },
91
- {
92
- "spørsmål": "Which island in the Oslo fjord is most famous for its museums?",
93
- "alternativer": ["Bygdøy", "Hovedøya", "Gressholmen", "Langøyene"],
94
- "korrekt_svar": 0,
95
- "forklaring": "Bygdøy houses several of Norway's most important museums, including the Viking Ship Museum."
96
- }
97
- ],
98
- "bergen": [
99
- {
100
- "spørsmål": "What is the colorful wharf area in Bergen called?",
101
- "alternativer": ["Bryggen", "Fish Market", "Torgallmenningen", "Nordnes"],
102
- "korrekt_svar": 0,
103
- "forklaring": "Bryggen is a UNESCO World Heritage site consisting of colorful wooden buildings from the Hanseatic period."
104
- }
105
- ]
106
- }
107
- }
108
-
109
- def get_fallback_questions(tema: str, språk: str = "no", antall: int = 5):
110
- """
111
- Hent fallback-spørsmål for et gitt tema og språk
112
-
113
- Args:
114
- tema: Tema for spørsmålene (f.eks. "oslo", "bergen", "norsk historie")
115
- språk: Språkkode ("no" eller "en")
116
- antall: Antall spørsmål å returnere
117
-
118
- Returns:
119
- Liste med quiz-spørsmål
120
- """
121
- # Normaliser tema til lowercase
122
- tema_key = tema.lower().strip()
123
-
124
- # Sjekk om språk finnes
125
- if språk not in FALLBACK_QUESTIONS:
126
- språk = "no" # Default til norsk
127
 
128
- # Sjekk om tema finnes for språket
129
- if tema_key not in FALLBACK_QUESTIONS[språk]:
130
- # Prøv å finne lignende tema
131
- available_topics = list(FALLBACK_QUESTIONS[språk].keys())
132
 
133
- # Enkel matching for vanlige varianter
134
- tema_mapping = {
135
- "oslo": ["oslo", "oslo kommune", "hovedstad"],
136
- "bergen": ["bergen", "bergen kommune"],
137
- "norsk historie": ["norsk historie", "historie", "norway history", "norwegian history"]
138
- }
139
 
140
- for standard_tema, variants in tema_mapping.items():
141
- if any(variant in tema_key for variant in variants):
142
- tema_key = standard_tema
143
- break
144
 
145
- # Hvis fortsatt ikke funnet, bruk første tilgjengelige tema
146
- if tema_key not in FALLBACK_QUESTIONS[språk]:
147
- tema_key = available_topics[0] if available_topics else "oslo"
148
-
149
- # Hent spørsmål
150
- questions = FALLBACK_QUESTIONS[språk].get(tema_key, [])
151
-
152
- # Begrens antall spørsmål
153
- if len(questions) > antall:
154
- questions = questions[:antall]
155
-
156
- return questions
157
-
158
- def get_available_topics(språk: str = "no"):
159
- """
160
- Hent liste over tilgjengelige temaer for et språk
161
-
162
- Args:
163
- språk: Språkkode ("no" eller "en")
164
-
165
- Returns:
166
- Liste med tilgjengelige temaer
167
- """
168
- if språk not in FALLBACK_QUESTIONS:
169
- språk = "no"
170
-
171
- return list(FALLBACK_QUESTIONS[språk].keys())
172
-
173
- def get_topic_info(tema: str, språk: str = "no"):
174
- """
175
- Hent informasjon om et tema
176
-
177
- Args:
178
- tema: Tema å få info om
179
- språk: Språkkode
180
-
181
- Returns:
182
- Dict med tema-informasjon
183
- """
184
- tema_key = tema.lower().strip()
185
-
186
- if språk not in FALLBACK_QUESTIONS:
187
- språk = "no"
188
-
189
- if tema_key not in FALLBACK_QUESTIONS[språk]:
190
- return None
191
-
192
- questions = FALLBACK_QUESTIONS[språk][tema_key]
193
 
194
- return {
195
- "tema": tema_key,
196
- "språk": språk,
197
- "antall_spørsmål": len(questions),
198
- "tilgjengelig": True
199
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import random
2
+ from typing import List, Dict, Any
 
 
3
 
4
+ class FallbackQuestions:
5
+ """Forhåndsdefinerte quiz-spørsmål som fallback"""
6
+
7
+ def __init__(self):
8
+ self.questions_db = {
9
+ "norsk_historie": [
10
+ {
11
+ "spørsmål": "Hvilket år ble Norge selvstendig fra Danmark?",
12
+ "alternativer": ["1814", "1905", "1821", "1830"],
13
+ "korrekt_svar": 0,
14
+ "forklaring": "Norge ble selvstendig fra Danmark i 1814 etter Napoleonskrigene og grunnloven ble vedtatt på Eidsvoll."
15
+ },
16
+ {
17
+ "spørsmål": "Hvem var Norges første konge etter selvstendigheten i 1905?",
18
+ "alternativer": ["Haakon VII", "Olav V", "Harald V", "Christian IV"],
19
+ "korrekt_svar": 0,
20
+ "forklaring": "Haakon VII ble Norges første konge etter unionsoppløsningen med Sverige i 1905."
21
+ },
22
+ {
23
+ "spørsmål": "Hvilket år ble Norge medlem av NATO?",
24
+ "alternativer": ["1945", "1949", "1952", "1955"],
25
+ "korrekt_svar": 1,
26
+ "forklaring": "Norge ble medlem av NATO i 1949, samme år som organisasjonen ble opprettet."
27
+ },
28
+ {
29
+ "spørsmål": "Hvem skrev teksten til Norges nasjonalsang?",
30
+ "alternativer": ["Henrik Ibsen", "Bjørnstjerne Bjørnson", "Knut Hamsun", "Rikard Nordraak"],
31
+ "korrekt_svar": 1,
32
+ "forklaring": "Bjørnstjerne Bjørnson skrev teksten til 'Ja, vi elsker dette landet' i 1859."
33
+ },
34
+ {
35
+ "spørsmål": "Hvilket år ble kvinnelig stemmerett innført i Norge?",
36
+ "alternativer": ["1907", "1913", "1920", "1945"],
37
+ "korrekt_svar": 1,
38
+ "forklaring": "Kvinnelig stemmerett ble innført i Norge i 1913, som et av de første landene i verden."
39
+ }
40
+ ],
41
+ "oslo": [
42
+ {
43
+ "spørsmål": "Hva heter Oslos hovedflyplass?",
44
+ "alternativer": ["Fornebu", "Gardermoen", "Torp", "Rygge"],
45
+ "korrekt_svar": 1,
46
+ "forklaring": "Oslo lufthavn Gardermoen er Oslos og Norges hovedflyplass, åpnet i 1998."
47
+ },
48
+ {
49
+ "spørsmål": "Hvilken fjord ligger Oslo ved?",
50
+ "alternativer": ["Trondheimsfjorden", "Oslofjorden", "Hardangerfjorden", "Sognefjorden"],
51
+ "korrekt_svar": 1,
52
+ "forklaring": "Oslo ligger innerst i Oslofjorden, som strekker seg fra Skagerrak."
53
+ },
54
+ {
55
+ "spørsmål": "Hva heter Oslos berømte operahus?",
56
+ "alternativer": ["Operaen", "Den Norske Opera", "Oslo Opera House", "Operahuset"],
57
+ "korrekt_svar": 3,
58
+ "forklaring": "Operahuset i Oslo åpnet i 2008 og er kjent for sin unike arkitektur hvor man kan gå på taket."
59
+ },
60
+ {
61
+ "spørsmål": "Hva het Oslo før 1925?",
62
+ "alternativer": ["Kristiania", "Christiania", "Kristiansand", "Kristiansund"],
63
+ "korrekt_svar": 0,
64
+ "forklaring": "Oslo het Kristiania fra 1877 til 1925, da navnet ble endret tilbake til Oslo."
65
+ },
66
+ {
67
+ "spørsmål": "Hvilken park inneholder Vigelandsanlegget?",
68
+ "alternativer": ["Vigelandsparken", "Frognerparken", "Slottsparken", "Tøyenparken"],
69
+ "korrekt_svar": 1,
70
+ "forklaring": "Vigelandsanlegget ligger i Frognerparken, som er Oslos største park."
71
+ }
72
+ ],
73
+ "bergen": [
74
+ {
75
+ "spørsmål": "Hva kalles Bergens berømte fiskemarked?",
76
+ "alternativer": ["Fisketorget", "Torget", "Bryggen", "Fiskemarkedet"],
77
+ "korrekt_svar": 0,
78
+ "forklaring": "Fisketorget i Bergen er et populært marked hvor man kan kjøpe fersk fisk og sjømat."
79
+ },
80
+ {
81
+ "spørsmål": "Hvilket fjell kan man ta Fløibanen opp til?",
82
+ "alternativer": ["Ulriken", "Fløyen", "Løvstakken", "Sandviksfjellet"],
83
+ "korrekt_svar": 1,
84
+ "forklaring": "Fløibanen er en kabelbane som går opp til Fløyen, 320 meter over havet."
85
+ },
86
+ {
87
+ "spørsmål": "Hva heter Bergens UNESCO-vernede bydel?",
88
+ "alternativer": ["Nordnes", "Bryggen", "Sandviken", "Møhlenpris"],
89
+ "korrekt_svar": 1,
90
+ "forklaring": "Bryggen i Bergen er UNESCOs verdensarvliste og består av gamle hanseatiske bygninger."
91
+ },
92
+ {
93
+ "spørsmål": "Bergen kalles 'Porten til' hva?",
94
+ "alternativer": ["Fjordene", "Vestlandet", "Hardanger", "Sognefjorden"],
95
+ "korrekt_svar": 0,
96
+ "forklaring": "Bergen kalles 'Porten til fjordene' fordi den er utgangspunkt for mange fjordturer."
97
+ }
98
+ ],
99
+ "general_norway": [
100
+ {
101
+ "spørsmål": "Hvor mange fylker har Norge?",
102
+ "alternativer": ["11", "15", "18", "19"],
103
+ "korrekt_svar": 0,
104
+ "forklaring": "Norge har 11 fylker etter fylkesreformen som trådte i kraft i 2020."
105
+ },
106
+ {
107
+ "spørsmål": "Hva er Norges nasjonaldag?",
108
+ "alternativer": ["16. mai", "17. mai", "1. mai", "7. juni"],
109
+ "korrekt_svar": 1,
110
+ "forklaring": "17. mai er Norges nasjonaldag og feirer grunnloven fra 1814."
111
+ },
112
+ {
113
+ "spørsmål": "Hvilken valuta brukes i Norge?",
114
+ "alternativer": ["Euro", "Norske kroner", "Svenske kroner", "Dollar"],
115
+ "korrekt_svar": 1,
116
+ "forklaring": "Norge bruker norske kroner (NOK) som valuta."
117
+ }
118
+ ]
119
+ }
 
 
 
 
 
120
 
121
+ def get_questions(self, tema: str, språk: str, antall: int, type: str, vanskelighet: int) -> List[Dict[str, Any]]:
122
+ """Hent fallback-spørsmål basert tema"""
 
 
123
 
124
+ # Normaliser tema til nøkkel
125
+ tema_key = self._normalize_tema(tema)
 
 
 
 
126
 
127
+ # Hent spørsmål for tema
128
+ questions = self.questions_db.get(tema_key, self.questions_db["general_norway"])
 
 
129
 
130
+ # Tilpass til ønsket antall
131
+ if len(questions) >= antall:
132
+ selected = random.sample(questions, antall)
133
+ else:
134
+ # Hvis vi ikke har nok spørsmål, fyll opp med generelle
135
+ selected = questions.copy()
136
+ remaining = antall - len(selected)
137
+ general_questions = random.sample(self.questions_db["general_norway"], min(remaining, len(self.questions_db["general_norway"])))
138
+ selected.extend(general_questions)
139
+
140
+ # Tilpass vanskelighetsgrad (enkel implementasjon)
141
+ for question in selected:
142
+ if vanskelighet <= 2:
143
+ # Gjør spørsmål enklere ved å gi hint
144
+ question["forklaring"] = f"💡 Hint: {question['forklaring']}"
145
+ elif vanskelighet >= 4:
146
+ # Gjør spørsmål vanskeligere ved å fjerne hint
147
+ question["forklaring"] = question["forklaring"].replace("💡 Hint: ", "")
148
+
149
+ return selected[:antall]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
150
 
151
+ def _normalize_tema(self, tema: str) -> str:
152
+ """Normaliser tema til database-nøkkel"""
153
+ tema_lower = tema.lower()
154
+
155
+ if any(word in tema_lower for word in ["historie", "norsk historie", "norway history"]):
156
+ return "norsk_historie"
157
+ elif "oslo" in tema_lower:
158
+ return "oslo"
159
+ elif "bergen" in tema_lower:
160
+ return "bergen"
161
+ else:
162
+ return "general_norway"
163
+
164
+ def get_available_topics(self) -> List[str]:
165
+ """Returner liste over tilgjengelige temaer"""
166
+ return [
167
+ "Norsk historie",
168
+ "Oslo",
169
+ "Bergen",
170
+ "Norge generelt"
171
+ ]