File size: 4,324 Bytes
f294c70
6050aa2
a6bec75
 
 
 
32c1c21
6050aa2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3fa09bf
6050aa2
7014642
6050aa2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3fa09bf
6050aa2
3fa09bf
6050aa2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3fa09bf
 
 
6050aa2
724e8ab
 
345ae45
56bc205
dd4b44b
6050aa2
64b9c5c
 
6050aa2
a6bec75
 
77a9d47
6050aa2
52f89d5
 
6050aa2
 
3fa09bf
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
import gradio as gr
from transformers import pipeline
import os

HF_TOKEN = os.getenv('HF_TOKEN')
hf_writer = gr.HuggingFaceDatasetSaver(HF_TOKEN, "crowdsourced-sentiment")

def sentiment_analysis_generate_text(text):
    # Define the model
    model_name = "gsar78/HellenicSentimentAI"

    # Create the pipeline
    nlp = pipeline("sentiment-analysis", model=model_name)
    # Split the input text into individual sentences
    sentences = text.split('|')
    # Run the pipeline on each sentence and collect the results
    results = nlp(sentences)
    output = []
    for sentence, result in zip(sentences, results):
        output.append(f"Text: {sentence.strip()}\nSentiment: {result['label']}, Score: {result['score']:.4f}\n")

    # Join the results into a single string to return
    return "\n".join(output)


def sentiment_analysis_generate_table(text):
    # Define the model
    model_name = "gsar78/HellenicSentimentAI"
    # Create the pipeline
    nlp = pipeline("sentiment-analysis", model=model_name)
    # Split the input text into individual sentences
    sentences = text.split('|')

    # Generate the HTML table with enhanced colors and bold headers
    html = """
    <html>
    <head>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/css/bootstrap.min.css">
    <style>
    .label {
        transition: .15s;
        border-radius: 8px;
        padding: 5px 10px;
        font-size: 14px;
        text-transform: uppercase;
    }
    .positive {
        background-color: rgb(54, 176, 75);
        color: white;
    }
    .negative {
        background-color: rgb(237, 83, 80);
        color: white;
    }
    .neutral {
        background-color: rgb(255, 165, 0);
        color: white;
    }
    th {
        font-weight: bold;
        color: rgb(106, 38, 198);
    }
    </style>
    </head>
    <body>
    <table class="table table-striped">
    <thead>
        <tr>
            <th scope="col">Text</th>
            <th scope="col">Score</th>
            <th scope="col">Sentiment</th>
        </tr>
    </thead>
    <tbody>
    """
    for sentence in sentences:
        result = nlp(sentence.strip())[0]
        text = sentence.strip()
        score = f"{result['score']:.4f}"
        sentiment = result['label']

        # Determine the sentiment class
        if sentiment.lower() == "positive":
            sentiment_class = "positive"
        elif sentiment.lower() == "negative":
            sentiment_class = "negative"
        else:
            sentiment_class = "neutral"

        # Generate table rows
        html += f'<tr><td>{text}</td><td>{score}</td><td><span class="label {sentiment_class}">{sentiment}</span></td></tr>'

    html += """
    </tbody>
    </table>
    </body>
    </html>
    """

    return html


if __name__ == "__main__":
    iface = gr.Interface(
        fn=sentiment_analysis_generate_table,
        inputs=gr.Textbox(placeholder="Enter sentence here..."),
        outputs=gr.HTML(),
        title="Hellenic Sentiment AI",
        description="A sentiment analysis model, primarily for the Greek language.<br>"
                    "Type in some text to see its sentiment classification: positive, neutral, or negative.<br>"
                    "Multiple sentences can be classified when separated by the | character.<br>"
                    "For Emotion & Sentiment Classification visit Version 2.0: <a href='https://gsar78-hellenicsentimentai-v2.hf.space' target='_blank'>Hellenic Sentiment AI v2</a><br>"
                    "Version 1.1 - Developed by GeoSar",
        examples=[
            ["Η πικάντικη γεύση αυτής της σούπας λαχανικών ήταν ακριβώς αυτό που χρειαζόμουν σήμερα. Είχε μια ωραία γαργαλιστική αίσθηση χωρίς να είναι πολύ καυτερή."],
            ["Η πίτσα ήταν καμένη και τα υλικά φθηνής ποιότητας. Σίγουρα δεν θα ξαναπαραγγείλω από εκεί."]
        ],
        allow_flagging="manual",
        flagging_options=["Incorrect", "Ambiguous"],
        flagging_callback=hf_writer,
        examples_per_page=2,
        allow_duplication=False,
        concurrency_limit="default"
    )

    iface.launch(share=True)