diff options
Diffstat (limited to 'archive/2025/summer/bsc_gerg/tests/test_performance.ipynb')
| -rw-r--r-- | archive/2025/summer/bsc_gerg/tests/test_performance.ipynb | 439 |
1 files changed, 439 insertions, 0 deletions
diff --git a/archive/2025/summer/bsc_gerg/tests/test_performance.ipynb b/archive/2025/summer/bsc_gerg/tests/test_performance.ipynb new file mode 100644 index 000000000..9079d123c --- /dev/null +++ b/archive/2025/summer/bsc_gerg/tests/test_performance.ipynb @@ -0,0 +1,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 +} |