Neculai Fantanaru

Totul depinde de cine conduce

Python: Diakritiese tekens (àâîșt) - skakel woorde outomaties om na teks met diakritiese tekens

On August 20, 2023
, in
Python Scripts Examples by Neculai Fantanaru

Jy kan die hele kode hier bekyk: https://pastebin.com/8j96Q4sN

diacritics

Verifieer - Kyk of die woorde in dictionary.txt en in dictionary-2.txt bestaan

Modificare - (After pressing the Check button) Edit the word and save it in both dictionaries.

Skip - (After pressing the Check button) - Automatically saves the word in both dictionaries.

Diacritice - Add diacritics to the text. Look for the words that exist in both dictionaries, compare them, and depending on the differences, add diacritics.

-------------------------

dictionar.txt - It includes all the words, separated by a comma, including those which contain diacritics. Examples of words from dictionary.txt:

să, de, trebuie, leadershipul, se, ghideze, după, calitate, următorul, principiu, sufletească, inimă

dictionar.txt - It contains exactly the same words from dictionary.txt, separated by a comma, but which do not contain diacritics. Examples of words from dictionary.txt:

sa, de, trebuie, leadershipul, se, ghideze, dupa, calitate, urmatorul, principiu, sufleteasca, inima

# VERSIUNEA: "Diacritice-Gata"
import tkinter as tk
import re
from tkinter import messagebox, simpledialog
from unidecode import unidecode  # Importați unidecode
punctuation = re.compile("[:;,\.\"'\?!]")
# Citim cuvintele din dictionar.txt
# Citim cuvintele din dictionar.txt și le convertim la lowercase
with open('dictionar.txt', 'r', encoding='utf-8') as f:
   dictionar = [word.lower() for word in f.read().split(', ')]
# Citim cuvintele din dictionar-2.txt și le convertim la lowercase
with open('dictionar-2.txt', 'r', encoding='utf-8') as f:
   dictionar_2 = [word.lower() for word in f.read().split(', ')]
def get_words(text, lower=False):
   words = re.findall(r'\b\w+(?:-\w+)?\b', text)  # Ajustăm expresia regulată aici
   if lower:
       return [word.lower() for word in words]
   return words
def replace(text, old, new):
   if old[0].isupper():
       new = new.capitalize()
   return re.sub(r'\b' + re.escape(old) + r'\b', new, text, flags=re.IGNORECASE)
def adauga_diacritice():
   # Extragem textul din widget-ul Text
   text_original = text_input.get("1.0", tk.END)
   # Împărțim textul în linii
   linii = text_original.split('\n')
   # Procesăm fiecare linie separat
   linii_procesate = []
   for linie in linii:
       cuvinte_linie = re.split(r'(\W+)', linie)  # Folosim regex pentru a extrage cuvintele și semnele de punctuație separat
       linie_finala = []
       for cuvant in cuvinte_linie:
           if cuvant and cuvant[0].isalpha():  # Verificăm dacă este cuvânt
               cuvant_fara_diacritice = unidecode(cuvant).lower()
               print(f"Verificăm cuvântul: {cuvant} ({cuvant_fara_diacritice})")
               if cuvant_fara_diacritice in dictionar_2:
                   idx = dictionar_2.index(cuvant_fara_diacritice)
                   cuvant_nou = dictionar[idx] if cuvant[0].islower() else dictionar[idx].capitalize()
                   print(f"Înlocuim {cuvant} cu {cuvant_nou}")
                   linie_finala.append(cuvant_nou)
               else:
                   print(f"Cuvântul {cuvant} nu a fost găsit în dicționar.")
                   linie_finala.append(cuvant)
           else:
               linie_finala.append(cuvant)  # Adăugăm semnele de punctuație fără modificări
       linii_procesate.append(''.join(linie_finala))
   # Construim textul final, păstrând alineatele
   text_final = '\n'.join(linii_procesate)
   # Calculăm diferențele dintre textul original și cel procesat
   diacritice_adaugate = sum(1 for char1, char2 in zip(text_original, text_final) if char1 != char2)
   cuvinte_modificate = sum(1 for word1, word2 in zip(get_words(text_original), get_words(text_final)) if word1 != word2)
   # Ștergem conținutul actual și adăugăm textul procesat
   text_input.delete("1.0", tk.END)
   text_input.insert(tk.END, text_final)
   # Afișăm mesajul corespunzător
   if diacritice_adaugate == 0:
       messagebox.showinfo("Informare", "Nu s-au găsit diacritice de adăugat.")
   else:
       messagebox.showinfo("Informare", f"S-au adăugat {diacritice_adaugate} diacritice la {cuvinte_modificate} cuvinte.")
def elimina_sufix(cuvant):
   for sufix in SUFIXE:
       if cuvant.endswith(sufix):
           return cuvant[:-len(sufix)]
   return cuvant
def elimina_operatori(cuvant):
   operatori = [":", '"', "'", ".", "", "", ",", ";", "?", "!"]
   while cuvant and cuvant[0] in operatori:
       cuvant = cuvant[1:]
   while cuvant and cuvant[-1] in operatori:
       cuvant = cuvant[:-1]
   return cuvant
import pprint
def verifica_text(cuvinte_text):
   text_input.tag_remove("evidentiat", "1.0", tk.END)
   text_input.tag_remove("negasit", "1.0", tk.END)
   cuvant_gasit = False
   words = get_words(text_input.get("1.0", tk.END))
   for cuv in words:
       cuv_baza = elimina_sufix(cuv).lower()
       cuv_baza = elimina_operatori(cuv_baza)
       if cuv_baza in CUVINTE_SARITE:
           continue  # Sărim peste acest cuvânt
       pattern = re.compile(r'\b' + re.escape(cuv_baza) + r'\b')
       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:
           start_indices = [match.start() for match in re.finditer(r'\b' + re.escape(cuv) + r'\b', text_input.get("1.0", tk.END))]
           for start_index in start_indices:
               line_col_start = text_input.index(f"1.0 + {start_index} chars")
               line_col_end = text_input.index(f"{line_col_start} + {len(cuv)} chars")
               if not cuvant_gasit:
                   text_input.tag_add("evidentiat", line_col_start, line_col_end)
                   text_input.tag_configure("evidentiat", background="yellow", font=("Arial", 12, "bold"))
                   cuvant_gasit = True
                   print(f"Cuvântul '{cuv}' nu a fost găsit în dicționare.")
               else:
                   text_input.tag_add("negasit", line_col_start, line_col_end)
                   text_input.tag_configure("negasit", foreground="red")
   if not cuvant_gasit:
       messagebox.showinfo("Informare", "Totul este ok!")
def modifica_cuvant():
   global continut_dictionar, dictionar, dictionar_2
   start_index = text_input.tag_ranges("evidentiat")[0]
   end_index = text_input.tag_ranges("evidentiat")[1]
   cuvant = text_input.get(start_index, end_index)
   cuvant_modificat = simpledialog.askstring("Modificare cuvânt", f"Modificați cuvântul '{cuvant}':")
   if cuvant_modificat:
       cuvant_modificat = elimina_sufix(cuvant_modificat).lower()
       cuvant_modificat = elimina_operatori(cuvant_modificat)
       if cuvant_modificat:
           text_input.delete(start_index, end_index)
           text_input.insert(start_index, cuvant_modificat)
           cuvant_baza = elimina_sufix(cuvant).lower()
           cuvant_baza = elimina_operatori(cuvant_baza)
           continut_dictionar += f", {cuvant_modificat}"
           with open('dictionar.txt', 'a', encoding='utf-8') as f:
               f.write(f", {cuvant_modificat}")
           if cuvant_baza in CUVINTE_ADD:
               CUVINTE_ADD.remove(cuvant_baza)
           # Adăugăm cuvântul modificat în dictionar-2.txt fără diacritice
           cuvant_fara_diacritice = unidecode(cuvant_modificat)
           with open('dictionar-2.txt', 'a', encoding='utf-8') as f:
               f.write(f", {cuvant_fara_diacritice}")
           # Actualizăm dicționarele globale
           dictionar.append(cuvant_modificat)
           dictionar_2.append(cuvant_fara_diacritice)
           # Re-verificăm textul după modificare
           verifica_text(text_input.get("1.0", tk.END).split())
def add_cuvant():
   tag_ranges = text_input.tag_ranges("evidentiat")
   if tag_ranges:
       for start_index, end_index in zip(tag_ranges[0::2], tag_ranges[1::2]):
           cuvant = text_input.get(start_index, end_index)
           cuvant_baza = elimina_sufix(cuvant).lower()
           cuvant_baza = elimina_operatori(cuvant_baza)
           este_inclus = False
           for cuvant_existent in dictionar + dictionar_2:
               if re.search(r'\b' + re.escape(cuvant_baza) + r'\b', cuvant_existent, flags=re.IGNORECASE):
                   este_inclus = True
                   break
           if not este_inclus:
               CUVINTE_ADD.append(cuvant_baza)
               with open('dictionar.txt', 'a', encoding='utf-8') as f:
                   f.write(f", {cuvant}")
               # Adăugăm cuvântul add în dictionar-2.txt fără diacritice
               cuvant_fara_diacritice = unidecode(cuvant)
               with open('dictionar-2.txt', 'a', encoding='utf-8') as f:
                   f.write(f", {cuvant_fara_diacritice}")
               # Actualizăm dictionarul intern pentru a include noul cuvânt
               dictionar.append(cuvant_baza)
               dictionar_2.append(cuvant_fara_diacritice)
               # Ștergem tag-urile de evidențiere pentru cuvantul actual
               text_input.tag_remove("evidentiat", start_index, end_index)
               print(f"Am adăugat cuvântul '{cuvant}' în dicționar.")
               print(f"Am adăugat cuvântul '{cuvant_fara_diacritice}' în dictionar-2.txt.")
       verifica_text(text_input.get("1.0", tk.END).split())
   else:
       messagebox.showinfo("Eroare", "Nu există cuvinte evidențiate pentru a fi ignorate.")
def make_diacritic_word_dictionary():
   with open("dictionar.txt", "r", encoding="utf-8") as f1, open("dictionar-2.txt", "r", encoding="utf-8") as f2:
       d = get_words(f1.read(), lower=True)
       d2 = get_words(f2.read(), lower=True)
   return {w2: w for w, w2 in zip(d, d2) if w != w2}
plain_2_diacritic = make_diacritic_word_dictionary()
SUFIXE = ["-mi", "-a", "-ti", "-au"]
CUVINTE_ADD = []
with open('dictionar.txt', 'r', encoding='utf-8') as f:
   continut_dictionar = f.read().lower()
CUVINTE_SARITE = []
def skip_cuvant():
   tag_ranges = text_input.tag_ranges("evidentiat")
   if tag_ranges:
       start_index = tag_ranges[0]
       end_index = tag_ranges[1]
       cuvant_sarit = text_input.get(start_index, end_index)
       CUVINTE_SARITE.append(cuvant_sarit.lower())
       text_input.tag_remove("evidentiat", start_index, end_index)
       verifica_text(text_input.get("1.0", tk.END).split())
   else:
       messagebox.showinfo("Eroare", "Nu există cuvinte evidențiate pentru a fi sărite.")
# inceput form
root = tk.Tk()
root.title("Adăugare Diacritice")
root.geometry("600x400")
frame = tk.Frame(root, bg="lightgray")
frame.pack(pady=20, fill=tk.BOTH, expand=True)
# Creăm un nou frame pentru butoane
menu_frame = tk.Frame(frame, bg="lightgray")
menu_frame.pack(pady=10, fill=tk.X)
btn_verifica = tk.Button(menu_frame, text="Verificare", command=lambda: verifica_text(text_input.get("1.0", tk.END).split()))
btn_verifica.pack(side=tk.LEFT, padx=10)
btn_modifica = tk.Button(menu_frame, text="Modificare", command=modifica_cuvant)
btn_modifica.pack(side=tk.LEFT, padx=10)
btn_add = tk.Button(menu_frame, text="Add", command=add_cuvant)
btn_add.pack(side=tk.LEFT, padx=10)
btn_skip = tk.Button(menu_frame, text="Skip", command=skip_cuvant)
btn_skip.pack(side=tk.LEFT, padx=10)
btn_diacritice = tk.Button(menu_frame, text="Diacritice", command=adauga_diacritice)
btn_diacritice.pack(side=tk.LEFT, padx=10)
text_input = tk.Text(frame, height=15, width=50, wrap=tk.WORD, padx=20, pady=20)  # Adăugăm pady=20 aici
text_input.pack(pady=10, side=tk.LEFT, fill=tk.BOTH, expand=True)
scrollbar = tk.Scrollbar(frame, command=text_input.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
text_input.config(yscrollcommand=scrollbar.set)
root.mainloop()


That's all folks.


Sien ook my ander Python Scripts ---HIER---

Alatura-te Comunitatii Neculai Fantanaru
Die 63 eienskappe van 'n leier
Cele 63 de calităţi ale liderului

Hoekom moet hoeveel lees jy dit? boek? Omdat is van kardinale belang vir die optimalisering van jou prestasie. Synde plaas meer klem op die menslike kant & # 259; eerder as op die sakekonsep, wat maklik toelaat lees en verstaan dit.

Leierskap - Magia măiestriei
Leadership - Magia măiestriei

Die noodsaaklike trein van hierdie pad, faţă van ander wat op die mark bestaanţă uit daardie veld, dit is dit beskryf, met voorbeelde, die ideale bevoegdhede van 'n leier. Ek het nog nooit ondersteun nie c & # 259; dit is maklik om jy word 'n baie goeie leier, maar asă jy sal stap vir stap volg...

Die aanraking van die meester
Atingerea maestrului

Vir sommige leiers “leier” îmeană meer om 'n speletjie van şag, 'n spel van verstandţă şen insig; vir ander 'n kansspel, 'n speletjie wat ek dink ek kan wen elke keer as ek gaan. in gevaar şen wed alles op eenă boek.

Uitvoerderţn în direkteur
Leierskap - Op î nie almal se keuse nie

Die doel van hierdie boek is om jou te wys soveel waardevolle inligting as moontlik te bied deur middel van konkrete voorbeelde, en om daar sou 'n manier wees om hy het ook die vermoë gekry om ander te bepaal en om ek sienă dinge vanuit daardie perspektief hou van jou.

Leiderska - Verkies deur almal
Leierskap - Aan ˆ in elkeen se keuse

Ek volg in die geledere van hierdie bevel om wek die gewone mens se belangstelling in aksie en sukses. Die boodskap van hierdie bundel is dat 'n sterk nasie dit bestaan uit sterk en suksesvolle mense. En elkeen van ons het potensiaal, so sukses…