Why can't it extract the data from .txt well? - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: Why can't it extract the data from .txt well? (/thread-40568.html) |
Why can't it extract the data from .txt well? - Melcu54 - Aug-20-2023 Version 1. Very good. The dictionaries are compared, and the diacritics from the first dictionary are included in the output. import tkinter as tk import re from tkinter import messagebox, simpledialog from unidecode import unidecode # Importați unidecode # Presupunem că avem următoarele liste: dictionar = ["înţeleasă", "Eului", "misterului"] # și așa mai departe dictionar_2 = ["inteleasa", "Eului", "misterului"] # și așa mai departe text = "Fiind inteleasa identitate dintre planul Eului ... " # și așa mai departe # Parcurgem fiecare cuvânt din dictionar_2 for idx, cuvant in enumerate(dictionar_2): # Înlocuim cuvântul fără diacritice cu cel cu diacritice text = text.replace(cuvant, dictionar[idx]) print(text)In the following code, I want to do the same thing as in the first code, only by extracting data from .txt that contain the same words: import tkinter as tk import re from tkinter import messagebox, simpledialog from unidecode import unidecode # Importați unidecode # Citim cuvintele din dictionar.txt with open('dictionar.txt', 'r', encoding='utf-8') as f: dictionar = f.read().splitlines() # Citim cuvintele din dictionar-2.txt with open('dictionar-2.txt', 'r', encoding='utf-8') as f: dictionar_2 = f.read().splitlines() text = "Fiind inteleasa identitate dintre planul Eului ... " # și așa mai departe # Parcurgem fiecare cuvânt din dictionar_2 for idx, cuvant in enumerate(dictionar_2): # Verificăm dacă cuvântul fără diacritice există în text if cuvant in text: # Înlocuim cuvântul fără diacritice cu cel cu diacritice text = text.replace(cuvant, dictionar[idx]) print(f"Înlocuit {cuvant} cu {dictionar[idx]}") print("Textul inițial:", "Fiind inteleasa identitate dintre planul Eului ... ") print("Textul final:", text)In dictionary.txt I have the words: Fiind, înţeleasă, identitate, dintre, planul, Eului, cel, misterului, substanţa, creaţiei, întemeiază, proces, simbolizare, realităţii, cuprinse, specifice, zonei, aflu, scoici, fosile, melci, alge, aduse, ţărm, bucăţele, sticlă, mării, şlefuieşte, timp, şezlonguri, umbrele, vânzători, ambulanți, activități, nautice, șiIn dictionary-2.txt I have the same words, but without diacritics: Fiind, inteleasa, identitate, dintre, planul, Eului, cel, misterului, substanta, creatiei, intemeiaza, proces, simbolizare, realitatii, cuprinse, specifice, zonei, aflu, scoici, fosile, melci, alge, aduse, tarm, bucatele, sticla, marii, slefuieste, timp, sezlonguri, umbrele, vanzatori, ambulanti, activitati, nautice, siThe output should be: (word "înţeleasă" with diacritics) Fiind înţeleasă identitate dintre planul Eului RE: Why can't it extract the data from .txt well? - Melcu54 - Aug-20-2023 This seems to be good import tkinter as tk from unidecode import unidecode import re # Citim cuvintele din dictionar.txt with open('dictionar.txt', 'r', encoding='utf-8') as f: dictionar = f.read().split(', ') # Citim cuvintele din dictionar-2.txt with open('dictionar-2.txt', 'r', encoding='utf-8') as f: dictionar_2 = f.read().split(', ') def adauga_diacritice(): # Extragem textul din widget-ul Text text = text_input.get("1.0", tk.END) # Împărțim textul în linii linii = text.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_fara_diacritice}") if cuvant_fara_diacritice in dictionar_2: idx = dictionar_2.index(cuvant_fara_diacritice) if cuvant[0].isupper(): linie_finala.append(dictionar[idx].capitalize()) else: linie_finala.append(dictionar[idx]) else: 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) # Ștergem conținutul actual și adăugăm textul procesat text_input.delete("1.0", tk.END) text_input.insert(tk.END, text_final) root = tk.Tk() root.title("Adăugare Diacritice") text_input = tk.Text(root, height=20, width=50) text_input.pack(pady=20) btn_diacritice = tk.Button(root, text="Diacritice", command=adauga_diacritice) btn_diacritice.pack(side=tk.LEFT, padx=10) root.mainloop() RE: Why can't it extract the data from .txt well? - noisefloor - Aug-20-2023 Hello, and the questions is...? It's missing in your original post. If something doesn't worl as you expect, please describe what doesn't work and what you get as a result. Regards, noisefloor RE: Why can't it extract the data from .txt well? - deanhystad - Aug-20-2023 What is going on here? You already answered these questions here: https://python-forum.io/thread-40556.html What am I missing? Is the problem that the words are separated by commas and whitespace? This is actually a much simpler problem than you had in the other thread. You can use the same mechanism as before, but use a different regex pattern. You could also treat the file as a csv, and split the file on commas (Comma Separated Values). If going the CSV route you'll probably have to set some parameter in the csv read function to remove the extra spaces. import csv from io import StringIO dictionar_2 = StringIO("Fiind, inteleasa, identitate, dintre, planul, Eului, cel, misterului") reader = csv.reader(dictionar_2, skipinitialspace=True) print(*reader) Be aware that "not whitespace" may not be what you expect:import re print(re.split("\W+", "This doesn't handle contractions or punctuation well."))
|