File size: 3,151 Bytes
34475ca
3c8522e
 
 
 
 
 
9254b4c
318e9b0
 
1a6e1ca
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1998d95
 
 
1a6e1ca
 
 
 
 
1998d95
 
 
1a6e1ca
 
1998d95
 
1a6e1ca
1998d95
 
 
d218242
1998d95
 
 
1a6e1ca
318e9b0
1a6e1ca
0e88fea
6f918d6
0e88fea
f80b079
318e9b0
 
f80b079
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
import pkg_resources
from transformers import pipeline
import gradio as gr

translator = pipeline("translation", model="Helsinki-NLP/opus-mt-is-en")
sentiment_classifier = pipeline("text-classification", model="Birkir/electra-base-igc-is-sentiment-analysis")
formality_classifier = pipeline("text-classification", model="svanhvit/formality-classification-icebert")
detoxify_pipeline = pipeline('text-classification', model='unitary/toxic-bert', tokenizer='bert-base-uncased', function_to_apply='sigmoid', top_k=None)
politeness_classifier = pipeline("text-classification", model="Genius1237/xlm-roberta-large-tydip")

def translate_text(text):
    translation = translator(text, max_length=512)
    return translation[0]['translation_text']

def analyze_toxicity(text):
    toxicity_results = detoxify_pipeline(text)
    return toxicity_results[0]

def analyze_politeness(text):
    politeness_result = politeness_classifier(text)
    return politeness_result[0]['label'], politeness_result[0]['score']

def analyze_formality(text):
    formality_result = formality_classifier(text)
    formality_label = formality_result[0]['label']
    formality_score = formality_result[0]['score']
    return formality_label, formality_score

def analyze_sentiment(text):
    sentiment_result = sentiment_classifier(text)
    sentiment_label = sentiment_result[0]['label']
    sentiment_score = sentiment_result[0]['score']
    return sentiment_label, sentiment_score

def analyze_text(icelandic_text):
    formality_label, formality_score = analyze_formality(icelandic_text)
    sentiment_label, sentiment_score = analyze_sentiment(icelandic_text)

    # Convert sentiment label
    sentiment_label = sentiment_label.replace("LABEL_", "")

    translated_text = translate_text(icelandic_text)

    toxicity_results = analyze_toxicity(translated_text)
    if isinstance(toxicity_results, list):
        toxicity_results = toxicity_results[0]
    
    # Determine toxicity label based on score
    toxicity_label = '1' if toxicity_results['score'] >= 0.5 else '0'

    politeness_label, politeness_score = analyze_politeness(translated_text)
    # Convert politeness label to binary
    politeness_label = '1' if politeness_label.lower() == 'polite' else '0'

    analysis_results = (
        f"Translated Text: {translated_text}\n\n"
        f"Sentiment: Label: {sentiment_label}, Score: {round(sentiment_score, 2)}\n"
        f"Formality: Label: {formality_label}, Score: {round(formality_score, 2)}\n"
        f"Toxicity: Label: {toxicity_label}, Score: {round(toxicity_results['score'], 2)}\n"
        f"Politeness: Label: {politeness_label}, Score: {round(politeness_score, 2)}"
    )
    return analysis_results

demo = gr.Interface(fn=analyze_text, 
                    inputs=gr.Textbox(lines=2, placeholder="Enter Icelandic Text Here..."), 
                    outputs=gr.Textbox(label="Analysis Results"),
                    title="Icelandic Text Analysis",
                    description="This app translates Icelandic text to English and performs sentiment, formality, toxicity, and politeness analysis.")

if __name__ == "__main__":
    demo.launch()