Advertisement
nicuf

version2-trans

Jun 10th, 2021 (edited)
710
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.10 KB | None | 0 0
  1. Explanation here:
  2. Romanian: https://neculaifantanaru.com/python-code-text-google-translate-website-translation-version-2.html
  3. English: https://neculaifantanaru.com/en/python-code-text-google-translate-website-translation-version2.html
  4.  
  5. import os
  6. import re
  7. import textwrap
  8. import html
  9.  
  10. #-------------------------------------------------------------------------------
  11. # aici pui numlele librarii folosita pentru traducere: ai optiunile google_trans_new sau googletrans
  12. librarie_folosita = "googletrans"
  13. # calea catre folder-ul cu documente de tradus
  14. fisiere_din_folder = r"d:\Downloads\Test"
  15. source_language = 'en'
  16. # in ce limba vreau sa traduc
  17. # {'af': 'afrikaans', 'sq': 'albanian', 'am': 'amharic', 'ar': 'arabic', 'hy': 'armenian', 'az': 'azerbaijani', 'eu': 'basque', 'be': 'belarusian', 'bn': 'bengali', 'bs': 'bosnian', 'bg': 'bulgarian', 'ca': 'catalan', 'ceb': 'cebuano', 'ny': 'chichewa', 'zh-cn': 'chinese (simplified)', 'zh-tw': 'chinese (traditional)', 'co': 'corsican', 'hr': 'croatian', 'cs': 'czech', 'da': 'danish', 'nl': 'dutch', 'en': 'english', 'eo': 'esperanto', 'et': 'estonian', 'tl': 'filipino', 'fi': 'finnish', 'fr': 'french', 'fy': 'frisian', 'gl': 'galician', 'ka': 'georgian', 'de': 'german', 'el': 'greek', 'gu': 'gujarati', 'ht': 'haitian creole', 'ha': 'hausa', 'haw': 'hawaiian', 'iw': 'hebrew', 'hi': 'hindi', 'hmn': 'hmong', 'hu': 'hungarian', 'is': 'icelandic', 'ig': 'igbo', 'id': 'indonesian', 'ga': 'irish', 'it': 'italian', 'ja': 'japanese', 'jw': 'javanese', 'kn': 'kannada', 'kk': 'kazakh', 'km': 'khmer', 'ko': 'korean', 'ku': 'kurdish (kurmanji)', 'ky': 'kyrgyz', 'lo': 'lao', 'la': 'latin', 'lv': 'latvian', 'lt': 'lithuanian', 'lb': 'luxembourgish', 'mk': 'macedonian', 'mg': 'malagasy', 'ms': 'malay', 'ml': 'malayalam', 'mt': 'maltese', 'mi': 'maori', 'mr': 'marathi', 'mn': 'mongolian', 'my': 'myanmar (burmese)', 'ne': 'nepali', 'no': 'norwegian', 'ps': 'pashto', 'fa': 'persian', 'pl': 'polish', 'pt': 'portuguese', 'pa': 'punjabi', 'ro': 'romanian', 'ru': 'russian', 'sm': 'samoan', 'gd': 'scots gaelic', 'sr': 'serbian', 'st': 'sesotho', 'sn': 'shona', 'sd': 'sindhi', 'si': 'sinhala', 'sk': 'slovak', 'sl': 'slovenian', 'so': 'somali', 'es': 'spanish', 'su': 'sundanese', 'sw': 'swahili', 'sv': 'swedish', 'tg': 'tajik', 'ta': 'tamil', 'te': 'telugu', 'th': 'thai', 'tr': 'turkish', 'uk': 'ukrainian', 'ur': 'urdu', 'uz': 'uzbek', 'vi': 'vietnamese', 'cy': 'welsh', 'xh': 'xhosa', 'yi': 'yiddish', 'yo': 'yoruba', 'zu': 'zulu', 'fil': 'Filipino', 'he': 'Hebrew'}
  18. destination_language = 'ru'
  19. delimitatori_text_exterior_articol = [['<title','</title>']]
  20. delimitatori_text_interior_articol = [['<h1 class="den_articol" itemprop="name', '</h1>'], ['<p class="text_obisnuit', '</p>'], ['<span class="text', '</span>'], ['<li class="text_obisnuit', '</li>'], ['<h3 class="text_obisnuit2', '</h3>'], ['<h4 class="text_obisnuit2', '</h4>'], ['<h2', '</h2>']]
  21.  
  22. extensie_fisier = ".html"
  23. #-------------------------------------------------------------------------------
  24.  
  25. if (librarie_folosita == "google_trans_new"):
  26.     from google_trans_new import google_translator
  27.     translator = google_translator()
  28. elif (librarie_folosita == "googletrans"):
  29.     from googletrans import Translator
  30.     translator = Translator()
  31. elif (librarie_folosita == "translators"):
  32.     import translators as ts
  33.  
  34. lista_cale_fisiere = []
  35.  
  36. VAR, REPL = re.compile(r'(<.*?>)'), re.compile(r'_____(\d+)_____')
  37. varlist = []
  38. def replace(matchobj):
  39.   varlist.append(matchobj.group())
  40.   return "_____%d_____" %(len(varlist)-1)
  41. def restore(matchobj):
  42.     try:
  43.         return varlist[int(matchobj.group(1))]
  44.     except:
  45.         a=9
  46.  
  47. def traducere_text(text):
  48.     result = ""
  49.     for txt in (textwrap.wrap(text, 4500, break_long_words=False)):     # impart in maxim 4500 de caractere uitandu-ma dupa spatii
  50.         txt = html.unescape(txt)      # Convert all named and numeric character references (e.g. &gt;, &#62;, &#x3e;) in the string s to the corresponding Unicode characters.
  51.         if (librarie_folosita == "google_trans_new"):
  52.             while (re.search(r'(<.*?>)', txt)) :
  53.                 txt = VAR.sub(replace, txt)
  54.             translation = translator.translate(txt, lang_tgt=destination_language)
  55.             while (re.search(r'_____[0-9 ]+ _____', translation)):
  56.                 rep = re.search(r'_____[0-9 ]+ _____', translation).group(0)
  57.                 translation = translation.replace(rep, rep.replace(r' ', r''))
  58.             while (re.search(r'_____ [0-9 ]+_____', translation)):
  59.                 rep = re.search(r'_____ [0-9 ]+_____', translation).group(0)
  60.                 translation = translation.replace(rep, rep.replace(r' ', r''))
  61.             translation = REPL.sub(restore, translation)
  62.             result = result + translation
  63.         elif (librarie_folosita == "googletrans"):
  64.             while (re.search(r'(<.*?>)', txt)) :
  65.                 txt = VAR.sub(replace, txt)
  66.             translation = translator.translate(txt, dest=destination_language).text
  67.             while (re.search(r'_____[0-9 ]+ _____', translation)):
  68.                 rep = re.search(r'_____[0-9 ]+ _____', translation).group(0)
  69.                 translation = translation.replace(rep, rep.replace(r' ', r''))
  70.             while (re.search(r'_____ [0-9 ]+_____', translation)):
  71.                 rep = re.search(r'_____ [0-9 ]+_____', translation).group(0)
  72.                 translation = translation.replace(rep, rep.replace(r' ', r''))
  73.             translation = REPL.sub(restore, translation)
  74.             result = result + translation
  75.         elif (librarie_folosita == "translators"):
  76.             while (re.search(r'(<.*?>)', txt)) :
  77.                 txt = VAR.sub(replace, txt)
  78.             translation = translator.translate(txt, dest=destination_language).text
  79.             while (re.search(r'_____[0-9 ]+ _____', translation)):
  80.                 rep = re.search(r'_____[0-9 ]+ _____', translation).group(0)
  81.                 translation = translation.replace(rep, rep.replace(r' ', r''))
  82.             while (re.search(r'_____ [0-9 ]+_____', translation)):
  83.                 rep = re.search(r'_____ [0-9 ]+_____', translation).group(0)
  84.                 translation = translation.replace(rep, rep.replace(r' ', r''))
  85.             translation = REPL.sub(restore, translation)
  86.             result = result + translation
  87.     return result
  88.  
  89. def selectare_traducere_continut(cont, delimitatori):
  90.     for delimitator in delimitatori:
  91.         start_delim = delimitator[0]                                            # '<title'
  92.         stop_delim  = delimitator[1]                                            # '</title>'
  93.         start_position = 0
  94.         stop_position = len(cont)-1
  95.         while cont[start_position:stop_position].find(start_delim)>0:
  96.             temp_st = cont[start_position:stop_position].find(start_delim) + len(start_delim) + start_position
  97.             temp = temp_st + cont[temp_st:stop_position].find('>')
  98.             if (cont[temp-1] == '/'):
  99.                 start_position = temp
  100.             else:
  101.                 start_position = temp+1
  102.                 st = cont[start_position:stop_position].find(stop_delim) + start_position
  103.                 extracted_text = cont[start_position:st]
  104.                 translated_text = traducere_text(extracted_text)
  105.                 cont = cont[:start_position] + translated_text + cont[st:]
  106.                 start_position = start_position + len(translated_text)
  107.     return cont
  108.  
  109. def selectare_text():
  110.     for file in os.listdir(fisiere_din_folder):
  111.         if file.endswith(extensie_fisier):
  112.             lista_cale_fisiere.append(os.path.join(fisiere_din_folder, file))
  113.  
  114.     for fisier in lista_cale_fisiere:
  115.  
  116.         f = open(fisier, 'r')
  117.  
  118.         if f.mode == 'r':
  119.             contents = f.read()
  120.             #contents = html.unescape(contents)      # Convert all named and numeric character references (e.g. &gt;, &#62;, &#x3e;) in the string s to the corresponding Unicode characters.
  121.             print ("Acum lucrez la fisierul :", fisier)
  122.  
  123.             continut = []
  124.             if (contents.find('<meta name="description" content="')>0):       # am gasit '<!-- ARTICOL START -->' in pagina
  125.                 pozitia1 = contents.find('<meta name="description" content="') + len('<meta name="description" content="')
  126.                 pozitia2 = pozitia1 + contents[pozitia1+1:].find(">") - 1
  127.                 selectie = contents[pozitia1:pozitia2]
  128.                 trad = traducere_text(selectie)
  129.                 contents = contents[:pozitia1] + trad + contents[pozitia2:]
  130.             if (contents.find('<!-- ARTICOL START -->')>0):       # am gasit '<!-- ARTICOL START -->' in pagina
  131.                 poz1 = contents.find('<!-- ARTICOL START -->') + len('<!-- ARTICOL START -->')
  132.                 poz2 = contents.find('<!-- ARTICOL FINAL -->') + len('<!-- ARTICOL FINAL -->')
  133.                 inceput = contents[:poz1]
  134.                 articol = contents[poz1:poz2]
  135.                 final = contents[poz2:]
  136.                 continut.append(inceput)
  137.                 continut.append(articol)
  138.                 continut.append(final)
  139.             else:
  140.                 continut.append(contents)
  141.             continut_tradus = ''
  142.             if (len(continut) == 3):
  143.                 continut_tradus = continut_tradus + selectare_traducere_continut(continut[0], delimitatori_text_exterior_articol) # inceput
  144.                 continut_tradus = continut_tradus + selectare_traducere_continut(continut[1], delimitatori_text_interior_articol) # articol
  145.                 continut_tradus = continut_tradus + selectare_traducere_continut(continut[2], delimitatori_text_exterior_articol) # exterior
  146.             elif (len(continut) == 1):
  147.                 continut_tradus = continut_tradus + selectare_traducere_continut(continut[0], delimitatori_text_exterior_articol)
  148.             else:
  149.                 print ("S-a produs o eroare cand am vrut sa citesc articolul sau exteriorul lui !")
  150.         print("Am citit un fisier si incep traducerea!\n")
  151.  
  152.         with open(fisier[:len(fisier)-len(extensie_fisier)]+"_"+destination_language+extensie_fisier, 'w', encoding="utf-8") as f:
  153.             f.write(continut_tradus)
  154.     print("Am terminat traducerea !")
  155.  
  156. selectare_text()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement