Advertisement
nicuf

analyzing person psychology.html

Aug 24th, 2023 (edited)
1,119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.08 KB | None | 0 0
  1. #  ENGLISH: https://neculaifantanaru.com/en/python-analyzing-person-psychology.html
  2.  
  3. # ROMANIAN: https://neculaifantanaru.com/python-analizarea-persoanei-psihologie.html
  4.  
  5.  
  6. import tkinter as tk
  7. from textblob import TextBlob
  8. from googletrans import Translator
  9. import re
  10. from unidecode import unidecode
  11.  
  12.  
  13. # Funcție pentru analiza sentimentului și subiectivității
  14. def analyze_sentiment(text):
  15.     translator = Translator()
  16.     translated_text = translator.translate(text, src='ro', dest='en').text
  17.     blob = TextBlob(translated_text)
  18.     sentiment = blob.sentiment.polarity
  19.     subjectivity = blob.sentiment.subjectivity
  20.     return sentiment, subjectivity
  21.  
  22. # Dicționar cu cuvinte pozitive și negative
  23. positive_words = [
  24.     "da", "iubesc", "admir", "bunătate", "de acord", "fericit", "încrezător", "optimist", "satisfăcut",
  25.     "energic", "vital", "plin de viață", "entuziasmat", "mulțumit", "recunoscător", "liniștit", "relaxat",
  26.     "calm", "echilibrat", "armonios", "inspirat", "motivat", "curajos", "puternic", "rezistent", "înțelegător",
  27.     "empatic", "generos", "amabil", "prietenos", "sincronizat", "conectat", "unit", "împăcat", "acceptant",
  28.     "tolerant", "deschis", "onest", "autentic", "real", "veridic", "sincer", "franc", "direct", "clar",
  29.     "luminos", "stralucitor", "radiant", "sclipitor", "măreț", "splendid", "magnific", "glorios", "sublim",
  30.     "nobil", "onorabil", "demn", "respectuos", "politos", "curtenitor", "elegant", "rafinat", "distins",
  31.     "înalt", "superior", "excelent", "perfect", "impecabil", "ireproșabil", "fără greșeală", "corect",
  32.     "drept", "just", "echitabil", "imparțial", "necondiționat", "absolut", "complet", "integral", "total",
  33.     "universal", "global", "general", "cuprinzător", "inclusiv", "extensiv", "larg", "vast", "imens",
  34.     "profund", "intens", "puternic", "putere", "energie", "vigoare", "forță", "rezistență", "stabilitate",
  35.     "splendidă", "liber", "calm"
  36. ]
  37.  
  38. negative_words = [
  39.     "nu", "nu sunt", "neplăcere", "disconfort", "nasol", "urăsc", "nu vreau", "obosit", "stresat",
  40.     "frustrat", "dezamăgit", "furios", "trist", "bolnav", "plictisit", "nervos", "gelos", "invidios",
  41.     "dezgustat", "rușinat", "vinovat", "nefericit", "nemulțumit", "neîncrezător", "pesimist", "copleșit",
  42.     "panicat", "îngrijorat", "speriat", "timorat", "neajutorat", "slăbit", "defetist", "dezorientat",
  43.     "confuz", "neputincios", "iritat", "agitat", "furie", "ura", "invidie", "gelozie", "dispreț",
  44.     "mânie", "răzbunare", "frică", "teamă", "anxietate", "depresie", "tristețe", "melancolie", "apatie",
  45.     "plictiseală", "dezinteres", "nepăsare", "indiferență", "neîncredere", "suspiciune", "îndoială",
  46.     "necredință", "neînțelegere", "conflict", "tensiune", "presiune", "stres", "nervozitate", "iritare",
  47.     "agresivitate", "violenta", "ostilitate", "răutate", "cruel", "malițios", "vătămător", "distructiv",
  48.     "nociv", "periculos", "amenințător", "sinistru", "fatal", "letal", "mortal", "dăunător", "murdar", "nesatisfacut",
  49.     "dificil", "confuz", "neliniștit", "bou", "vaca"
  50. ]
  51.  
  52.  
  53. # Funcție pentru a prelua textul și a efectua analiza
  54. def analyze():
  55.  
  56.     # Afișează mesajul de încărcare
  57.     loading_label = tk.Label(root, text="Analiza în curs... Vă rugăm așteptați.")
  58.     loading_label.pack(padx=10, pady=10)
  59.     root.update_idletasks()  # Actualizează interfața pentru a afișa mesajul de încărcare
  60.  
  61.     text = text_entry.get("1.0", tk.END)
  62.     journal_entries = re.split(r'[.!?]', text)
  63.  
  64.     positive_count = 0
  65.     negative_count = 0
  66.  
  67.      # Ascunde mesajul de încărcare
  68.     loading_label.destroy()
  69.  
  70.     # Afisare rezultate într-o fereastră nouă
  71.     results_window = tk.Toplevel(root)
  72.     results_window.title("Rezultate Analiză")
  73.     results_text = tk.Text(results_window, wrap=tk.WORD, width=80, height=20)
  74.     results_text.pack(padx=10, pady=10)
  75.     results_text.insert(tk.END, "Valoare Sentiment        |        Subiectivitate\n")
  76.     results_text.insert(tk.END, "--------------------------------------------\n\n")
  77.     for entry in journal_entries:
  78.         entry = entry.strip()
  79.         if entry:
  80.             sentiment, subjectivity = analyze_sentiment(entry)
  81.             results_text.insert(tk.END, entry + '\n')
  82.             results_text.insert(tk.END, str(sentiment) + "                    |         " + str(subjectivity) + '\n\n')
  83.  
  84.             # Contorizarea cuvintelor pozitive și negative
  85.             for word in entry.split():
  86.                 word_without_diacritics = unidecode(word.lower())
  87.                 if any(word_without_diacritics.startswith(unidecode(w)) for w in positive_words):
  88.                     positive_count += 1
  89.                 if any(word_without_diacritics.startswith(unidecode(w)) for w in negative_words):
  90.                     negative_count += 1
  91.  
  92.     # Caracterizare persoană
  93.     characterization = "Caracterizare persoană:\n------------------------\n"
  94.     if positive_count > negative_count:
  95.         characterization += "Persoana pare a fi optimistă și are o atitudine pozitivă.\n"
  96.     elif negative_count > positive_count:
  97.         characterization += "Persoana pare a fi pesimistă și are o atitudine negativă.\n"
  98.     else:
  99.         characterization += "Persoana pare a avea o atitudine echilibrată.\n"
  100.  
  101.     results_text.insert(tk.END, characterization)
  102.  
  103.     # Permiterea copierii și lipirii
  104.     results_text.bind("<Control-c>", copy)
  105.     results_text.bind("<Control-v>", paste)
  106.  
  107. # Funcții pentru copiere
  108. def copy(event):
  109.     widget = event.widget
  110.     widget.clipboard_clear()
  111.     widget.clipboard_append(widget.selection_get())
  112.  
  113. def paste(event):
  114.     widget = event.widget
  115.     widget.insert(tk.INSERT, widget.clipboard_get())
  116.  
  117. # Interfața grafică
  118. root = tk.Tk()
  119. root.title("Analiza Sentimentelor în Psihiatrie")
  120.  
  121. text_entry = tk.Text(root, wrap=tk.WORD, width=50, height=10)
  122. text_entry.pack(padx=10, pady=10)
  123.  
  124. # Permiterea copierii
  125. text_entry.bind("<Control-c>", copy)
  126.  
  127. analyze_button = tk.Button(root, text="Analizează", command=analyze)
  128. analyze_button.pack(padx=10, pady=10)
  129.  
  130. root.mainloop()
  131.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement