Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # ENGLISH: https://neculaifantanaru.com/en/python-analyzing-person-psychology.html
- # ROMANIAN: https://neculaifantanaru.com/python-analizarea-persoanei-psihologie.html
- import tkinter as tk
- from textblob import TextBlob
- from googletrans import Translator
- import re
- from unidecode import unidecode
- # Funcție pentru analiza sentimentului și subiectivității
- def analyze_sentiment(text):
- translator = Translator()
- translated_text = translator.translate(text, src='ro', dest='en').text
- blob = TextBlob(translated_text)
- sentiment = blob.sentiment.polarity
- subjectivity = blob.sentiment.subjectivity
- return sentiment, subjectivity
- # Dicționar cu cuvinte pozitive și negative
- positive_words = [
- "da", "iubesc", "admir", "bunătate", "de acord", "fericit", "încrezător", "optimist", "satisfăcut",
- "energic", "vital", "plin de viață", "entuziasmat", "mulțumit", "recunoscător", "liniștit", "relaxat",
- "calm", "echilibrat", "armonios", "inspirat", "motivat", "curajos", "puternic", "rezistent", "înțelegător",
- "empatic", "generos", "amabil", "prietenos", "sincronizat", "conectat", "unit", "împăcat", "acceptant",
- "tolerant", "deschis", "onest", "autentic", "real", "veridic", "sincer", "franc", "direct", "clar",
- "luminos", "stralucitor", "radiant", "sclipitor", "măreț", "splendid", "magnific", "glorios", "sublim",
- "nobil", "onorabil", "demn", "respectuos", "politos", "curtenitor", "elegant", "rafinat", "distins",
- "înalt", "superior", "excelent", "perfect", "impecabil", "ireproșabil", "fără greșeală", "corect",
- "drept", "just", "echitabil", "imparțial", "necondiționat", "absolut", "complet", "integral", "total",
- "universal", "global", "general", "cuprinzător", "inclusiv", "extensiv", "larg", "vast", "imens",
- "profund", "intens", "puternic", "putere", "energie", "vigoare", "forță", "rezistență", "stabilitate",
- "splendidă", "liber", "calm"
- ]
- negative_words = [
- "nu", "nu sunt", "neplăcere", "disconfort", "nasol", "urăsc", "nu vreau", "obosit", "stresat",
- "frustrat", "dezamăgit", "furios", "trist", "bolnav", "plictisit", "nervos", "gelos", "invidios",
- "dezgustat", "rușinat", "vinovat", "nefericit", "nemulțumit", "neîncrezător", "pesimist", "copleșit",
- "panicat", "îngrijorat", "speriat", "timorat", "neajutorat", "slăbit", "defetist", "dezorientat",
- "confuz", "neputincios", "iritat", "agitat", "furie", "ura", "invidie", "gelozie", "dispreț",
- "mânie", "răzbunare", "frică", "teamă", "anxietate", "depresie", "tristețe", "melancolie", "apatie",
- "plictiseală", "dezinteres", "nepăsare", "indiferență", "neîncredere", "suspiciune", "îndoială",
- "necredință", "neînțelegere", "conflict", "tensiune", "presiune", "stres", "nervozitate", "iritare",
- "agresivitate", "violenta", "ostilitate", "răutate", "cruel", "malițios", "vătămător", "distructiv",
- "nociv", "periculos", "amenințător", "sinistru", "fatal", "letal", "mortal", "dăunător", "murdar", "nesatisfacut",
- "dificil", "confuz", "neliniștit", "bou", "vaca"
- ]
- # Funcție pentru a prelua textul și a efectua analiza
- def analyze():
- # Afișează mesajul de încărcare
- loading_label = tk.Label(root, text="Analiza în curs... Vă rugăm așteptați.")
- loading_label.pack(padx=10, pady=10)
- root.update_idletasks() # Actualizează interfața pentru a afișa mesajul de încărcare
- text = text_entry.get("1.0", tk.END)
- journal_entries = re.split(r'[.!?]', text)
- positive_count = 0
- negative_count = 0
- # Ascunde mesajul de încărcare
- loading_label.destroy()
- # Afisare rezultate într-o fereastră nouă
- results_window = tk.Toplevel(root)
- results_window.title("Rezultate Analiză")
- results_text = tk.Text(results_window, wrap=tk.WORD, width=80, height=20)
- results_text.pack(padx=10, pady=10)
- results_text.insert(tk.END, "Valoare Sentiment | Subiectivitate\n")
- results_text.insert(tk.END, "--------------------------------------------\n\n")
- for entry in journal_entries:
- entry = entry.strip()
- if entry:
- sentiment, subjectivity = analyze_sentiment(entry)
- results_text.insert(tk.END, entry + '\n')
- results_text.insert(tk.END, str(sentiment) + " | " + str(subjectivity) + '\n\n')
- # Contorizarea cuvintelor pozitive și negative
- for word in entry.split():
- word_without_diacritics = unidecode(word.lower())
- if any(word_without_diacritics.startswith(unidecode(w)) for w in positive_words):
- positive_count += 1
- if any(word_without_diacritics.startswith(unidecode(w)) for w in negative_words):
- negative_count += 1
- # Caracterizare persoană
- characterization = "Caracterizare persoană:\n------------------------\n"
- if positive_count > negative_count:
- characterization += "Persoana pare a fi optimistă și are o atitudine pozitivă.\n"
- elif negative_count > positive_count:
- characterization += "Persoana pare a fi pesimistă și are o atitudine negativă.\n"
- else:
- characterization += "Persoana pare a avea o atitudine echilibrată.\n"
- results_text.insert(tk.END, characterization)
- # Permiterea copierii și lipirii
- results_text.bind("<Control-c>", copy)
- results_text.bind("<Control-v>", paste)
- # Funcții pentru copiere
- def copy(event):
- widget = event.widget
- widget.clipboard_clear()
- widget.clipboard_append(widget.selection_get())
- def paste(event):
- widget = event.widget
- widget.insert(tk.INSERT, widget.clipboard_get())
- # Interfața grafică
- root = tk.Tk()
- root.title("Analiza Sentimentelor în Psihiatrie")
- text_entry = tk.Text(root, wrap=tk.WORD, width=50, height=10)
- text_entry.pack(padx=10, pady=10)
- # Permiterea copierii
- text_entry.bind("<Control-c>", copy)
- analyze_button = tk.Button(root, text="Analizează", command=analyze)
- analyze_button.pack(padx=10, pady=10)
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement