about summary refs log tree commit diff stats
path: root/archive/2025/summer/bsc_gerg/tests/test_performance.ipynb
blob: 9079d123c2e0f41feebc85226b50303a11d93243 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
{
 "cells": [
  {
   "cell_type": "code",
   "id": "initial_id",
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2025-07-18T09:06:12.226163Z",
     "start_time": "2025-07-18T09:06:12.218992Z"
    }
   },
   "source": [
    "import time\n",
    "\n",
    "with open(\"./../data/test_performance_input.txt\", \"r\") as f:\n",
    "    test_input = [input_str.strip() for input_str in f.read().split(\"###\")]\n",
    "    test_input = [text for text in test_input if text != \"\"]\n",
    "\n",
    "len(test_input)"
   ],
   "outputs": [
    {
     "data": {
      "text/plain": [
       "21"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "execution_count": 19
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-18T09:09:03.931293Z",
     "start_time": "2025-07-18T09:08:48.597089Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import httpx\n",
    "import json\n",
    "\n",
    "test_results = []\n",
    "\n",
    "def run_test(input: str, index: int = -1):\n",
    "    start = time.time()\n",
    "    result = httpx.post(\"http://localhost:8000/processText\", json={\n",
    "        \"text\": input\n",
    "    }, timeout=None)\n",
    "    end = time.time()\n",
    "    duration = end - start\n",
    "    test_results.append({\"duration\": duration, \"input\": input, \"result\": result.json()})\n",
    "    print(f\"\\033[4mTest result {index}:\\033[0m\")\n",
    "    print(f\"\\033[1mDuration:\\033[0m {duration}s\")\n",
    "    print(f\"\\033[1mInput:\\033[0m \\\"{input}\\\"\")\n",
    "    for term in result.json()[\"terms\"]:\n",
    "        print(f\"- {term['text'] if term['normalization'] == None else term['normalization']}\")\n",
    "        for definition in term[\"definitions\"]:\n",
    "            prefix = \"\"\n",
    "            if definition[\"partial\"]:\n",
    "                prefix += \"⚙️\"\n",
    "            if not definition[\"verified\"]:\n",
    "                prefix += \"✨\"\n",
    "            else:\n",
    "                prefix += \"☑️\"\n",
    "            print(f\"\\t- {prefix} {definition['text']}\")\n",
    "    print()\n",
    "\n",
    "for index, text in enumerate(test_input, start=1):\n",
    "    try:\n",
    "        run_test(text, index=index)\n",
    "    except:\n",
    "        print(f\"Test failed: {text}\")\n",
    "\n",
    "with open(\"./../data/test_performance_cvalue_output.json\", \"w\") as f:\n",
    "    f.write(json.dumps(test_results))"
   ],
   "id": "1824c2246b2c9a91",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\u001B[4mTest result 1:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.7679691314697266s\n",
      "\u001B[1mInput:\u001B[0m \"Hier ist der 12772, gerade angekommen in Gleis 31.\n",
      "Ich habe jetzt abgehängt und Hemmschuhe unter die ersten beiden Wagen gelegt und eine Handbremse ist auch fest.\"\n",
      "- ersten beiden wagen\n",
      "- 31.\n",
      "- hemmschuhe\n",
      "- ersten\n",
      "- wagen\n",
      "- handbremse\n",
      "\n",
      "\u001B[4mTest result 2:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.7423641681671143s\n",
      "\u001B[1mInput:\u001B[0m \"Die Effizienz von Transformatoren kann durch Wirbelstromverluste und magnetische Hysterese beeinträchtigt werden. Was bei der Dimensionierung zu berücksichtigen ist.\"\n",
      "- effizienz von transformatoren\n",
      "- magnetische hysterese\n",
      "- effizienz\n",
      "- transformatoren\n",
      "- wirbelstromverluste\n",
      "- magnetische\n",
      "- hysterese\n",
      "- dimensionierung\n",
      "\n",
      "\u001B[4mTest result 3:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.7041819095611572s\n",
      "\u001B[1mInput:\u001B[0m \"Feuerlöscher sind tragbare Geräte, die damals entwickelt wurden, um kleine Brände in der Anfangsphase zu löschen.\"\n",
      "- tragbare geräte\n",
      "- kleine brände\n",
      "- feuerlöscher\n",
      "- tragbare\n",
      "- geräte\n",
      "- kleine\n",
      "- brände\n",
      "- anfangsphase\n",
      "\n",
      "\u001B[4mTest result 4:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.7359318733215332s\n",
      "\u001B[1mInput:\u001B[0m \"Die Verwendung von Leistungselektronik ermöglicht eine effiziente Umwandlung und Steuerung elektrischer Energie, insbesondere in erneuerbaren Energiesystemen.\"\n",
      "- verwendung von leistungselektronik\n",
      "- steuerung elektrischer energie\n",
      "- effiziente umwandlung\n",
      "- elektrischer energie\n",
      "- erneuerbaren energiesystemen\n",
      "- steuerung elektrischer\n",
      "- verwendung\n",
      "- leistungselektronik\n",
      "- effiziente\n",
      "- umwandlung\n",
      "- steuerung\n",
      "- elektrischer\n",
      "- energie\n",
      "- erneuerbaren\n",
      "- energiesystemen\n",
      "\n",
      "\u001B[4mTest result 5:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6899619102478027s\n",
      "\u001B[1mInput:\u001B[0m \"Die Dimensionierung der Kabelquerschnitte muss auf Grundlage der Strombelastbarkeit und der zulässigen Spannungsabfälle berechnet werden, um Überhitzung zu vermeiden.\"\n",
      "- zulässigen spannungsabfälle\n",
      "- dimensionierung der kabelquerschnitte\n",
      "- grundlage der strombelastbarkeit\n",
      "- dimensionierung\n",
      "- kabelquerschnitte\n",
      "- grundlage\n",
      "- strombelastbarkeit\n",
      "- zulässigen\n",
      "- spannungsabfälle\n",
      "- überhitzung\n",
      "\n",
      "\u001B[4mTest result 6:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.7219328880310059s\n",
      "\u001B[1mInput:\u001B[0m \"Die DB Energie setzt Netzqualitätsanalysegeräte der Firma Janitza ein, um ihre Netze 50 Hertz besser beurteilen zu können, um den Kunden besser zu versorgen beziehungsweise die Strombelastbarkeit an den Anlagen zu berechnen.\"\n",
      "- db energie\n",
      "- netzqualitätsanalysegeräte der firma\n",
      "- db\n",
      "- energie\n",
      "- netzqualitätsanalysegeräte\n",
      "- firma\n",
      "- netze\n",
      "- hertz\n",
      "- kunden\n",
      "- strombelastbarkeit\n",
      "- anlagen\n",
      "\n",
      "\u001B[4mTest result 7:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6928410530090332s\n",
      "\u001B[1mInput:\u001B[0m \"Auch das Arbeiten an elektrischen Anlagen benötigt persönliche Schutzausrüstung wie Sicherheitsschuhe, lichtbogengeschützte Kleidung und eventuell Sicherheitshelm.\"\n",
      "- elektrischen anlagen\n",
      "- persönliche schutzausrüstung\n",
      "- lichtbogengeschützte kleidung\n",
      "- arbeiten an elektrischen\n",
      "- arbeiten\n",
      "- elektrischen\n",
      "- anlagen\n",
      "- persönliche\n",
      "- schutzausrüstung\n",
      "- lichtbogengeschützte\n",
      "- kleidung\n",
      "\n",
      "\u001B[4mTest result 8:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6837880611419678s\n",
      "\u001B[1mInput:\u001B[0m \"Ich buchstabiere meinen Namen. B U R A K. Burak.\"\n",
      "- namen\n",
      "\n",
      "\u001B[4mTest result 9:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 1.547395944595337s\n",
      "\u001B[1mInput:\u001B[0m \"Moderne Brandmeldeanlagen sind oft mit einer automatischen Benachrichtigung an die Feuerwehr verbunden, um schnelle Hilfe im Brandfall zu gewährleisten.\"\n",
      "- hilfe im brandfall\n",
      "- moderne brandmeldeanlagen\n",
      "- automatischen benachrichtigung\n",
      "- schnelle hilfe\n",
      "- moderne\n",
      "- brandmeldeanlagen\n",
      "- automatischen\n",
      "- benachrichtigung\n",
      "- feuerwehr\n",
      "- schnelle\n",
      "- hilfe\n",
      "- brandfall\n",
      "\n",
      "\u001B[4mTest result 10:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6423039436340332s\n",
      "\u001B[1mInput:\u001B[0m \"Die Verwendung von Leistungselektronik ermöglicht eine effiziente Umwandlung und Steuerung elektrischer Energie, insbesondere in erneuerbaren Energiesystemen.\"\n",
      "- verwendung von leistungselektronik\n",
      "- steuerung elektrischer energie\n",
      "- effiziente umwandlung\n",
      "- elektrischer energie\n",
      "- erneuerbaren energiesystemen\n",
      "- steuerung elektrischer\n",
      "- verwendung\n",
      "- leistungselektronik\n",
      "- effiziente\n",
      "- umwandlung\n",
      "- steuerung\n",
      "- elektrischer\n",
      "- energie\n",
      "- erneuerbaren\n",
      "- energiesystemen\n",
      "\n",
      "\u001B[4mTest result 11:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6417520046234131s\n",
      "\u001B[1mInput:\u001B[0m \"Brandmeldeanlagen sind sicherheitstechnische Systeme, die Rauch, Hitze oder Flammen erkennen und im Brandfall sofort Alarm auslösen.\"\n",
      "- sicherheitstechnische systeme\n",
      "- sicherheitstechnische\n",
      "- systeme\n",
      "- rauch\n",
      "- hitze\n",
      "- flammen\n",
      "- brandfall\n",
      "\n",
      "\u001B[4mTest result 12:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6495020389556885s\n",
      "\u001B[1mInput:\u001B[0m \"Der Ortsnetztransformator ist ein zentraler Bestandteil des Niederspannungsnetzes und sorgt dafür, dass elektrische Energien mit der passenden Spannung zum Endverbraucher gelangt.\"\n",
      "- zentraler bestandteil\n",
      "- elektrische energien\n",
      "- passenden spannung\n",
      "- bestandteil des niederspannungsnetzes\n",
      "- ortsnetztransformator\n",
      "- zentraler\n",
      "- bestandteil\n",
      "- niederspannungsnetzes\n",
      "- elektrische\n",
      "- energien\n",
      "- passenden\n",
      "- spannung\n",
      "\n",
      "\u001B[4mTest result 13:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6467278003692627s\n",
      "\u001B[1mInput:\u001B[0m \"Krananweisung.\"\n",
      "- krananweisung\n",
      "\n",
      "\u001B[4mTest result 14:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6659259796142578s\n",
      "\u001B[1mInput:\u001B[0m \"Die galvanische Trennung in Netzteilen ist entscheidend, um eine sichere Isolation zwischen den Primär- und Sekundärkreisen zu gewährleisten und potenzielle Störungen zu minimieren.\"\n",
      "- galvanische trennung\n",
      "- sichere isolation\n",
      "- potenzielle störungen\n",
      "- galvanische\n",
      "- trennung\n",
      "- sichere\n",
      "- isolation\n",
      "- sekundärkreisen\n",
      "- potenzielle\n",
      "- störungen\n",
      "\n",
      "\u001B[4mTest result 15:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6520569324493408s\n",
      "\u001B[1mInput:\u001B[0m \"In explosionsgefährdeten Bereichen müssen elektrische Anlagen als explosionsgeschützt ausgeführt werden, um eine Entzündung durch Funkenbildung zu verhindern.\"\n",
      "- entzündung durch funkenbildung\n",
      "- explosionsgefährdeten bereichen\n",
      "- elektrische anlagen\n",
      "- explosionsgefährdeten\n",
      "- bereichen\n",
      "- elektrische\n",
      "- anlagen\n",
      "- entzündung\n",
      "- funkenbildung\n",
      "\n",
      "\u001B[4mTest result 16:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6554341316223145s\n",
      "\u001B[1mInput:\u001B[0m \"Um Kurzschlüsse zu vermeiden, muss die Sicherung regelmäßig überprüft werden.\"\n",
      "- kurzschlüsse\n",
      "- sicherung\n",
      "\n",
      "\u001B[4mTest result 17:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6606340408325195s\n",
      "\u001B[1mInput:\u001B[0m \"Grüß dich, du ich steh jetzt hinterm Paula 33, das ist auf Halt zurückgefallen, was ist los bei dir?\"\n",
      "- paula\n",
      "\n",
      "\u001B[4mTest result 18:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6834249496459961s\n",
      "\u001B[1mInput:\u001B[0m \"Grüßt euch, hier große Probleme, da hängt der Fahrdraht runter.\"\n",
      "- große probleme\n",
      "- große\n",
      "- probleme\n",
      "- fahrdraht\n",
      "\n",
      "\u001B[4mTest result 19:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.6872987747192383s\n",
      "\u001B[1mInput:\u001B[0m \"Also von mir aus kanns sofort losgehen. Wir können auch vor Plan abfahren.\"\n",
      "- plan\n",
      "\n",
      "\u001B[4mTest result 20:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.7242209911346436s\n",
      "\u001B[1mInput:\u001B[0m \"Guten Morgen Kollege Lorenz. Du kriegst gleich von mir einen Befehl für die Engstelle in Rüdesheim.\"\n",
      "- guten morgen kollege\n",
      "- morgen kollege lorenz\n",
      "- guten morgen\n",
      "- morgen kollege\n",
      "- kollege lorenz\n",
      "- guten\n",
      "- morgen\n",
      "- kollege\n",
      "- lorenz\n",
      "- befehl\n",
      "- engstelle\n",
      "\n",
      "\u001B[4mTest result 21:\u001B[0m\n",
      "\u001B[1mDuration:\u001B[0m 0.7287449836730957s\n",
      "\u001B[1mInput:\u001B[0m \"Guten Morgen, Müller. Eisenbahnbundesamt hier, mein Name ist Müller. Ich äh, möchte mal gerne die Gleise 520 bis 523, äh aus UV Gründen sperren und mir dort die Kesselwagen angucken.\"\n",
      "- guten morgen\n",
      "- guten\n",
      "- morgen\n",
      "- name\n",
      "- gründen\n",
      "- kesselwagen\n",
      "\n"
     ]
    }
   ],
   "execution_count": 23
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "## Evaluate C-Value gold labels",
   "id": "24c4f3199487ba0d"
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-18T09:05:00.467834Z",
     "start_time": "2025-07-18T09:05:00.464474Z"
    }
   },
   "cell_type": "code",
   "source": [
    "with open(\"./../data/test_performance_expected.txt\", \"r\") as f:\n",
    "    expected = f.read().split(\"###\")\n",
    "    expected = [text.strip().split(\"\\t\") for text in expected]\n",
    "\n",
    "\n",
    "for test_result, expected in zip(test_results, expected):\n",
    "    terms = test_result[\"result\"][\"terms\"]\n",
    "    actual = [term[\"text\"] if term[\"normalization\"] is None else term[\"normalization\"] for term in terms]\n"
   ],
   "id": "2dfe10a8f83f64d5",
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6/6\n",
      "8/3\n",
      "8/3\n",
      "15/3\n",
      "10/4\n",
      "11/7\n",
      "11/5\n",
      "1/1\n",
      "12/4\n",
      "15/3\n",
      "7/2\n",
      "12/5\n",
      "1/1\n",
      "10/6\n",
      "9/5\n",
      "2/2\n",
      "1/4\n",
      "4/1\n",
      "1/1\n",
      "11/2\n",
      "6/5\n"
     ]
    }
   ],
   "execution_count": 18
  },
  {
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-18T09:00:16.250680Z",
     "start_time": "2025-07-18T09:00:16.247154Z"
    }
   },
   "cell_type": "code",
   "source": [
    "import json\n",
    "\n",
    "with open(\"./../data/test_performance_output.json\", \"r\") as f:\n",
    "    test_results = json.loads(f.read())\n",
    "\n",
    "with open(\"./../data/test_performance_expected.txt\", \"w\") as f:\n",
    "    f.write(\"\\n\\n###\\n\\n\".join(\"\\t\".join(sample[\"expected\"]) for sample in test_results))"
   ],
   "id": "81cb7b8dbbd1ff29",
   "outputs": [],
   "execution_count": 13
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}