Advertisement
nicuf

split paragraph 250 characters

May 2nd, 2022
1,069
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.01 KB | None | 0 0
  1. -----------------------------
  2. EXPLANATION:
  3.  
  4. ENGLISH: https://neculaifantanaru.com/en/python-split-the-text-by-a-certain-number-of-characters-in-an-html-paragraph.html
  5. ROMANIAN: https://neculaifantanaru.com/python-imparte-textul-dupa-un-anumit-numar-de-caractere-intr-un-paragraf-html.html
  6. -----------------------------
  7.  
  8.  
  9. import requests
  10. import re
  11. import os
  12. import nltk
  13. from nltk import tokenize
  14.  
  15. cale_folder_html = r"e:Test"
  16. extension_file = ".html"
  17.  
  18. def read_text_from_file(file_path):
  19.     """
  20.    Aceasta functie returneaza continutul unui fisier.
  21.    file_path: calea catre fisierul din care vrei sa citesti
  22.    """
  23.     with open(file_path, encoding='utf8') as f:
  24.         text = f.read()
  25.         return text
  26.  
  27.  
  28. def write_to_file(text, file_path):
  29.     """
  30.    Aceasta functie scrie un text intr-un fisier.
  31.    text: textul pe care vrei sa il scrii
  32.    file_path: calea catre fisierul in care vrei sa scrii
  33.    """
  34.     with open(file_path, 'wb') as f:
  35.         f.write(text.encode('utf8', 'ignore'))
  36.  
  37.  
  38. print('Going through folder')
  39. amount = 0
  40.  
  41. for filename in os.listdir(cale_folder_html):
  42.         if filename == 'y_key_e479323ce281e459.html' or filename == 'directory.html':
  43.             continue
  44.         if filename.endswith(extension_file):
  45.             cale_fisier_html = cale_folder_html + "\\" + filename
  46.             html_text = read_text_from_file(cale_fisier_html)
  47.             articol_pattern = re.compile('<!-- ARTICOL START -->([\s\S]*?)<!-- ARTICOL FINAL -->[\s\S]*?')
  48.             articol_text = re.findall(articol_pattern, html_text)
  49.  
  50.             if len(articol_text) > 0:
  51.                 articol_text = articol_text[0]
  52.                 p_pattern = re.compile('<p class="text_obisnuit">(.*?)</p>')
  53.                 paragrafe = re.findall(p_pattern, articol_text)
  54.  
  55.                 # aici impartim fiecare paragraf in paragrafe mai mici daca depasesc o anumita limita de caractere
  56.                 paragrafe_split = list()
  57.                 pattern_paragraf_nou = '<p class="text_obisnuit">{}</p>'
  58.  
  59.                 limita_caractere =  250
  60.                 for p in paragrafe:
  61.                     if (len(p) > 250 and len(p) < 300) or (len(p) < 200):
  62.                         paragrafe_split.append(pattern_paragraf_nou.format(p))
  63.                     else:
  64.                         propozitii = tokenize.sent_tokenize(p)
  65.                         propozitii = [prop.strip().capitalize() for prop in propozitii]
  66.                         propozitii = [prop[:-1].strip() + prop[-1] for prop in propozitii]
  67.  
  68.                         paragraf = ''
  69.                         for propozitie in propozitii:
  70.                             if len(paragraf) + len(propozitie) < limita_caractere:
  71.                                 if paragraf == '':
  72.                                     paragraf = paragraf + propozitie
  73.                                 else:
  74.                                     paragraf = paragraf + ' ' + propozitie
  75.                             else:
  76.                                 paragrafe_split.append(pattern_paragraf_nou.format(paragraf))
  77.                                 paragraf = ''
  78.  
  79.                         if (len(paragraf) < limita_caractere):
  80.                             paragrafe_split.append(pattern_paragraf_nou.format(paragraf))
  81.  
  82.                 if len(paragrafe) == len(paragrafe_split):
  83.                     continue
  84.                 else:
  85.                     # construim textul dintre ARTICOL START/FINAL folosind paragrafele noi
  86.                     articol_start_final = '<!-- ARTICOL START -->\n{}\n<!-- ARTICOL FINAL -->'
  87.                     text = '\n'.join(paragrafe_split)
  88.  
  89.                     # inlocuim ce era intre ARTICOL START/FINAL cu noul text
  90.                     html_text = re.sub(r'<!-- ARTICOL START -->[\s\S]*?<!-- ARTICOL FINAL -->', articol_start_final.format(text), html_text)
  91.                     write_to_file(html_text, cale_fisier_html)
  92.                     print("Am modificat: {}".format(filename))
  93.                     amount += 1
  94.  
  95. print("Am modificat {} fisiere.".format(amount))
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement