Josephina commited on
Commit
a4998d2
·
0 Parent(s):

last try work around

Browse files
Files changed (10) hide show
  1. .gitattributes +35 -0
  2. .gitignore +1 -0
  3. README.md +13 -0
  4. app.py +465 -0
  5. data/test.json +57 -0
  6. data/test.txt +68 -0
  7. poetry.lock +0 -0
  8. pyproject.toml +20 -0
  9. requirements.txt +6 -0
  10. setup.sh +3 -0
.gitattributes ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ /tmp
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: Family Compatibility
3
+ emoji: 📊
4
+ colorFrom: blue
5
+ colorTo: yellow
6
+ sdk: streamlit
7
+ sdk_version: 1.39.0
8
+ app_file: app.py
9
+ pinned: false
10
+ short_description: Playground and Overview for the family compatibility model
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,465 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+ import streamlit as st
4
+ from dotenv import load_dotenv, find_dotenv
5
+ from huggingface_hub import snapshot_download # type: ignore
6
+ import spacy
7
+ from spacy_streamlit import visualize_spans
8
+ import plotly.graph_objects as go
9
+ import json
10
+ from io import StringIO
11
+
12
+ load_dotenv(find_dotenv())
13
+ ANFORDERUNGEN = [
14
+ "Präsenzpflicht",
15
+ "Räumliche Flexibilität",
16
+ "Zeitliche Flexibilität",
17
+ "Schichtdienst",
18
+ "Flexibiltät (SK) = Flexibilität (Soft Skill)",
19
+ ]
20
+ ANGEBOTE = [
21
+ "Planbarkeit und Verlässlichkeit",
22
+ "Flexible und gestaltbare Dienstpläne und Schichtmodelle",
23
+ "flexible und gestaltbare Arbeitszeiten",
24
+ "Wahl des Arbeitszeitumfangs",
25
+ "Job-Sharing",
26
+ "Vereinbarkeit",
27
+ "Unterstützung bei der Kinderbetreuung",
28
+ "wohnortnahe Einsätze",
29
+ "Finanzielle Unterstützung",
30
+ "Familiäre und anlassbezogene Freistellung",
31
+ "Unterstützung bei der Pflegeverantwortung",
32
+ ]
33
+
34
+ ALL_CONCEPTS = (
35
+ ANFORDERUNGEN
36
+ + ANGEBOTE
37
+ + [
38
+ "Anforderungen an Bewerber:innen",
39
+ "Anforderungen an Arbeitsort",
40
+ "Zeitliche",
41
+ "Flexibilität",
42
+ "Angebote an Bewerber:innen",
43
+ "Zeitsouveränität",
44
+ "Familienfreundliche Konzepte",
45
+ ]
46
+ )
47
+ PARENTS = [
48
+ "Anforderungen an Arbeitsort",
49
+ "Anforderungen an Arbeitsort",
50
+ "Zeitliche",
51
+ "Zeitliche",
52
+ "Flexibilität",
53
+ "Zeitsouveränität",
54
+ "Zeitsouveränität",
55
+ "Zeitsouveränität",
56
+ "Zeitsouveränität",
57
+ "Zeitsouveränität",
58
+ "Familienfreundliche Konzepte",
59
+ "Familienfreundliche Konzepte",
60
+ "Familienfreundliche Konzepte",
61
+ "Familienfreundliche Konzepte",
62
+ "Familienfreundliche Konzepte",
63
+ "Familienfreundliche Konzepte",
64
+ "",
65
+ "Anforderungen an Bewerber:innen",
66
+ "Anforderungen an Bewerber:innen",
67
+ "Anforderungen an Bewerber:innen",
68
+ "",
69
+ "Angebote an Bewerber:innen",
70
+ "Angebote an Bewerber:innen",
71
+ ]
72
+ fig = go.Figure(
73
+ go.Treemap(
74
+ labels=ALL_CONCEPTS,
75
+ parents=PARENTS,
76
+ textinfo="label",
77
+ )
78
+ )
79
+ # ig.update_traces(root_color="lightblue")
80
+ fig.update_layout(margin=dict(t=50, l=25, r=25, b=25))
81
+ fig.update_layout(height=600, width=1400, template="plotly")
82
+
83
+ model_name = "de_core_news_sm"
84
+ if not spacy.util.is_package(model_name):
85
+ # Download the model if not present
86
+ os.system(f"python -m spacy download {model_name}")
87
+
88
+ path = snapshot_download(
89
+ cache_dir="tmp/",
90
+ repo_id="and-effect/family-compatibility-extractor-copy",
91
+ revision="main",
92
+ token=os.getenv("HF_TOKEN"),
93
+ )
94
+
95
+ sys.path.append(path)
96
+ from pipeline import PipelineWrapper # noqa: E402
97
+
98
+
99
+ @st.cache_resource
100
+ def load_pipeline(repo_path: str) -> PipelineWrapper:
101
+ """Load the pipeline"""
102
+ return PipelineWrapper(path=repo_path)
103
+
104
+
105
+ @st.cache_data
106
+ def load_app_init() -> None:
107
+ """Load the app initialisation"""
108
+ st.title("Family Compatibility Extractor")
109
+ st.markdown(
110
+ """
111
+ <style>
112
+ .font {
113
+ font-size:20px !important;
114
+ }
115
+ </style>
116
+ """,
117
+ unsafe_allow_html=True,
118
+ )
119
+
120
+ st.markdown(
121
+ """
122
+ <style>
123
+ .prediction {
124
+ font-size:10px !important;
125
+ }
126
+ </style>
127
+ """,
128
+ unsafe_allow_html=True,
129
+ )
130
+ st.markdown(
131
+ """ <p class="font">Der Family Compatibility Extractor ist ein
132
+ Sprachmodell, das aus den Texten von Jobanzeigen Anforderungen und
133
+ Angebote an bzw. für Bewerbende extrahiert, die im Zusammenhang mit
134
+ Familienkompatibilität stehen.
135
+ Die Grafik unten zeigt die Taxonomie der extrahierten Konzepte.""",
136
+ unsafe_allow_html=True,
137
+ )
138
+
139
+ # taxonomy table einfügen
140
+ st.plotly_chart(fig)
141
+
142
+ st.header("Untersuche das Family Compatibility Modell")
143
+ st.markdown(
144
+ """ <p class="font">Lade den Text einer Jobanzeige hoch oder gebe ihn
145
+ in das Eingabefeld ein und drücke den jeweiligen Extrahieren-
146
+ Button, um die vorhergesagten Familienkompatibilitätskonzepte und die
147
+ dazugehörigen Erklärungen zu sehen.
148
+ Klicke auf den Beispieltext rechts um das Eingabefeld damit zu füllen
149
+ und das Modell zu testen.</p>""",
150
+ unsafe_allow_html=True,
151
+ )
152
+
153
+
154
+ st.set_page_config(layout="wide")
155
+ load_app_init()
156
+ pipeline = load_pipeline(repo_path=path)
157
+ # we need to keep button status in session state
158
+ if "clicked" not in st.session_state:
159
+ st.session_state.clicked = {1: False, 2: False, 3: False}
160
+
161
+
162
+ def clicked(button: int) -> None:
163
+ """updates session state variable when an example
164
+ job title button is clicked
165
+ Parameters
166
+ ----------
167
+ button : int
168
+ The number of the button that was clicked
169
+ """
170
+ st.session_state.clicked[button] = True
171
+ st.session_state.clicked[(button + 1) % 3] = False
172
+ st.session_state.clicked[(button + 2) % 3] = False
173
+
174
+
175
+ def reset_buttons() -> None:
176
+ """resets the session state variable for the example
177
+ job title buttons when the user types in a job title
178
+ """
179
+ st.session_state.clicked = {1: False, 2: False, 3: False}
180
+
181
+
182
+ st.markdown(
183
+ """
184
+ <style>
185
+ /* Style columns */
186
+ [data-testid="column"] {
187
+ border-radius: 15px;
188
+ background-color: white;
189
+ box-shadow: 0 0 10px #eee;
190
+ border: 1px solid #ddd;
191
+ padding: 1rem;;
192
+ }
193
+ /* Style containers */
194
+ [data-testid="stVerticalBlock"] >
195
+ [style*="flex-direction: column;"] > [data-testid="stVerticalBlock"] {
196
+ border-radius: 15px;
197
+ background-color: white;
198
+ box-shadow: 0 0 10px #eee;
199
+ border: 1px solid #ddd;
200
+ padding: 1rem;;
201
+ }
202
+ </style>
203
+ """,
204
+ unsafe_allow_html=True,
205
+ )
206
+
207
+
208
+ st.markdown(
209
+ """
210
+ <style>
211
+ .example {
212
+ font-size:24px !important;
213
+ }
214
+ </style>
215
+ """,
216
+ unsafe_allow_html=True,
217
+ )
218
+
219
+ left_column, middle_column, right_column = st.columns(3)
220
+ with right_column:
221
+ st.markdown(
222
+ '<p class="example">Beispiel</p>',
223
+ unsafe_allow_html=True,
224
+ )
225
+ st.markdown(
226
+ """ <p class="font">Klicke auf die Beispielausschreibung, um die
227
+ extrahierten Konzepte anzuzeigen.</p>""",
228
+ unsafe_allow_html=True,
229
+ )
230
+ st.button(
231
+ """\n## Stellendetails zu: Mitarbeiter in der Produktion (m/w/d)\n\n### Mitarbeiter
232
+ in der Produktion (m/w/d)\n\nHelfer/in - Elektro \nVer\u00f6ffentlicht:
233
+ XX.XX.2023\n\n#### Mitarbeiter in der Produktion (m/w/d)\n\nXXXX
234
+ GmbH\n\n#### Typ:\n\nArbeit\n\n#### Arbeitszeit:\n\nVollzeit\n\n####
235
+ Eintrittsdatum:\n\nab sofort\n\n#### Arbeitsort:\n\XXXX\n\n###
236
+ Stellenbeschreibung\n\nOrt: XXX Arbeitszeitmodell: Vollzeit
237
+ Vertragsart: Arbeitnehmer\u00fcberlassung mit \u00dcbernahmeoption
238
+ Branche: Elektro Startzeitpunkt: ab sofort Die XXXX GmbH ist Ihr
239
+ Dienstleister im Gro\u00dfraum XXXX f\u00fcr eine faire, professionelle
240
+ Umsetzung Ihrer neuen beruflichen Herausforderungen. Gestalten auch Sie
241
+ Ihre berufliche Zukunft mit uns! Zum n\u00e4chstm\u00f6glichen Zeitpunkt
242
+ suchen wir die ideale Besetzung f\u00fcr die Position: Mitarbeiter in der
243
+ Produktion (m/w/d) Langfristige Besch\u00e4ftigungsoption Ihre Vorteile:
244
+ *All-in-One: Umfassende Beratung und unkomplizierter Bewerbungsprozess mit
245
+ XXXX * Bezahlung: Attraktives Gehalt mit Zusatzleistungen (z.B.
246
+ Weihnachtsgeld) *Sicherheit: Vermittlung in einen zukunftssicheren
247
+ Arbeitsplatz* Work-Life-Balance: Geregelte Arbeitszeiten *Onboarding:
248
+ Umfangreiche und gr\u00fcndliche Einarbeitung* Abwechslung: Vielseitige
249
+ und spannende Aufgaben *Arbeitsumgebung: Flache Hierarchien, modernes
250
+ Arbeitsumfeld und ein aufgeschlossenes Team* Was wir von BS \nimmer bieten
251
+ k\u00f6nnen: Pers\u00f6nlicher Ansprechpartner, gro\u00dfes
252
+ Unternehmensnetzwerk, kostenlose Arbeitskleidung sowie eine zeitnahe
253
+ R\u00fcckmeldung zum Bewerbungsstatus Ihre Aufgaben: *Montage von
254
+ Elektronik-Komponenten* Konfektionierung einzelner Komponenten
255
+ *Verpackungst\u00e4tigkeiten Ihr Profil:* Berufserfahrung: Idealerweise
256
+ erste Berufserfahrung in einer vergleichbaren Position *Hard Skills:
257
+ Fingerfertigkeit und technisches Grundverst\u00e4ndnis* Soft Skills:
258
+ Teambewusstsein und eine gute Kommunikationsf\u00e4higkeit * Arbeitsweise:
259
+ Sorgf\u00e4ltig und strukturiert\n\n### Anforderungen an den Bewerber\n\n
260
+ #### Berufserfahrung:\n\nMit Berufserfahrung\n\n#### F\u00e4higkeiten:\n\n*
261
+ ##### Transport, Verkehr \nGrundkenntnisse \nLagerarbeit, Transport\n*
262
+ ##### Produktion, Verarbeitung, Technik \nGrundkenntnisse
263
+ \nBest\u00fccken, Maschinenf\u00fchrung, Anlagenf\u00fchrung,
264
+ -bedienung, Montage (Elektrotechnik)\n\n#### Pers\u00f6nliche
265
+ St\u00e4rken:\n\n* Selbst\u00e4ndiges Arbeiten\n* Sorgfalt/Genauigkeit\n*
266
+ Motivation/ Leistungsbereitschaft\n* Zuverl\u00e4ssigkeit\n*
267
+ Lernbereitschaft\n\n#### Sprachen:\n\n* Grundkenntnisse \nDeutsch\n\n
268
+ #### Fahrzeug erforderlich:\n\nNein\n\n#### Reise-/Montagebereitschaft:
269
+ \n\nNicht erforderlich\n\n### Arbeitsorte\n\n* XXXX \n\n###
270
+ Arbeitgeber\n\nXXX GmbH\n\n#### Firmenadresse:\n\n
271
+ XXXX\n\n#### Branchengruppe:\n\n
272
+ Arbeitnehmer\u00fcberlassung, Zeitarbeit\n\n#### Branche:\n\nBefristete
273
+ \u00dcberlassung von Arbeitskr\u00e4ften\n\n### Weitere Informationen
274
+ \n\nDas Stellenangebot wird durch den Arbeitgeber selbst verwaltet.\n\n
275
+ Stelle im Rahmen der Arbeitnehmer\u00fcberlassung.\n\n#### Tarifvertrag:
276
+ \n\nIGZ\n\n#### Befristung:\n\nUnbefristet\n\n#### Anzahl freier Stellen:
277
+ \n\n1\n\n#### Arbeitszeitmodell:\n\n* Vollzeit\n\n#### Quelle des
278
+ Stellenangebots:\n\narbeitsagentur.de\n\n#### Referenznummer:\n
279
+ \nXXXX\n""",
280
+ on_click=clicked,
281
+ args=[1],
282
+ )
283
+ # st.button(
284
+ # "Nur Vollzeit",
285
+ # on_click=clicked,
286
+ # args=[2],
287
+ # )
288
+ # st.button("Famillienfreundlich", on_click=clicked, args=[3])
289
+
290
+ with left_column:
291
+ st.markdown(
292
+ '<p class="example">Lade eine Datei mit einem Anzeigentext hoch.</p>',
293
+ unsafe_allow_html=True,
294
+ )
295
+ st.markdown(
296
+ """ <p class="font">(.txt, .json mit key "full_text")</p>""",
297
+ unsafe_allow_html=True,
298
+ )
299
+ uploaded_file = st.file_uploader("Datei hochladen", type=["txt", "json"])
300
+ if uploaded_file is not None:
301
+ if uploaded_file.type == "text/plain":
302
+ stringio = StringIO(uploaded_file.getvalue().decode("utf-8"))
303
+ uploaded_jobdescription = stringio.read()
304
+ elif uploaded_file.type == "application/json":
305
+ file_contents = json.load(uploaded_file)
306
+ uploaded_jobdescription = file_contents["full_text"]
307
+ else:
308
+ st.write("Bitte lade eine .txt oder .json Datei hoch.")
309
+
310
+ if st.button("Extrahieren", key="extract_file_based"):
311
+ if uploaded_jobdescription:
312
+ query = [{"posting_id": "aaaa", "text": uploaded_jobdescription}]
313
+ output, docs = pipeline(query)
314
+ concept = [output[i]["concept"] for i in range(len(output))]
315
+ if output[0]["concept"] is not None:
316
+ st.markdown(
317
+ '<p class="example">Gefundene Konzepte:</p>',
318
+ unsafe_allow_html=True,
319
+ )
320
+ for c in output:
321
+ if c["concept"] in ANFORDERUNGEN:
322
+ st.write(f" - Anforderung: {c['concept']}")
323
+ elif c["concept"] in ANGEBOTE:
324
+ st.write(f" - Angebot: {c['concept']}")
325
+ else:
326
+ st.write(f" - Konzept nicht in der Taxonomie {c['concept']}")
327
+
328
+ # add explanations
329
+ options = {key: "#ef553b" for key in ANFORDERUNGEN} | {
330
+ key: "#636efa" for key in ANGEBOTE
331
+ }
332
+ st.markdown(
333
+ '<p class="example">Erklärungen:</p>',
334
+ unsafe_allow_html=True,
335
+ )
336
+ visualize_spans(
337
+ docs[0],
338
+ spans_key="ruler",
339
+ title="",
340
+ show_table=False,
341
+ displacy_options={"colors": options},
342
+ )
343
+ else:
344
+ st.write("Es wurde kein Konzept für diese Jobanzeige extrahiert.")
345
+
346
+ else:
347
+ st.write("Bitte lade eine Datei hoch.")
348
+
349
+
350
+ with middle_column:
351
+ tabs_font_css = """
352
+ <style>
353
+ div[class*="stTextInput"] label p {
354
+ font-size: 2px;
355
+ }
356
+ </style>
357
+ """
358
+ st.markdown(
359
+ '<p class="example">Gebe den Text einer Jobanzeige ein.</p>',
360
+ unsafe_allow_html=True,
361
+ )
362
+
363
+ # get to know if the example job title buttons were clicked
364
+ selected_job_text = ""
365
+ if st.session_state.clicked[1]:
366
+ selected_job_text = """\n## Stellendetails zu: Mitarbeiter in der Produktion (m/w/d)\n\n### Mitarbeiter
367
+ in der Produktion (m/w/d)\n\nHelfer/in - Elektro \nVer\u00f6ffentlicht:
368
+ XX.XX.2023\n\n#### Mitarbeiter in der Produktion (m/w/d)\n\n XXXX
369
+ GmbH\n\n#### Typ:\n\nArbeit\n\n#### Arbeitszeit:\n\nVollzeit\n\n####
370
+ Eintrittsdatum:\n\nab sofort\n\n#### Arbeitsort:\n\XXXX\n\n###
371
+ Stellenbeschreibung\n\nOrt: XXXX Arbeitszeitmodell: Vollzeit
372
+ Vertragsart: Arbeitnehmer\u00fcberlassung mit \u00dcbernahmeoption
373
+ Branche: Elektro Startzeitpunkt: ab sofort Die XXXX GmbH ist Ihr
374
+ Dienstleister im Gro\u00dfraum XXXX f\u00fcr eine faire, professionelle
375
+ Umsetzung Ihrer neuen beruflichen Herausforderungen. Gestalten auch Sie
376
+ Ihre berufliche Zukunft mit uns! Zum n\u00e4chstm\u00f6glichen Zeitpunkt
377
+ suchen wir die ideale Besetzung f\u00fcr die Position: Mitarbeiter in der
378
+ Produktion (m/w/d) Langfristige Besch\u00e4ftigungsoption Ihre Vorteile:
379
+ *All-in-One: Umfassende Beratung und unkomplizierter Bewerbungsprozess mit
380
+ XXXX * Bezahlung: Attraktives Gehalt mit Zusatzleistungen (z.B.
381
+ Weihnachtsgeld) *Sicherheit: Vermittlung in einen zukunftssicheren
382
+ Arbeitsplatz* Work-Life-Balance: Geregelte Arbeitszeiten *Onboarding:
383
+ Umfangreiche und gr\u00fcndliche Einarbeitung* Abwechslung: Vielseitige
384
+ und spannende Aufgaben *Arbeitsumgebung: Flache Hierarchien, modernes
385
+ Arbeitsumfeld und ein aufgeschlossenes Team* Was wir von BS \nimmer bieten
386
+ k\u00f6nnen: Pers\u00f6nlicher Ansprechpartner, gro\u00dfes
387
+ Unternehmensnetzwerk, kostenlose Arbeitskleidung sowie eine zeitnahe
388
+ R\u00fcckmeldung zum Bewerbungsstatus Ihre Aufgaben: *Montage von
389
+ Elektronik-Komponenten* Konfektionierung einzelner Komponenten
390
+ *Verpackungst\u00e4tigkeiten Ihr Profil:* Berufserfahrung: Idealerweise
391
+ erste Berufserfahrung in einer vergleichbaren Position *Hard Skills:
392
+ Fingerfertigkeit und technisches Grundverst\u00e4ndnis* Soft Skills:
393
+ Teambewusstsein und eine gute Kommunikationsf\u00e4higkeit * Arbeitsweise:
394
+ Sorgf\u00e4ltig und strukturiert\n\n### Anforderungen an den Bewerber\n\n
395
+ #### Berufserfahrung:\n\nMit Berufserfahrung\n\n#### F\u00e4higkeiten:\n\n*
396
+ ##### Transport, Verkehr \nGrundkenntnisse \nLagerarbeit, Transport\n*
397
+ ##### Produktion, Verarbeitung, Technik \nGrundkenntnisse
398
+ \nBest\u00fccken, Maschinenf\u00fchrung, Anlagenf\u00fchrung,
399
+ -bedienung, Montage (Elektrotechnik)\n\n#### Pers\u00f6nliche
400
+ St\u00e4rken:\n\n* Selbst\u00e4ndiges Arbeiten\n* Sorgfalt/Genauigkeit\n*
401
+ Motivation/ Leistungsbereitschaft\n* Zuverl\u00e4ssigkeit\n*
402
+ Lernbereitschaft\n\n#### Sprachen:\n\n* Grundkenntnisse \nDeutsch\n\n
403
+ #### Fahrzeug erforderlich:\n\nNein\n\n#### Reise-/Montagebereitschaft:
404
+ \n\nNicht erforderlich\n\n### Arbeitsorte\n\n* XXXX \n\n###
405
+ Arbeitgeber\n\nXXX GmbH\n\n#### Firmenadresse:\n\n
406
+ XXXX\n\n#### Branchengruppe:\n\n
407
+ Arbeitnehmer\u00fcberlassung, Zeitarbeit\n\n#### Branche:\n\nBefristete
408
+ \u00dcberlassung von Arbeitskr\u00e4ften\n\n### Weitere Informationen
409
+ \n\nDas Stellenangebot wird durch den Arbeitgeber selbst verwaltet.\n\n
410
+ Stelle im Rahmen der Arbeitnehmer\u00fcberlassung.\n\n#### Tarifvertrag:
411
+ \n\nIGZ\n\n#### Befristung:\n\nUnbefristet\n\n#### Anzahl freier Stellen:
412
+ \n\n1\n\n#### Arbeitszeitmodell:\n\n* Vollzeit\n\n#### Quelle des
413
+ Stellenangebots:\n\narbeitsagentur.de\n\n#### Referenznummer:\n
414
+ \nXXXX\n"""
415
+
416
+ # create a text input for the user to type in a job title
417
+ st.text_area(
418
+ "---",
419
+ value=selected_job_text,
420
+ key="typed_job_text",
421
+ height=500,
422
+ on_change=reset_buttons, # noqa: E501
423
+ )
424
+
425
+ if selected_job_text:
426
+ query = [{"posting_id": "aaaa", "text": selected_job_text}]
427
+ else:
428
+ query = [
429
+ {"posting_id": "aaaa", "text": st.session_state.typed_job_text}
430
+ ] # noqa: E501
431
+ # predicts the occupation of the job title when predict button is clicked
432
+ if st.button("Extrahieren", key="extract_text_based"):
433
+ output, docs = pipeline(query)
434
+ concept = [output[i]["concept"] for i in range(len(output))]
435
+ if output[0]["concept"] is not None:
436
+ st.markdown(
437
+ '<p class="example">Gefundene Konzepte:</p>',
438
+ unsafe_allow_html=True,
439
+ )
440
+ for c in output:
441
+ if c["concept"] in ANFORDERUNGEN:
442
+ st.write(f" - Anforderung: {c['concept']}")
443
+ elif c["concept"] in ANGEBOTE:
444
+ st.write(f" - Angebot: {c['concept']}")
445
+ else:
446
+ st.write(f" - Konzept nicht in der Taxonomie {c['concept']}")
447
+
448
+ # add explanations
449
+ options = {key: "#ef553b" for key in ANFORDERUNGEN} | {
450
+ key: "#636efa" for key in ANGEBOTE
451
+ }
452
+ st.markdown(
453
+ '<p class="example">Erklärungen:</p>',
454
+ unsafe_allow_html=True,
455
+ )
456
+ visualize_spans(
457
+ docs[0],
458
+ spans_key="ruler",
459
+ title="",
460
+ show_table=False,
461
+ displacy_options={"colors": options},
462
+ )
463
+ else:
464
+ st.write("Es wurde kein Konzept für diese Jobanzeige extrahiert.")
465
+ st.markdown("#")
data/test.json ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "date": "2023-XX-XX",
3
+ "sequence_number": 0000,
4
+ "expired": false,
5
+ "source_url": "XXX",
6
+ "source_website": "arbeitsagentur.de",
7
+ "source_type": { "value": 1, "label": "Jobsite" },
8
+ "posting_id": "123d949f463b425aa7e7da992de33a91",
9
+ "via_intermediary": false,
10
+ "language": "de",
11
+ "job_title": "Mitarbeiter in der Produktion (m/w/d)",
12
+ "profession": { "value": 1584, "label": "Produktionsmitarbeiter (m/w/d)" },
13
+ "profession_group": { "value": 182, "label": "Produktionsmitarbeiter (m/w)" },
14
+ "profession_class": { "value": 18, "label": "Produktion" },
15
+ "profession_isco_code": {
16
+ "value": "9329",
17
+ "label": "Hilfsarbeiter bei der Herstellung von Waren, anderweitig nicht genannt"
18
+ },
19
+ "location": "XXXX",
20
+ "location_name": "XXXX",
21
+ "location_coordinates": "XXXX",
22
+ "region": { "value": "BW", "label": "Baden-W\u00fcrttemberg" },
23
+ "education_level": { "value": 0, "label": "Unbekannt" },
24
+ "advertiser_name": "XXXX Gmbh",
25
+ "advertiser_type": { "value": 1, "label": "Direkte Arbeitgeber" },
26
+ "advertiser_street": "Franz-John-Str.",
27
+ "advertiser_house_number": "10",
28
+ "advertiser_postal_code": "XXXX",
29
+ "advertiser_location": "XXX",
30
+ "advertiser_reference_number": "XXXX",
31
+ "available_contact_fields": "advertiser_name",
32
+ "organization_name": "XXX GmbH",
33
+ "organization_industry": { "value": "0", "label": "Andere / Unbekannt" },
34
+ "organization_size": { "value": 0, "label": "Unbekannt" },
35
+ "contract_type": {
36
+ "value": 1,
37
+ "label": "Unbefristetes Dienstverh\u00e4ltnis"
38
+ },
39
+ "working_hours_type": { "value": 1, "label": "Regul\u00e4re Arbeitszeiten" },
40
+ "employment_type": { "value": 1, "label": "Vollzeit" },
41
+ "full_text": "\n## Stellendetails zu: Mitarbeiter in der Produktion (m/w/d)\n\n### Mitarbeiter in der Produktion (m/w/d)\n\nHelfer/in - Elektro \nVer\u00f6ffentlicht: XX.XX.2023\n\n#### Mitarbeiter in der Produktion (m/w/d)\n\n XXX GmbH\n\n#### Typ:\n\nArbeit\n\n#### Arbeitszeit:\n\nVollzeit\n\n#### Eintrittsdatum:\n\nab sofort\n\n#### Arbeitsort:\n\nXXXX\n\n### Stellenbeschreibung\n\nOrt: XXXX Arbeitszeitmodell: Vollzeit Vertragsart: Arbeitnehmer\u00fcberlassung mit \u00dcbernahmeoption Branche: Elektro Startzeitpunkt: ab sofort Die XXXX GmbH ist Ihr Dienstleister im Gro\u00dfraum XXXX f\u00fcr eine faire, professionelle Umsetzung Ihrer neuen beruflichen Herausforderungen. Gestalten auch Sie Ihre berufliche Zukunft mit uns! Zum n\u00e4chstm\u00f6glichen Zeitpunkt suchen wir die ideale Besetzung f\u00fcr die Position: Mitarbeiter in der Produktion (m/w/d) Langfristige Besch\u00e4ftigungsoption Ihre Vorteile: *All-in-One: Umfassende Beratung und unkomplizierter Bewerbungsprozess mit XXXX* Bezahlung: Attraktives Gehalt mit Zusatzleistungen (z.B. Weihnachtsgeld) *Sicherheit: Vermittlung in einen zukunftssicheren Arbeitsplatz* Work-Life-Balance: Geregelte Arbeitszeiten *Onboarding: Umfangreiche und gr\u00fcndliche Einarbeitung* Abwechslung: Vielseitige und spannende Aufgaben *Arbeitsumgebung: Flache Hierarchien, modernes Arbeitsumfeld und ein aufgeschlossenes Team* Was wir von XXX \nimmer bieten k\u00f6nnen: Pers\u00f6nlicher Ansprechpartner, gro\u00dfes Unternehmensnetzwerk, kostenlose Arbeitskleidung sowie eine zeitnahe R\u00fcckmeldung zum Bewerbungsstatus Ihre Aufgaben: *Montage von Elektronik-Komponenten* Konfektionierung einzelner Komponenten *Verpackungst\u00e4tigkeiten Ihr Profil:* Berufserfahrung: Idealerweise erste Berufserfahrung in einer vergleichbaren Position *Hard Skills: Fingerfertigkeit und technisches Grundverst\u00e4ndnis* Soft Skills: Teambewusstsein und eine gute Kommunikationsf\u00e4higkeit * Arbeitsweise: Sorgf\u00e4ltig und strukturiert\n\n### Anforderungen an den Bewerber\n\n#### Berufserfahrung:\n\nMit Berufserfahrung\n\n#### F\u00e4higkeiten:\n\n* ##### Transport, Verkehr \nGrundkenntnisse \nLagerarbeit, Transport\n* ##### Produktion, Verarbeitung, Technik \nGrundkenntnisse \nBest\u00fccken, Maschinenf\u00fchrung, Anlagenf\u00fchrung, -bedienung, Montage (Elektrotechnik)\n\n#### Pers\u00f6nliche St\u00e4rken:\n\n* Selbst\u00e4ndiges Arbeiten\n* Sorgfalt/Genauigkeit\n* Motivation/ Leistungsbereitschaft\n* Zuverl\u00e4ssigkeit\n* Lernbereitschaft\n\n#### Sprachen:\n\n* Grundkenntnisse \nDeutsch\n\n#### Fahrzeug erforderlich:\n\nNein\n\n#### Reise-/Montagebereitschaft:\n\nNicht erforderlich\n\n### Arbeitsorte\n\n* XXXX\n\n### Arbeitgeber\n\nXXXX GmbH\n\n#### Firmenadresse:\n\n XXXX, XXX \n\n#### Branchengruppe:\n\nArbeitnehmer\u00fcberlassung, Zeitarbeit\n\n#### Branche:\n\nBefristete \u00dcberlassung von Arbeitskr\u00e4ften\n\n### Weitere Informationen\n\nDas Stellenangebot wird durch den Arbeitgeber selbst verwaltet.\n\nStelle im Rahmen der Arbeitnehmer\u00fcberlassung.\n\n#### Tarifvertrag:\n\nIGZ\n\n#### Befristung:\n\nUnbefristet\n\n#### Anzahl freier Stellen:\n\n1\n\n#### Arbeitszeitmodell:\n\n* Vollzeit\n\n#### Quelle des Stellenangebots:\n\narbeitsagentur.de\n\n#### Referenznummer:\n\nXXXX\n",
42
+ "candidate_description": "* Transport, Verkehr\n Grundkenntnisse\n Lagerarbeit, Transport\n * Produktion, Verarbeitung, Technik\n Grundkenntnisse\n Best\u00fccken, Maschinenf\u00fchrung, Anlagenf\u00fchrung, -bedienung, Montage (Elektrotechnik)\n\nPers\u00f6nliche St\u00e4rken:\n\n * Selbst\u00e4ndiges Arbeiten\n * Sorgfalt/Genauigkeit\n * Motivation/ Leistungsbereitschaft\n * Zuverl\u00e4ssigkeit\n * Lernbereitschaft\n\nSprachen:\n\n * Grundkenntnisse\n Deutsch",
43
+ "conditions_description": "Ort: XXXX Arbeitszeitmodell: Vollzeit Vertragsart: Arbeitnehmer\u00fcberlassung mit \u00dcbernahmeoption Branche: Elektro Startzeitpunkt: ab sofort Die XXXX GmbH ist Ihr Dienstleister im Gro\u00dfraum XXX f\u00fcr eine faire, professionelle Umsetzung Ihrer neuen beruflichen Herausforderungen. Gestalten auch Sie Ihre berufliche Zukunft mit uns! Zum n\u00e4chstm\u00f6glichen Zeitpunkt suchen wir die ideale Besetzung f\u00fcr die Position: Mitarbeiter in der Produktion (m/w/d) Langfristige Besch\u00e4ftigungsoption Ihre Vorteile: * All-in-One: Umfassende Beratung und unkomplizierter Bewerbungsprozess mit XXXX * Bezahlung: Attraktives Gehalt mit Zusatzleistungen (z.B. Weihnachtsgeld) * Sicherheit: Vermittlung in einen zukunftssicheren Arbeitsplatz * Work-Life-Balance: Geregelte Arbeitszeiten * Onboarding: Umfangreiche und gr\u00fcndliche Einarbeitung * Abwechslung: Vielseitige und spannende Aufgaben * Arbeitsumgebung: Flache Hierarchien, modernes Arbeitsumfeld und ein aufgeschlossenes Team * Was wir von XXX ",
44
+ "soft_skills": [
45
+ { "value": "KS7G6NP6R6L1H1SKFTSY", "label": "Zuverl\u00e4ssigkeit" },
46
+ { "value": "KSL5ONJ9QGJZ4G96PTIB", "label": "Flei\u00dfig und Engagiert" },
47
+ { "value": "KSLSQ90KU2MTW9EUR1B5", "label": "Eigenmotivation" },
48
+ { "value": "KSZI0PLLDDAWEFE20HK8", "label": "Neugier" }
49
+ ],
50
+ "professional_skills": [
51
+ { "value": "KS120LH6DHTBJYVLFKB3", "label": "Elektrotechnik" },
52
+ { "value": "KS1261X6D4NXVPR41HR0", "label": "Maschinensteuerungen" },
53
+ { "value": "KS440ZB6SL0GGNRMHH11", "label": "Lagerverwaltung" }
54
+ ],
55
+ "language_skills": [{ "value": "KS124BK6VD8Y1F11PD2Q", "label": "Deutsch" }],
56
+ "job_id": "123d949f463b425aa7e7da992de33a91"
57
+ }
data/test.txt ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ \n## Stellendetails zu: Mitarbeiter in der Produktion (m/w/d)\n\n### Mitarbeiter
2
+ in der Produktion (m/w/d)\n\nHelfer/in - Elektro \nVer\u00f6ffentlicht:
3
+ XX.XX.2023\n\n#### Mitarbeiter in der Produktion (m/w/d)\n\nBS XXXX
4
+ GmbH\n\n#### Typ:\n\nArbeit\n\n#### Arbeitszeit:\n\nVollzeit\n\n####
5
+ Eintrittsdatum:\n\nab sofort\n\n#### Arbeitsort:\n\nArbeitsort\n\n###
6
+ Stellenbeschreibung\n\nOrt: Firma Arbeitszeitmodell: Vollzeit
7
+ Vertragsart: Arbeitnehmer\u00fcberlassung mit \u00dcbernahmeoption
8
+ Branche: Elektro Startzeitpunkt: ab sofort Die XXXX GmbH ist Ihr
9
+ Dienstleister im Gro\u00dfraum Achern f\u00fcr eine faire, professionelle
10
+ Umsetzung Ihrer neuen beruflichen Herausforderungen. Gestalten auch Sie
11
+ Ihre berufliche Zukunft mit uns! Zum n\u00e4chstm\u00f6glichen Zeitpunkt
12
+ suchen wir die ideale Besetzung f\u00fcr die Position: Mitarbeiter in der
13
+ Produktion (m/w/d) Langfristige Besch\u00e4ftigungsoption Ihre Vorteile:
14
+ *All-in-One: Umfassende Beratung und unkomplizierter Bewerbungsprozess* Bezahlung: Attraktives Gehalt mit Zusatzleistungen (z.B.
15
+ Weihnachtsgeld) *Sicherheit: Vermittlung in einen zukunftssicheren
16
+ Arbeitsplatz* Work-Life-Balance: Geregelte Arbeitszeiten *Onboarding:
17
+ Umfangreiche und gr\u00fcndliche Einarbeitung* Abwechslung: Vielseitige
18
+ und spannende Aufgaben *Arbeitsumgebung: Flache Hierarchien, modernes
19
+ Arbeitsumfeld und ein aufgeschlossenes Team* Was wir \nimmer bieten
20
+ k\u00f6nnen: Pers\u00f6nlicher Ansprechpartner, gro\u00dfes
21
+ Unternehmensnetzwerk, kostenlose Arbeitskleidung sowie eine zeitnahe
22
+ R\u00fcckmeldung zum Bewerbungsstatus Ihre Aufgaben: *Montage von
23
+ Elektronik-Komponenten* Konfektionierung einzelner Komponenten
24
+ *Verpackungst\u00e4tigkeiten Ihr Profil:* Berufserfahrung: Idealerweise
25
+ erste Berufserfahrung in einer vergleichbaren Position *Hard Skills:
26
+ Fingerfertigkeit und technisches Grundverst\u00e4ndnis* Soft Skills:
27
+ Teambewusstsein und eine gute Kommunikationsf\u00e4higkeit * Arbeitsweise:
28
+ Sorgf\u00e4ltig und strukturiert\n\n### Anforderungen an den Bewerber\n\n
29
+ #### Berufserfahrung:\n\nMit Berufserfahrung\n\n#### F\u00e4higkeiten:\n\n*
30
+ ##### Transport, Verkehr \nGrundkenntnisse \nLagerarbeit, Transport\n*
31
+ ##### Produktion, Verarbeitung, Technik \nGrundkenntnisse
32
+ \nBest\u00fccken, Maschinenf\u00fchrung, Anlagenf\u00fchrung,
33
+ -bedienung, Montage (Elektrotechnik)\n\n#### Pers\u00f6nliche
34
+ St\u00e4rken:\n\n* Selbst\u00e4ndiges Arbeiten\n* Sorgfalt/Genauigkeit\n*
35
+ Motivation/ Leistungsbereitschaft\n* Zuverl\u00e4ssigkeit\n*
36
+ Lernbereitschaft\n\n#### Sprachen:\n\n* Grundkenntnisse \nDeutsch\n\n
37
+ #### Fahrzeug erforderlich:\n\nNein\n\n#### Reise-/Montagebereitschaft:
38
+ \n\nNicht erforderlich\n\n### Arbeitsorte\n\n* \n\n###
39
+ Branchengruppe:\n\n
40
+ Arbeitnehmer\u00fcberlassung, Zeitarbeit\n\n#### Branche:\n\nBefristete
41
+ \u00dcberlassung von Arbeitskr\u00e4ften\n\n### Weitere Informationen
42
+ \n\nDas Stellenangebot wird durch den Arbeitgeber selbst verwaltet.\n\n
43
+ Stelle im Rahmen der Arbeitnehmer\u00fcberlassung.\n\n#### Tarifvertrag:
44
+ \n\nIGZ\n\n#### Befristung:\n\nUnbefristet\n\n#### Anzahl freier Stellen:
45
+ \n\n1\n\n#### Arbeitszeitmodell:\n\n* Vollzeit\n\n#### Quelle des
46
+ Stellenangebots:\n\narbeitsagentur.de\n\n#### Referenznummer:\n
47
+ \XXXXXXXX\n", "candidate_description": "* Transport,
48
+ Verkehr\n Grundkenntnisse\n Lagerarbeit, Transport\n
49
+ * Produktion, Verarbeitung, Technik\n Grundkenntnisse\n
50
+ Best\u00fccken, Maschinenf\u00fchrung, Anlagenf\u00fchrung, -bedienung,
51
+ Montage (Elektrotechnik)\n\nPers\u00f6nliche St\u00e4rken:\n\n
52
+ * Selbst\u00e4ndiges Arbeiten\n * Sorgfalt/Genauigkeit\n
53
+ * Motivation/ Leistungsbereitschaft\n * Zuverl\u00e4ssigkeit\n
54
+ * Lernbereitschaft\n\nSprachen:\n\n * Grundkenntnisse\n
55
+ Deutsch", "conditions_description": "Ort: Arbeitszeitmodell:
56
+ Vollzeit Vertragsart: Arbeitnehmer\u00fcberlassung mit
57
+ \u00dcbernahmeoption Branche: Elektro Startzeitpunkt: ab sofort Ihr Dienstleister im Gro\u00dfraum XXXX f\u00fcr
58
+ eine faire, professionelle Umsetzung Ihrer neuen beruflichen
59
+ Herausforderungen. Gestalten auch Sie Ihre berufliche Zukunft mit
60
+ uns! Zum n\u00e4chstm\u00f6glichen Zeitpunkt suchen wir die ideale
61
+ Besetzung f\u00fcr die Position: Mitarbeiter in der Produktion (m/w/d)
62
+ Langfristige Besch\u00e4ftigungsoption Ihre Vorteile: * All-in-One:
63
+ Umfassende Beratung und unkomplizierter Bewerbungsprozess mit XXXXX* Bezahlung: Attraktives Gehalt mit Zusatzleistungen (z.B.
64
+ Weihnachtsgeld) * Sicherheit: Vermittlung in einen zukunftssicheren
65
+ Arbeitsplatz * Work-Life-Balance: Geregelte Arbeitszeiten * Onboarding:
66
+ Umfangreiche und gr\u00fcndliche Einarbeitung * Abwechslung: Vielseitige
67
+ und spannende Aufgaben * Arbeitsumgebung: Flache Hierarchien, modernes
68
+ Arbeitsumfeld und ein aufgeschlossenes Team * Was wir von BS
poetry.lock ADDED
The diff for this file is too large to render. See raw diff
 
pyproject.toml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [tool.poetry]
2
+ name = "family-compatibility"
3
+ version = "0.1.0"
4
+ description = ""
5
+ authors = ["Josephina Thiele <josephina.thiele@and-effect.com>"]
6
+ readme = "README.md"
7
+
8
+ [tool.poetry.dependencies]
9
+ python = "^3.11"
10
+ streamlit = "^1.39.0"
11
+ huggingface-hub = "^0.25.2"
12
+ spacy = "^3.8.2"
13
+ plotly = "^5.24.1"
14
+ python-dotenv = "^1.0.1"
15
+ spacy-streamlit = "^1.0.6"
16
+
17
+
18
+ [build-system]
19
+ requires = ["poetry-core"]
20
+ build-backend = "poetry.core.masonry.api"
requirements.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ plotly
2
+ huggingface-hub
3
+ spacy
4
+ streamlit
5
+ spacy-streamlit
6
+ python-dotenv
setup.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ #!/bin/bash
2
+ # Install spaCy model
3
+ python -m spacy download de_core_news_sm