File size: 5,458 Bytes
1016840
 
 
 
93aa6d4
1016840
b46cc3a
a188586
b46cc3a
 
 
 
 
333e113
5bb9191
1016840
27cd34c
480ddb6
 
27cd34c
480ddb6
27cd34c
 
94d73b2
 
480ddb6
333e113
99b18ba
 
 
27cd34c
9446fdb
 
 
333e113
9446fdb
 
 
333e113
3f7fd06
 
 
9418714
333e113
 
9446fdb
 
04722d4
cd9713c
04722d4
80fe505
0d1bfc1
80fe505
0d1bfc1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80fe505
0d1bfc1
 
 
 
 
80fe505
0d1bfc1
 
 
 
 
 
 
 
 
 
 
3f7fd06
0d1bfc1
 
 
 
 
 
 
 
 
 
3f7fd06
04722d4
9446fdb
68ed3a1
6cf5a08
9446fdb
 
 
 
1016840
b1b89ed
 
51d395e
 
b1b89ed
18a5781
345f778
1016840
9446fdb
1016840
eaa9b40
345f778
f025da4
1016840
 
99b18ba
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
import openai
import gradio as gr
import os

openai.api_key = os.environ["OpenAPI_Key"]

# Function to make API call
def api_call(messages, temperature=0.5, model="gpt-4o-2024-05-13"):
    return openai.chat.completions.create( 
        messages=messages,
        temperature=temperature,
        model=model
    ).choices[0].message.content

def chunk_HTMLs(text, delimiter="HTML (ID:"):
    HTMLs = text.split(delimiter)
    HTMLs = HTMLs[1:] if HTMLs[0] else HTMLs
    html_dict = {}
    for html in HTMLs:
        end_id_index = html.find(")")
        if end_id_index != -1:
            html_id = html[:end_id_index].strip()
            html_content = html[end_id_index+1:].strip()
            full_html_id = "HTML: (ID: " + html_id + ")"
            html_dict[full_html_id] = delimiter + "HTML (ID: " + html_id + ") " + html_content
    return html_dict

def process_course(input_text, term_zorgvrager="cliënt", term_zorgprofessional="begeleider"):
    # Processes input text, extracts HTML chunks, analyzes each using an OpenAI model,
    # and conducts a second, separate analysis on each qualifying chunk,
    stored_HTMLs = chunk_HTMLs(input_text)

    results = []
    last_html_id = None  # Track the last processed HTML ID
    for html_id, html_content in stored_HTMLs.items():
        if last_html_id and html_id != last_html_id:
            results.append("\n")  # Add extra newline for a new HTML ID group
        
        messages = [
            {"role": "system", "content": r"""Analyseer het perspectief van deze tekst, bedoeld voor zorgprofessionals. Adresseert de tekst altijd de zorgverlener? Of wordt soms ook de zorgvrager aangesproken?
Geef je antwoord in een van onderstaande zinnen: 
Oordeel: het perspectief is altijd zorgverlener. 
Oordeel: het perspectief is deels zorgvrager."""},
            {"role": "user", "content": html_content}
        ]
        oordeel = api_call(messages)
        results.append(f"{html_id}: {oordeel}")

        if "deels zorgvrager" in oordeel:
            follow_up_messages = [
                 {"role": "system", "content": r"""# Opdracht

Kijk naar de hieronder gegeven tekst bedoeld voor Persoonlijk Begeleiders (zorgprofessionals). Jij analyseert of de tekst volledig voor de juiste doelgroep geschreven is, en schrijft die delen om die aan de zorgvrager gericht zijn in plaats van aan de begeleider.  Zowel de hoofdtekst, als de vragen erbij, moeten geschikt zijn als onderwijsmateriaal voor persoonlijk begeleiders, níet voor de zorgvrager (de cliënt of patiënt). De tekst mag soms wel een 'neutrale' doelgroep aanspreken, voor universele algemene delen die voor ieder mens gelden, en dus ook voor de begeleider. Alleen het direct aanspreken van de zorgvrager is verkeerd. 



## Voorbeelden

### Juist perspectief 

- 'Als je moe bent, word je minder alert.'

Dit is prima, want hier wordt elke lezer aangesproken (want dit effect van moe worden is universeel).

- 'Als je te weinig drinkt, wordt je bloed stroperig. 

Dit is prima, want hier wordt ook elke lezer aangesproken (want dit effect van vochtinname op bloed is ook universeel).

- 'Als de cliënt met je in discussie gaat en hierbij agressief wordt, is het belangrijk om je grenzen aan te geven.'

Dit is prima, want hier wordt de begeleider aangesproken, de juiste doelgroep voor de tekst.



### Verkeerd perspectief (inclusief correctie)

- 'Als je het moeilijk vindt om te plannen, vraag hierbij dan je begeleider om hulp.'

Hier wordt de zorgvrager aangesproken, terwijl de tekst voor de begeleider bedoeld is.

Correctie: 'De zorgvrager kan je om hulp vragen als hij of zij het moeilijk vindt om te plannen.'

- 'Diëten is al lastig genoeg. Daarom moet je zorgen dat je duidelijk weet wat de regels zijn voor je dieet.' 

Hier wordt niet iedereen aangesproken (niet iedereen moet diëten), dus dit perspectief is verkeerd.

Correctie: ' 'Diëten is al lastig genoeg. Daarom moet de zorgvrager duidelijk weten wat de regels zijn voor zijn of haar dieet.' 



# Antwoord

## Format

Antwoord in je analyse alleen met:

Citaat: [citaat van zin(nen) met verkeerde doelgroep]

Correctie: [gecorrigeerde zin(nen)])



## Overige instructies voor de correctie

- Citeer alleen de zinnen met een verkeerd perspectief.

- Verander zo min mogelijk aan de zin, verander alleen de doelgroep die wordt aangesproken.

- Spreek de begeleider aan met 'je' of in de derde persoon, met gebruik van de term 'begeleider'."""},
            {"role": "user", "content": html_content}
            ]
            follow_up_result = api_call(follow_up_messages, 0.7)
            results.append(f"{follow_up_result}")

        last_html_id = html_id  # Update the last processed HTML ID after handling

    results_string = '\n'.join(results)  # Use single newline for final join
    return results_string

inputs = [
    gr.Textbox(lines=7, label="Input Text"),
    gr.Textbox(lines=1, label="Term voor zorgvrager", placeholder="Leeg laten, werkt nog niet. Huidige defaultwaarde ingesteld voor MZ: zorgvrager"),
    gr.Textbox(lines=1, label="Term voor zorgprofessional", placeholder="Leeg laten, werkt nog niet. Huidige defaultwaarde ingesteld voor MZ: begeleider")
]
outputs = gr.Textbox(lines = 20, label="Result", show_copy_button=True)

iface = gr.Interface(
    fn=process_course,
    inputs=inputs,
    outputs=outputs,
    title="Doelgroepanalyse",
    description="Voer de tekst van een module in en druk op 'Submit'."
)

iface.launch()