Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import os
- import re
- import docx
- import unidecode
- import unicodedata
- from docx import Document
- from docx.enum.text import WD_PARAGRAPH_ALIGNMENT
- # Funcția pentru adăugarea conținutului la tag-ul meta
- def add_content_to_meta(html_content, content_to_add):
- meta_pattern = r'<meta name="description" content="(.*?)">'
- match = re.search(meta_pattern, html_content)
- if match:
- old_meta_tag = match.group(0)
- # Elimină ghilimelele din conținutul tag-ului meta
- new_content = re.sub(r'"', '', content_to_add)
- new_meta_tag = f'<meta name="description" content="{new_content}">'
- updated_html_content = html_content.replace(old_meta_tag, new_meta_tag)
- return updated_html_content
- else:
- return html_content
- # Funcția pentru conversia stilurilor paragrafelor din DOCX în HTML
- def extract_data_from_docx(file_path):
- doc = Document(file_path)
- content = ""
- # Parcurge toate paragrafele din document și le adaugă la conținut
- for paragraph in doc.paragraphs:
- content += paragraph.text + "\n"
- # Utilizăm regex pentru a găsi titlurile și corpul fiecărui articol
- # Am modificat regex-ul pentru a include ghilimele
- articles = re.split(r'^([A-Z][\w\s’\-\(\)""]+)$', content, flags=re.MULTILINE | re.DOTALL)
- articles = [article.strip() for article in articles if article.strip()]
- data = []
- # Iterăm prin lista de articole pentru a extrage titlul și corpul corespunzător
- for i in range(0, len(articles), 2):
- title = articles[i]
- body = articles[i + 1].strip().split("\n")
- data.append((title, body))
- return data
- # Funcția pentru înlocuirea diacriticelor cu echivalente HTML
- def replace_diacritics_with_html_entities(text):
- # Creează un dicționar cu caracterele diacritice și echivalentele lor HTML
- diacritics_mapping = {
- 'ă': 'ă',
- 'â': 'â',
- 'ș': 'ş',
- 'ț': 'ţ',
- 'î': 'î',
- 'â': 'â',
- 'ș': 'ş',
- 'ț': 'ţ',
- 'ă': 'ă',
- 'î': 'î',
- 'â': 'â',
- 'ț': 'ţ',
- 'ș': 'ş',
- 'â': 'â',
- 'ă': 'ă',
- 'ș': 'ş',
- 'ț': 'ţ',
- 'î': 'î',
- 'î': 'î',
- 'â': 'â',
- 'ă': 'ă',
- 'ș': 'ş',
- 'ț': 'ţ',
- 'î': 'î',
- 'â': 'â',
- 'ă': 'ă',
- 'ș': 'ş',
- 'ț': 'ţ',
- 'î': 'î',
- 'ș': 'ş',
- 'ț': 'ţ',
- 'â': 'â',
- 'ă': 'ă',
- 'î': 'î',
- 'â': 'â',
- 'ș': 'ş',
- 'ț': 'ţ',
- 'Ă': 'Ă',
- 'Â': 'Â',
- 'Ș': 'Ş',
- 'Ț': 'Ţ',
- 'Î': 'Î',
- 'Î': 'Î',
- 'Â': 'Â',
- 'Ă': 'Ă',
- 'Ș': 'Ş',
- 'Ț': 'Ţ',
- }
- # Înlocuiește caracterele diacritice cu echivalentele lor HTML
- for diacritic, html_entity in diacritics_mapping.items():
- text = text.replace(diacritic, html_entity)
- return text
- def run_get_style(run) -> str:
- if run.bold:
- return "bold"
- elif run.italic:
- return "italic"
- else:
- return "normal"
- def convert_docx_to_html_with_styles(document: docx.Document, output_file: str) -> None:
- with open(output_file, "w") as f:
- f.write("<html>\n<body>\n")
- current_style = None
- for paragraph in document.paragraphs:
- runs = paragraph.runs
- if not runs:
- continue
- for run in runs:
- run_style = run_get_style(run)
- print(f"Run text: {run.text}, Style: {run_style}") # Adăugăm instrucțiunea de print pentru debug
- if run_style == current_style:
- if run.bold:
- f.write("<b>")
- if run.italic:
- f.write("<em>")
- f.write(run.text)
- else:
- if current_style:
- if current_style == "bold":
- f.write("</b>")
- if current_style == "italic":
- f.write("</em>")
- if run.bold:
- f.write("<b>")
- if run.italic:
- f.write("<em>")
- f.write(run.text)
- current_style = run_style
- if current_style:
- if current_style == "bold":
- f.write("</b>")
- if current_style == "italic":
- f.write("</em>")
- current_style = None
- f.write("<br>\n") # Adăugăm un salt de linie între paragrafe
- f.write("</body>\n</html>")
- # Funcția pentru generarea numelui de fișier bazat pe titlu
- def generate_filename(title):
- # Îndepărtează spațiile și caracterele speciale din titlu
- title = title.strip()
- title = re.sub(r'’s|’t', '', title)
- title = re.sub(r'[^\w\s-]', '', title) # Înlocuiește caracterele speciale cu "" (nimic) în loc de "-"
- title = re.sub(r'[-\s]+', '-', title) # Îndepărtează secvențele consecutive de "-" și spații
- # Transformă titlul în litere mici
- title = title.lower()
- # Transformă diacriticele în litere normale
- title = ''.join(c for c in unicodedata.normalize('NFD', title) if unicodedata.category(c) != 'Mn')
- # Asigură că numele fișierului are o extensie .html
- filename = title + ".html"
- print("Filename:", filename) # Afișează numele fișierului
- return filename
- # Funcția pentru formatarea titlului cu litere mari în fiecare cuvânt
- def format_title(title):
- words = title.split()
- formatted_words = [word.capitalize() for word in words]
- formatted_title = " ".join(formatted_words)
- return formatted_title
- # Funcția pentru actualizarea și salvarea fișierelor HTML
- def update_and_save_html(title, body, template_path, output_directory):
- with open(template_path, "r", encoding="utf-8") as f:
- html_content = f.read()
- # Eliminarea sufixului " | Neculai Fantanaru (en)" din titlu
- title_without_suffix = title.replace(" | Neculai Fantanaru", "")
- # Formatează titlul cu prima literă mare în fiecare cuvânt
- formatted_title = format_title(title_without_suffix)
- # Înlocuirea titlului în tagul <h1> cu titlul fără sufix
- html_content = html_content.replace('<h1 class="den_articol" itemprop="name">XXX</h1>', f'<h1 class="den_articol" itemprop="name">{formatted_title}</h1>')
- # Înlocuirea titlului în conținutul HTML
- new_title = title + " | Neculai Fantanaru"
- html_content = html_content.replace("XXX", new_title, 2)
- print("Titlul a fost înlocuit.")
- # Formatează titlul pentru tag-ul <title> cu prima literă mare în fiecare cuvânt
- formatted_title_words = [word.capitalize() for word in new_title.split()]
- formatted_title_for_title_tag = ' '.join(formatted_title_words)
- # Înlocuirea titlului în tag-ul <title>
- html_content = re.sub(r'<title>.*?</title>', f'<title>{formatted_title_for_title_tag}</title>', html_content)
- # Extrage conținutul paragrafelor cu clasa "text_obisnuit2"
- content_to_add = ""
- paragraphs = re.findall(r'<p class="text_obisnuit2">(.*?)</p>', html_content)
- for paragraph in paragraphs:
- content_to_add += paragraph.strip() + ' '
- # Elimină tag-urile <em> din conținutul adăugat
- content_to_add_cleaned = re.sub(r'<em>(.*?)</em>', r'\1', content_to_add)
- # Înlocuiește caracterele diacritice cu echivalentele lor HTML în conținutul paragrafelor
- for i in range(len(body)):
- body[i] = replace_diacritics_with_html_entities(body[i])
- # Adaugă conținutul curățat la tag-ul meta
- updated_html_content = add_content_to_meta(html_content, content_to_add_cleaned)
- # Elimină linia care conține <!-- SASA-1 --> din conținutul HTML
- updated_html_content = updated_html_content.replace("<!-- SASA-1 -->", "")
- # Elimină linia care conține <!-- SASA-2 --> din conținutul HTML
- updated_html_content = updated_html_content.replace("<!-- SASA-2 -->", "")
- # Actualizează fișierul HTML cu conținutul adăugat
- html_file_path = os.path.join(output_directory, generate_filename(title))
- with open(html_file_path, "w", encoding="utf-8") as updated_html_file:
- updated_html_file.write(updated_html_content)
- print("Conținutul a fost adăugat la tag-ul meta în fiecare fișier HTML, eliminând tag-urile <em>.")
- # Găsirea poziției de început și sfârșit a blocului YYY
- start_marker = "<!-- SASA-1 -->"
- end_marker = "<!-- SASA-2 -->"
- start = html_content.find(start_marker)
- end = html_content.find(end_marker)
- if start != -1 and end != -1:
- # Înlocuirea blocului YYY cu conținutul articolului, respectând formatarea cerințelor
- article_content = ""
- first_sentence = True
- for line in body:
- line = line.strip()
- # Începe prima propoziție cu <p class="text_obisnuit2">
- if first_sentence:
- article_content += f'\n\t<p class="text_obisnuit2"><em>{line}</em></p>'
- first_sentence = False
- elif line.startswith("Leadership:"):
- article_content += f'\n\t<p class="text_obisnuit2">{line}</p>'
- else:
- article_content += f'\n\t<p class="text_obisnuit">{line}</p>'
- html_content = html_content[:start + len(start_marker)] + article_content + html_content[end:]
- print("Corpul articolului a fost înlocuit conform cerințelor.")
- # Integrarea stilurilor de paragrafe din DOCX în HTML
- doc = Document("bebe.docx")
- convert_docx_to_html_with_styles(doc, html_file_path)
- # html_content = html_content.replace("<p class=\"text_obisnuit\">{}</p>".format(para.text), html_style)
- # Eliminarea caracterelor speciale folosind unidecode
- html_content = unidecode.unidecode(html_content)
- # Crearea numelui de fișier bazat pe titlu
- filename = generate_filename(title)
- # Înlocuirea "zzz.html" cu numele fișierului generat în fiecare fișier HTML
- html_content = html_content.replace("zzz.html", filename)
- # Salvarea modificărilor în UTF-8
- with open(os.path.join(output_directory, filename), "w", encoding="utf-8") as f:
- f.write(html_content)
- print(f"Fișierul a fost salvat ca {filename}")
- # Extragem datele din bebe.docx
- articles_data = extract_data_from_docx("bebe.docx")
- # Specifică directorul în care dorești să salvezi fișierele HTML
- output_directory = "output"
- # Funcția pentru eliminarea marcatorilor SASA
- def remove_sasa_markers(html_content):
- # Găsește poziția de început a <!-- SASA-1 -->
- start_marker = "<!-- SASA-1 -->"
- start = html_content.find(start_marker)
- print(f"Poziția de început a <!-- SASA-1 -->: {start}")
- # Găsește poziția de sfârșit a <!-- SASA-2 -->
- end_marker = "<!-- SASA-2 -->"
- end = html_content.find(end_marker)
- print(f"Poziția de sfârșit a <!-- SASA-2 -->: {end}")
- # Verifică dacă ambele marcatori au fost găsiți
- if start != -1 and end != -1:
- # Elimină întreaga secțiune care conține marcatorii
- removed_content = html_content[:start] + html_content[end + len(end_marker):]
- return removed_content
- else:
- # Dacă unul dintre marcatori lipsește, returnează conținutul original
- return html_content
- # Actualizăm și salvăm fiecare articol într-un fișier HTML separat
- for title, body in articles_data:
- update_and_save_html(title, body, "index-ro.html", output_directory)
- # Deschide fișierul HTML pentru actualizare
- html_file_path = os.path.join(output_directory, generate_filename(title))
- with open(html_file_path, "r", encoding="utf-8") as html_file:
- html_content = html_file.read()
- # Colectează conținutul paragrafelor cu clasa "text_obisnuit2"
- content_to_add = ""
- paragraphs = re.findall(r'<p class="text_obisnuit2">(.*?)</p>', html_content)
- for paragraph in paragraphs:
- content_to_add += paragraph.strip() + ' '
- # Elimină tag-urile <em> din conținutul adăugat
- content_to_add_cleaned = re.sub(r'<em>(.*?)</em>', r'\1', content_to_add)
- # Adaugă conținutul curățat la tag-ul meta
- updated_html_content = add_content_to_meta(html_content, content_to_add_cleaned)
- # Elimină linia care conține <!-- SASA-1 --> din conținutul HTML
- updated_html_content = updated_html_content.replace("<!-- SASA-1 -->", "")
- # Elimină linia care conține <!-- SASA-2 --> din conținutul HTML
- updated_html_content = updated_html_content.replace("<!-- SASA-2 -->", "")
- # Actualizează fișierul HTML cu conținutul adăugat
- with open(html_file_path, "w", encoding="utf-8") as updated_html_file:
- updated_html_file.write(updated_html_content)
- print("Conținutul a fost adăugat la tag-ul meta în fiecare fișier HTML, eliminând tag-urile <em>.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement