Advertisement
nicuf

da

Aug 22nd, 2023 (edited)
648
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.88 KB | None | 0 0
  1. # VERSIUNEA: "Diacritice-Gata"
  2.  
  3. import tkinter as tk
  4. import re
  5. from tkinter import messagebox, simpledialog
  6. from unidecode import unidecode  # Importați unidecode
  7.  
  8. punctuation = re.compile("[:;,\.\"'”“\?!]")
  9.  
  10. # Citim cuvintele din dictionar.txt
  11. # Citim cuvintele din dictionar.txt și le convertim la lowercase
  12. with open('dictionar.txt', 'r', encoding='utf-8') as f:
  13.     dictionar = [word.lower() for word in f.read().split(', ')]
  14.  
  15. # Citim cuvintele din dictionar-2.txt și le convertim la lowercase
  16. with open('dictionar-2.txt', 'r', encoding='utf-8') as f:
  17.     dictionar_2 = [word.lower() for word in f.read().split(', ')]
  18.  
  19. def get_words(text, lower=False):
  20.     words = re.findall(r'\b\w+(?:-\w+)?\b', text)  # Ajustăm expresia regulată aici
  21.     if lower:
  22.         return [word.lower() for word in words]
  23.     return words
  24.  
  25. def replace(text, old, new):
  26.     if old[0].isupper():
  27.         new = new.capitalize()
  28.     return re.sub(r'\b' + re.escape(old) + r'\b', new, text, flags=re.IGNORECASE)
  29.  
  30. def adauga_diacritice():
  31.     # Extragem textul din widget-ul Text
  32.     text_original = text_input.get("1.0", tk.END)
  33.  
  34.     # Împărțim textul în linii
  35.     linii = text_original.split('\n')
  36.  
  37.     # Procesăm fiecare linie separat
  38.     linii_procesate = []
  39.     for linie in linii:
  40.         cuvinte_linie = re.split(r'(\W+)', linie)  # Folosim regex pentru a extrage cuvintele și semnele de punctuație separat
  41.         linie_finala = []
  42.         for cuvant in cuvinte_linie:
  43.             if cuvant and cuvant[0].isalpha():  # Verificăm dacă este cuvânt
  44.                 cuvant_fara_diacritice = unidecode(cuvant).lower()
  45.                 print(f"Verificăm cuvântul: {cuvant} ({cuvant_fara_diacritice})")
  46.                 if cuvant_fara_diacritice in dictionar_2:
  47.                     idx = dictionar_2.index(cuvant_fara_diacritice)
  48.                     cuvant_nou = dictionar[idx] if cuvant[0].islower() else dictionar[idx].capitalize()
  49.                     print(f"Înlocuim {cuvant} cu {cuvant_nou}")
  50.                     linie_finala.append(cuvant_nou)
  51.                 else:
  52.                     print(f"Cuvântul {cuvant} nu a fost găsit în dicționar.")
  53.                     linie_finala.append(cuvant)
  54.             else:
  55.                 linie_finala.append(cuvant)  # Adăugăm semnele de punctuație fără modificări
  56.         linii_procesate.append(''.join(linie_finala))
  57.  
  58.     # Construim textul final, păstrând alineatele
  59.     text_final = '\n'.join(linii_procesate)
  60.  
  61.     # Calculăm diferențele dintre textul original și cel procesat
  62.     diacritice_adaugate = sum(1 for char1, char2 in zip(text_original, text_final) if char1 != char2)
  63.     cuvinte_modificate = sum(1 for word1, word2 in zip(get_words(text_original), get_words(text_final)) if word1 != word2)
  64.  
  65.     # Ștergem conținutul actual și adăugăm textul procesat
  66.     text_input.delete("1.0", tk.END)
  67.     text_input.insert(tk.END, text_final)
  68.  
  69.     # Afișăm mesajul corespunzător
  70.     if diacritice_adaugate == 0:
  71.         messagebox.showinfo("Informare", "Nu s-au găsit diacritice de adăugat.")
  72.     else:
  73.         messagebox.showinfo("Informare", f"S-au adăugat {diacritice_adaugate} diacritice la {cuvinte_modificate} cuvinte.")
  74.  
  75.  
  76.  
  77. def elimina_sufix(cuvant):
  78.     for sufix in SUFIXE:
  79.         if cuvant.endswith(sufix):
  80.             return cuvant[:-len(sufix)]
  81.     return cuvant
  82.  
  83. def elimina_operatori(cuvant):
  84.     operatori = [":", '"', "'", ".", "”", "“", ",", ";", "?", "!"]
  85.     while cuvant and cuvant[0] in operatori:
  86.         cuvant = cuvant[1:]
  87.     while cuvant and cuvant[-1] in operatori:
  88.         cuvant = cuvant[:-1]
  89.     return cuvant
  90.  
  91. import pprint
  92.  
  93. def verifica_text(cuvinte_text):
  94.     text_input.tag_remove("evidentiat", "1.0", tk.END)
  95.     text_input.tag_remove("negasit", "1.0", tk.END)
  96.     cuvant_gasit = False
  97.  
  98.     words = get_words(text_input.get("1.0", tk.END))
  99.  
  100.     for cuv in words:
  101.         cuv_baza = elimina_sufix(cuv).lower()
  102.         cuv_baza = elimina_operatori(cuv_baza)
  103.  
  104.         if cuv_baza in CUVINTE_SARITE:
  105.             continue  # Sărim peste acest cuvânt
  106.  
  107.         pattern = re.compile(r'\b' + re.escape(cuv_baza) + r'\b')
  108.         if not any(pattern.search(d) for d in dictionar) and not any(pattern.search(d) for d in dictionar_2) and cuv_baza not in CUVINTE_ADD:
  109.             start_indices = [match.start() for match in re.finditer(r'\b' + re.escape(cuv) + r'\b', text_input.get("1.0", tk.END))]
  110.  
  111.             for start_index in start_indices:
  112.                 line_col_start = text_input.index(f"1.0 + {start_index} chars")
  113.                 line_col_end = text_input.index(f"{line_col_start} + {len(cuv)} chars")
  114.  
  115.                 if not cuvant_gasit:
  116.                     text_input.tag_add("evidentiat", line_col_start, line_col_end)
  117.                     text_input.tag_configure("evidentiat", background="yellow", font=("Arial", 12, "bold"))
  118.                     cuvant_gasit = True
  119.                     print(f"Cuvântul '{cuv}' nu a fost găsit în dicționare.")
  120.                 else:
  121.                     text_input.tag_add("negasit", line_col_start, line_col_end)
  122.                     text_input.tag_configure("negasit", foreground="red")
  123.  
  124.     if not cuvant_gasit:
  125.         messagebox.showinfo("Informare", "Totul este ok!")
  126.  
  127.  
  128.  
  129.  
  130. def modifica_cuvant():
  131.     global continut_dictionar, dictionar, dictionar_2
  132.     start_index = text_input.tag_ranges("evidentiat")[0]
  133.     end_index = text_input.tag_ranges("evidentiat")[1]
  134.     cuvant = text_input.get(start_index, end_index)
  135.  
  136.     cuvant_modificat = simpledialog.askstring("Modificare cuvânt", f"Modificați cuvântul '{cuvant}':")
  137.     if cuvant_modificat:
  138.         cuvant_modificat = elimina_sufix(cuvant_modificat).lower()
  139.         cuvant_modificat = elimina_operatori(cuvant_modificat)
  140.  
  141.         if cuvant_modificat:
  142.             text_input.delete(start_index, end_index)
  143.             text_input.insert(start_index, cuvant_modificat)
  144.             cuvant_baza = elimina_sufix(cuvant).lower()
  145.             cuvant_baza = elimina_operatori(cuvant_baza)
  146.             continut_dictionar += f", {cuvant_modificat}"
  147.             with open('dictionar.txt', 'a', encoding='utf-8') as f:
  148.                 f.write(f", {cuvant_modificat}")
  149.             if cuvant_baza in CUVINTE_ADD:
  150.                 CUVINTE_ADD.remove(cuvant_baza)
  151.  
  152.             # Adăugăm cuvântul modificat în dictionar-2.txt fără diacritice
  153.             cuvant_fara_diacritice = unidecode(cuvant_modificat)
  154.             with open('dictionar-2.txt', 'a', encoding='utf-8') as f:
  155.                 f.write(f", {cuvant_fara_diacritice}")
  156.  
  157.             # Actualizăm dicționarele globale
  158.             dictionar.append(cuvant_modificat)
  159.             dictionar_2.append(cuvant_fara_diacritice)
  160.  
  161.             # Re-verificăm textul după modificare
  162.             verifica_text(text_input.get("1.0", tk.END).split())
  163.  
  164.  
  165. def add_cuvant():
  166.     tag_ranges = text_input.tag_ranges("evidentiat")
  167.     if tag_ranges:
  168.         for start_index, end_index in zip(tag_ranges[0::2], tag_ranges[1::2]):
  169.             cuvant = text_input.get(start_index, end_index)
  170.             cuvant_baza = elimina_sufix(cuvant).lower()
  171.             cuvant_baza = elimina_operatori(cuvant_baza)
  172.  
  173.             este_inclus = False
  174.             for cuvant_existent in dictionar + dictionar_2:
  175.                 if re.search(r'\b' + re.escape(cuvant_baza) + r'\b', cuvant_existent, flags=re.IGNORECASE):
  176.                     este_inclus = True
  177.                     break
  178.  
  179.             if not este_inclus:
  180.                 CUVINTE_ADD.append(cuvant_baza)
  181.                 with open('dictionar.txt', 'a', encoding='utf-8') as f:
  182.                     f.write(f", {cuvant}")
  183.  
  184.                 # Adăugăm cuvântul add în dictionar-2.txt fără diacritice
  185.                 cuvant_fara_diacritice = unidecode(cuvant)
  186.                 with open('dictionar-2.txt', 'a', encoding='utf-8') as f:
  187.                     f.write(f", {cuvant_fara_diacritice}")
  188.  
  189.                 # Actualizăm dictionarul intern pentru a include noul cuvânt
  190.                 dictionar.append(cuvant_baza)
  191.                 dictionar_2.append(cuvant_fara_diacritice)
  192.  
  193.                 # Ștergem tag-urile de evidențiere pentru cuvantul actual
  194.                 text_input.tag_remove("evidentiat", start_index, end_index)
  195.  
  196.                 print(f"Am adăugat cuvântul '{cuvant}' în dicționar.")
  197.                 print(f"Am adăugat cuvântul '{cuvant_fara_diacritice}' în dictionar-2.txt.")
  198.  
  199.         verifica_text(text_input.get("1.0", tk.END).split())
  200.     else:
  201.         messagebox.showinfo("Eroare", "Nu există cuvinte evidențiate pentru a fi ignorate.")
  202.  
  203.  
  204.  
  205. def make_diacritic_word_dictionary():
  206.     with open("dictionar.txt", "r", encoding="utf-8") as f1, open("dictionar-2.txt", "r", encoding="utf-8") as f2:
  207.         d = get_words(f1.read(), lower=True)
  208.         d2 = get_words(f2.read(), lower=True)
  209.     return {w2: w for w, w2 in zip(d, d2) if w != w2}
  210.  
  211. plain_2_diacritic = make_diacritic_word_dictionary()
  212.  
  213. SUFIXE = ["-mi", "-a", "-ti", "-au"]
  214. CUVINTE_ADD = []
  215.  
  216. with open('dictionar.txt', 'r', encoding='utf-8') as f:
  217.     continut_dictionar = f.read().lower()
  218.  
  219.  
  220. CUVINTE_SARITE = []
  221.  
  222. def skip_cuvant():
  223.     tag_ranges = text_input.tag_ranges("evidentiat")
  224.     if tag_ranges:
  225.         start_index = tag_ranges[0]
  226.         end_index = tag_ranges[1]
  227.         cuvant_sarit = text_input.get(start_index, end_index)
  228.         CUVINTE_SARITE.append(cuvant_sarit.lower())
  229.         text_input.tag_remove("evidentiat", start_index, end_index)
  230.         verifica_text(text_input.get("1.0", tk.END).split())
  231.     else:
  232.         messagebox.showinfo("Eroare", "Nu există cuvinte evidențiate pentru a fi sărite.")
  233.  
  234.  
  235.  
  236. # inceput form
  237.  
  238.  
  239. root = tk.Tk()
  240. root.title("Adăugare Diacritice")
  241. root.geometry("600x400")
  242.  
  243. frame = tk.Frame(root, bg="lightgray")
  244. frame.pack(pady=20, fill=tk.BOTH, expand=True)
  245.  
  246. # Creăm un nou frame pentru butoane
  247. menu_frame = tk.Frame(frame, bg="lightgray")
  248. menu_frame.pack(pady=10, fill=tk.X)
  249.  
  250. btn_verifica = tk.Button(menu_frame, text="Verificare", command=lambda: verifica_text(text_input.get("1.0", tk.END).split()))
  251. btn_verifica.pack(side=tk.LEFT, padx=10)
  252.  
  253. btn_modifica = tk.Button(menu_frame, text="Modificare", command=modifica_cuvant)
  254. btn_modifica.pack(side=tk.LEFT, padx=10)
  255.  
  256. btn_add = tk.Button(menu_frame, text="Add", command=add_cuvant)
  257. btn_add.pack(side=tk.LEFT, padx=10)
  258.  
  259. btn_skip = tk.Button(menu_frame, text="Skip", command=skip_cuvant)
  260. btn_skip.pack(side=tk.LEFT, padx=10)
  261.  
  262.  
  263. btn_diacritice = tk.Button(menu_frame, text="Diacritice", command=adauga_diacritice)
  264. btn_diacritice.pack(side=tk.LEFT, padx=10)
  265.  
  266.  
  267. text_input = tk.Text(frame, height=15, width=50, wrap=tk.WORD, padx=20, pady=20)  # Adăugăm pady=20 aici
  268. text_input.pack(pady=10, side=tk.LEFT, fill=tk.BOTH, expand=True)
  269.  
  270.  
  271. scrollbar = tk.Scrollbar(frame, command=text_input.yview)
  272. scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
  273.  
  274. text_input.config(yscrollcommand=scrollbar.set)
  275.  
  276. root.mainloop()
  277.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement