Python Forum
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, și
In 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, si
The 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)
Output:
['Fiind', 'inteleasa', 'identitate', 'dintre', 'planul', 'Eului', 'cel', 'misterului']
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."))
Output:
['This', 'doesn', 't', 'handle', 'contractions', 'or', 'punctuation', 'well', '']