Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

libraria nu reuseste sa adauge peste tot diacritice #3

Open
me-suzy opened this issue Aug 28, 2024 · 2 comments
Open

libraria nu reuseste sa adauge peste tot diacritice #3

me-suzy opened this issue Aug 28, 2024 · 2 comments

Comments

@me-suzy
Copy link

me-suzy commented Aug 28, 2024

salut, e bine ca ai facut libraria, dar trebuie putin imbunatatita.

Mai intai, se pare ca a pus diacritice la aceste doua cuvinte: "transformand experientele". Dar restul, cele in chenar negru, nu le-a adaugat diacritice, sau nu le-a corectat. De exemplu, in loc de cuvantul "interconexiuneat" trebuia corectat "interconexiunea". Deci n-ar strica sa adaugi si un corector de cuvinte. Vezi imaginea:

image

Codul Pyton merge ! Codul scaneaza si corecteaza implicit urmatoarele taguri html:

<h1 class="den_articol" itemprop="name">(.*?)</h1>
<p class="text_obisnuit">(.*?)</p>
<p class="text_obisnuit2">(.*?)</p>

Uite codul:

import os
import re
from ro_diacritics import restore_diacritics

def process_text(text):
    # Restaurează diacriticele folosind ro-diacritics
    text_with_diacritics = restore_diacritics(text)
    return text_with_diacritics

def process_html_file(file_path, output_path):
    with open(file_path, 'r', encoding='utf-8') as file:
        content = file.read()

    # Procesează conținutul din h1
    h1_pattern = r'(<h1 class="den_articol" itemprop="name">)(.*?)(</h1>)'
    content = re.sub(h1_pattern, lambda m: m.group(1) + process_text(m.group(2)) + m.group(3), content)

    # Procesează conținutul din p cu clasa text_obisnuit2
    p_pattern = r'(<p class="text_obisnuit2">)(.*?)(</p>)'
    content = re.sub(p_pattern, lambda m: m.group(1) + process_text(m.group(2)) + m.group(3), content)

    with open(output_path, 'w', encoding='utf-8') as file:
        file.write(content)

    print(f"Fișier procesat și salvat: {output_path}")

# Directorul sursă și destinație
source_dir = r"g:\De pus pe FTP 2\66"
output_dir = os.path.join(source_dir, "Output")
os.makedirs(output_dir, exist_ok=True)

# Procesează toate fișierele HTML din director
for filename in os.listdir(source_dir):
    if filename.endswith('.html'):
        file_path = os.path.join(source_dir, filename)
        output_path = os.path.join(output_dir, filename)
        print(f"Procesare fișier: {filename}")
        process_html_file(file_path, output_path)

print("Procesarea tuturor fișierelor a fost finalizată.")
@me-suzy
Copy link
Author

me-suzy commented Aug 30, 2024

Uite un alt cod, care la fel, doar 2 cuvinte adauga diacritice, nu stiu de ce se opreste la doua cuvinte si nu pune diacritice peste tot:

import os
import re
import argparse
import logging
import warnings
from tqdm import tqdm

# Suprimă avertismentele și dezactivează mesajul de depreciere torchtext
warnings.filterwarnings("ignore", category=UserWarning)
import torchtext
torchtext.disable_torchtext_deprecation_warning()

from ro_diacritics import restore_diacritics

# Configurare logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def process_text(text):
    return restore_diacritics(text)

def process_html_file(file_path, output_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            content = file.read()

        original_content = content

        h1_pattern = r'(<h1 class="den_articol" itemprop="name">)(.*?)(</h1>)'
        content = re.sub(h1_pattern, lambda m: m.group(1) + process_text(m.group(2)) + m.group(3), content)

        p_pattern = r'(<p class="text_obisnuit2">)(.*?)(</p>)'
        content = re.sub(p_pattern, lambda m: m.group(1) + process_text(m.group(2)) + m.group(3), content)

        if content != original_content:
            with open(output_path, 'w', encoding='utf-8') as file:
                file.write(content)
            logging.debug(f"Fișier procesat și salvat: {output_path}")
            return True
        else:
            logging.debug(f"Nu s-au făcut modificări în fișierul: {file_path}")
            return False
    except Exception as e:
        logging.error(f"Eroare la procesarea fișierului {file_path}: {str(e)}")
        return False

def main(source_dir, output_dir):
    os.makedirs(output_dir, exist_ok=True)

    html_files = [f for f in os.listdir(source_dir) if f.endswith('.html')]
    total_files = len(html_files)
    processed_files = 0

    with tqdm(total=total_files, desc="Procesare fișiere") as pbar:
        for filename in html_files:
            file_path = os.path.join(source_dir, filename)
            output_path = os.path.join(output_dir, filename)
            if process_html_file(file_path, output_path):
                processed_files += 1
            pbar.update(1)

    logging.info(f"Procesare finalizată. {processed_files}/{total_files} fișiere au fost modificate.")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Restaurare diacritice în fișiere HTML")
    parser.add_argument("--source", default=r"d:\3", help="Directorul sursă")
    parser.add_argument("--output", help="Directorul de ieșire")
    args = parser.parse_args()

    output_dir = args.output if args.output else os.path.join(args.source, "Output")
    main(args.source, output_dir)

@me-suzy
Copy link
Author

me-suzy commented Aug 30, 2024

am rezolvat problema, era o chestiune de regex. Codul adaugă peste tot diacritice, mai puțin cazul în care am cuvintele: "știind ca textul", trebuia să devină: "știind textul".

De asemenea uneori, mai adaugă diacritice acolo unde nu trebuie. De exemplu: "am rezolvat problema, era o chestiune de regex" devine: "am rezolvat problemă, era o chestiune de regex".

Codul merge bine. Adauga diacritice peste tot, in toate tagurile html, cu foarte mici exceptii, cum spuneam mai sus.

import os
import re
import html
import argparse
import logging
from ro_diacritics import restore_diacritics
from tqdm import tqdm

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def decode_html_entities(text):
    return html.unescape(text)

def process_text(text):
    # Decodează entitățile HTML și aplică diacriticele
    decoded_text = decode_html_entities(text)
    return restore_diacritics(decoded_text)

def process_html_content(content):
    patterns = [
        (r'(<h1 class="den_articol" itemprop="name">)(.*?)(</h1>)', 1),
        (r'(<p class="text_obisnuit2">)(.*?)(</p>)', 1),
        (r'(<p class="text_obisnuit">)(.*?)(</p>)', 1)
    ]

    for pattern, group in patterns:
        content = re.sub(pattern,
                         lambda m: m.group(1) + process_text(m.group(2)) + m.group(3),
                         content,
                         flags=re.DOTALL)

    return content

def process_html_file(file_path, output_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            content = file.read()

        processed_content = process_html_content(content)

        if processed_content != content:
            with open(output_path, 'w', encoding='utf-8') as file:
                file.write(processed_content)
            logging.debug(f"Fișier procesat și salvat: {output_path}")
            return True
        else:
            logging.debug(f"Nu s-au făcut modificări în fișierul: {file_path}")
            return False
    except Exception as e:
        logging.error(f"Eroare la procesarea fișierului {file_path}: {str(e)}")
        return False

def main(source_dir, output_dir):
    os.makedirs(output_dir, exist_ok=True)

    html_files = [f for f in os.listdir(source_dir) if f.endswith('.html')]
    total_files = len(html_files)
    processed_files = 0

    with tqdm(total=total_files, desc="Procesare fișiere") as pbar:
        for filename in html_files:
            file_path = os.path.join(source_dir, filename)
            output_path = os.path.join(output_dir, filename)
            if process_html_file(file_path, output_path):
                processed_files += 1
            pbar.update(1)

    logging.info(f"Procesare finalizată. {processed_files}/{total_files} fișiere au fost modificate.")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Restaurare diacritice în fișiere HTML")
    parser.add_argument("--source", default=r"d:\3", help="Directorul sursă")
    parser.add_argument("--output", help="Directorul de ieșire")
    args = parser.parse_args()

    output_dir = args.output if args.output else os.path.join(args.source, "Output")
    main(args.source, output_dir)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant