Как написать программу для перевода текста

Суть программы в том, что она отображает случайное слово на русском языке из словаря и нужно написать его перевод на английском. У меня получилось, что при каждом запуске только одно слово выходит. Как сделать, чтобы при любом ответе — правильном или нет, выходило новое слово?

translate = word = random.choice(list(translate.keys())) def test(): global window if entry.get() == translate[word]: counter.set(counter.get() + 1) else: counter_2.set(counter_2.get() + 1) if counter_2.get() == 3: window.destroy() window = Tk() counter = IntVar() counter_2 = IntVar() frame = Frame(window) frame.pack() label = Label(frame, text = ‘Переведите на английский слово:’) label.pack() label_2 = Label(frame, text = word, font=»Arial 13″) label_2.pack() entry = Entry(frame) entry.pack() label_3 = Label(frame, text = ‘Верно:’) label_3.pack() label_4 = Label(frame, textvariable = counter) label_4.pack() button = Button(frame, text = ‘Проверить’, command = test, bg = ‘green’) button.pack() window.mainloop()

Отслеживать

Как сделать программу переводчик с нуля.

70.6k 97 97 золотых знаков 36 36 серебряных знаков 55 55 бронзовых знаков

задан 12 дек 2021 в 19:56

Вячеслав Мамаев Вячеслав Мамаев

29 1 1 серебряный знак 7 7 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Я не смог воспроизвести ваш пример, но я вам покажу другой пример, попробуйте:

import random import googletrans # pip install googletrans import textblob # pip install textblob from tkinter import * from tkinter import ttk, messagebox root = Tk() root.title(‘Translator’) root.iconbitmap(‘music.ico’) root.geometry(«880×300») def translate_it(): tr_text = translated_text.get(1.0, END).strip().lower() if not tr_text: messagebox.showerror(«Внимание», «Введите ваш вариант перевода.») return try: # Получение языков из ключей словаря for key, value in languages.items(): if (value == original_combo.get()): from_language_key = key # Get the To Language Key for key, value in languages.items(): if (value == translated_combo.get()): to_language_key = key # Turn Original Text into a TextBlob words = textblob.TextBlob(original_text.get(1.0, END)) # Translate Text words = words.translate(from_lang=from_language_key , to=to_language_key) if tr_text == words.lower(): messagebox.showinfo(«Успех», «Это правильный перевод.») else: messagebox.showerror(«Внимание», f»Это НЕ правильный перевод. ()») translated_text.delete(1.0, END) new_word() except Exception as e: messagebox.showerror(«Translator Error: «, e) def clear(): # Clear the text boxes original_text.delete(1.0, END) translated_text.delete(1.0, END) new_word() # Получить список языков из GoogleTrans languages = googletrans.LANGUAGES # Преобразовать в список language_list = list(languages.values()) original_text = Text(root, height=10, width=40) original_text.grid(row=0, column=0, pady=20, padx=10) translated_text = Text(root, height=10, width=40) translated_text.grid(row=0, column=2, pady=20, padx=10) translate_button = Button( root, text=»Translate!», font=(«Helvetica», 24), command=translate_it ) translate_button.grid(row=0, column=1, padx=10) original_combo = ttk.Combobox(root, width=50, value=language_list) original_combo.current(77) original_combo.grid(row=1, column=0) translated_combo = ttk.Combobox(root, width=50, value=language_list) translated_combo.current(21) translated_combo.grid(row=1, column=2) # Clear button clear_button = Button(root, text=»Clear», command=clear) clear_button.grid(row=2, column=1) text = »’ Суть программа что она отображает случайное слово русский язык словарь нужно писать перевод английский получилось что при каждый запуск только одно слово выходит Как сделать чтобы любой ответ правильно или нет выход новое слово Привет мир »’ words = text.split() def new_word(): word = random.choice(words) original_text.delete(1.0, END) original_text.insert(1.0, word) new_word() root.mainloop()

Источник: ru.stackoverflow.com

Перевод документов онлайн на 100 языков. Автоматический переводчик PDF/WORD/EXCEL/PPTX/InDesign

feanor777 / Dictionary.java

Написать программу переводчик, которая будет переводить текст, написанный на одном языке, на другой язык согласно заранее составленному словарю. Сделать ф-ю ручного наполнения словаря и возможность его сохранения на диск.

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

import java . io . FileInputStream ;
import java . io . FileOutputStream ;
import java . io . IOException ;
import java . io . ObjectInputStream ;
import java . io . ObjectOutputStream ;
import java . io . Serializable ;
import java . util . HashMap ;
import java . util . Map ;
public class Dictionary implements Serializable
private static final long serialVersionUID = 1L ;
protected Map < String , String >dictionary ;
public Dictionary ()
dictionary = new HashMap < String , String >();
>
public void addWord ( String english , String russia )
dictionary . put ( english , russia );
>
public Map < String , String >getDictionary ()
return dictionary ;
>
public void save ( String path )
try ( FileOutputStream fos = new FileOutputStream ( path );
ObjectOutputStream oos = new ObjectOutputStream ( fos ))
oos . writeObject ( dictionary );
> catch ( IOException e )
e . printStackTrace ();
>
>
public void load ( String path )
try ( FileInputStream fis = new FileInputStream ( path );
ObjectInputStream ois = new ObjectInputStream ( fis ))
dictionary = ( Map < String , String >) ois . readObject ();
> catch ( IOException | ClassNotFoundException e )
e . printStackTrace ();
>
>
>

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

import java . util . Map ;
import java . util . Map . Entry ;
import java . util . Scanner ;
import java . util . Set ;
public class Main
public static void main ( String [] args )
Scanner scan = new Scanner ( System . in );
Dictionary dictionary = new Dictionary ();
Translator translator ;
Menu menu = new Menu ();
int solution ;
do
menu . show ();
solution = scan . nextInt ();
switch ( solution )
case 1 :
System . out . println ( «Enter english word:» );
String english = new Scanner ( System . in ). nextLine ();
System . out . println ( «Enter translate:» );
String russia = new Scanner ( System . in ). nextLine ();
dictionary . addWord ( english , russia );
break ;
case 2 :
System . out . println ( «Enter english sentence:» );
String englishSentence = new Scanner ( System . in ). nextLine ();
translator = new Translator ( dictionary );
translator . TranslateEnglishToRussia ( englishSentence );
break ;
case 3 :
System . out . println ( «Enter russia sentence:» );
String russiaSentence = new Scanner ( System . in ). nextLine ();
translator = new Translator ( dictionary );
translator . TranslateRussiaToEnglish ( russiaSentence );
break ;
case 4 :
System . out
. println ( «Enter path to save dictionary(EXAMPLE d: \ java \ dictionary.txt):» );
String path = new Scanner ( System . in ). nextLine ();
dictionary . save ( path );
break ;
case 5 :
System . out
. println ( «Enter path to load dictionary(EXAMPLE d: \ java \ dictionary.txt):» );
path = new Scanner ( System . in ). nextLine ();
path . replace ( » \ » , » \ \ » );
dictionary . load ( path );
break ;
case 6 :
if ( dictionary . getDictionary (). size () == 0 )
System . out
. println ( «Your dictionary is empty! Please add word or load dictionary from file.» );
else System . out . println ( dictionary . getDictionary ());
break ;
default :
if ( solution != 0 )
System . out . println ( «Invalid choose!» );
break ;
>
> while ( solution != 0 );
>
>
Читайте также:
Кумир программа для школьников как пользоваться роботом

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

public class Menu
public void show ()
System . out . println ( » n t t MENU» );
System . out . println ( «Enter: » );
System . out . println ( «1 : Add word to dictionary» );
System . out . println ( «2 : Translate from English to Russia» );
System . out . println ( «3 : Translate from Russia to English» );
System . out . println ( «4 : Save dictionary» );
System . out . println ( «5 : Load dictionary» );
System . out . println ( «6 : Show dictionary» );
System . out . println ( «0 : Exit» );
>
>

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

import java . util . Map ;
import java . util . Set ;
public class Translator
Set < Map . Entry < String , String >> vocabularySet ;
public Translator ( Dictionary dictionary )
vocabularySet = dictionary . getDictionary (). entrySet ();
>
public void TranslateEnglishToRussia ( String phrase )
String [] str = phrase . split ( » » );
for ( int i = 0 ; i < str . length ; i ++)
int j = 0 ;
if ( i == 0 )
System . out . println ();
>
for ( Map . Entry < String , String >entry : vocabularySet )
if ( entry . getKey (). equalsIgnoreCase ( str [ i ]))
System . out . print ( entry . getValue () + » » );
break ;
>
else if ( j == vocabularySet . size () — 1 )
System . out . print ( str [ i ] + » » );
>
j ++;
>
>
>
public void TranslateRussiaToEnglish ( String phrase )
String [] str = phrase . split ( » » );
for ( int i = 0 ; i < str . length ; i ++)
int j = 0 ;
if ( i == 0 )
System . out . println ();
>
for ( Map . Entry < String , String >entry : vocabularySet )
if ( entry . getValue (). equalsIgnoreCase ( str [ i ]))
System . out . print ( entry . getKey () + » » );
break ;
>
else if ( j == vocabularySet . size () — 1 )
System . out . print ( str [ i ] + » » );
>
j ++;
>
>
>
>

Источник: gist.github.com

Статья Перевод текста в переводчике DeepL с использованием Selenium в Python

Когда вы собираетесь читать книгу на иностранном языке, вы либо учите этот язык, для того, чтобы можно было читать тексты в оригинале, либо пользуетесь услугами машинного перевода. Если, конечно, книга уже не переведена на ваш язык опытным переводчиком.

И, несомненно, лидерами в области машинного перевода долгое время были программы, которые устанавливались на компьютер, имели собственную базу в соответствии, с которой и переводили с одного языка на другой. Но, появился интернет и все большую популярность стали набирать онлайн переводчики, такие как Google Translate или Яндекс Переводчик.

Но, речь сейчас не о них, а об онлайн переводчике, который в области машинного перевода гораздо лучше, чем упомянутые выше гиганты. Речь о DeepL Translate. И все бы хорошо, если бы не одно «но». И вот об этом «но» я и расскажу, как я автоматизировал его с помощью Python.

bigtyx6muc8kgipsaqbn0z7f3r14oh295eljvdw.jpg

Причина создания скрипта

Оговорюсь сразу же: « Эта часть не обязательна и, если вам не особо интересно, что привело к данному скрипту, то можете пропустить этот параграф и перейти сразу же к коду ».

Суть проблемы была вот в чем. Когда я начал заниматься программированием, естественно, мне нужно было читать литературу на английском языке или смотреть на нем же видео. Потому как на русском языке подобной литературы или материалов, к сожалению не было. А даже если они и появились бы, то с некоторым опозданием, что не гарантировало бы актуальность материала. Тогда я решил пользоваться переводчиками.

Сначала мой выбор пал на Яндекс Переводчик. И да, раньше он был бесплатен, ведь столько было всяких инструкций по использованию его API. Но, очевидно, что технология была обкатана и перешла на коммерческие рельсы, что явно мне не подходило.

Тогда я начал склонятся в сторону Google Translate. И тут вроде бы все стало получаться. Перевод бесплатный, пусть и немного кривоватый. Но и тут я столкнулся с небольшой проблемой. Дело в том, что я скачивал с YouTube субтитры к видео на английском языке.

Чтобы не мучиться вручную, сделал скрипт, который эти субтитры переводил и пересохранял уже на русском языке. Однако, радость моя была недолгой. Через какое-то время работы скрипта он выпал в осадок с ошибкой доступа. Очевидно, что Google не очень понравилось, когда его долбят запросами.

И вот уже совсем недавно я наткнулся на DeepL Translate. Качество перевода очень хорошее. Да, она справляется не со всем, но его переводы хотя бы можно читать без боли, потому, что они ближе всего стоят к естественному языку. Вот только автоматизировать это чудо не очень то получилось. У переводчика есть API.

И на бесплатном тарифном плане можно перевести 500 000 знаков в месяц. Но, вот зарегистрироваться на сайте, чтобы получить ключ не представлялось возможным. В связи с недавними событиями доступ для русскоязычной аудитории для регистрации был, очевидно, закрыт. Я попробовал через VPN, но при регистрации нужно вводит данные кредитки.

И сгенерированные данные сайт явно не устроили, потому как проводилась проверка и, тут же сообщалось, что такой карты не существует. Тогда я бросил это занятие и стал думать, а как же еще можно подступиться к прелестям автоматизации перевода.

Тогда полез в запросы. И даже их нашел. Конвертировал cURL в код Python и попробовал переводить. Но, через десяток запросов я стал получать ошибку доступа. Явно, что сайт почуял неладное и заблокировал запросы с моего адреса. Тогда я понял, что это тоже тупиковый путь. И подумал о том, что в браузере, теоретически, можно переводить сколько угодно.

Читайте также:
Дидактические требования к учебным программам

Ведь я так уже делал, когда достигался лимит, который очевидно как-то писался в куки, я просто чистил историю и начинал с чистого листа. А тогда, почему бы не воспользоваться selenium. И я попробовал. А вот что у меня получилось – об этом немного ниже.

Что понадобиться?

Для скрипта переводчика нужно будет установить selenium, для выполнения перевода текста в браузере и BeautifulSoup, чтобы парсить перевод . Пишем в терминале:

pip install bs4 selenium lxml

Также нужно будет скачать драйвер для браузера, в зависимости от ваших предпочтений: для Fifefox или Chrome. Ссылки на драйвер есть на странице загрузки библиотеки в PyPi. Ну и установить браузер, если у вас он еще не установлен. Я предпочел Firefox, просто потому, что в Linux он присутствует по умолчанию, а Google Chrome мне просто не нравиться.

Почему я не воспользовался для парсинга selenium, тут все просто. Да, я нашел поле для ввода текста и текст вводить в него у меня получилось, хоть и не без некоторых трудностей поначалу. А вот поле, в котором текст отображается я хоть и нашел, получить из него текст не удалось. Может быть я плохо старался, не знаю. Но там текст отображается не в одном, а нескольких тегах.

То есть, основной перевод и, если перевод не очень большой, предлагаются еще его варианты. Эти поля присутствуют постоянно. Но, почему-то всегда возвращалось пустое значение. Тогда я просто стал передавать код страницы в BeautifulSoup и уже в ней парсить поле, в котором и отображался переведенный текст.

Давайте приступим к написанию кода.

Для начала импортируем все нужные нам библиотеки в скрипт:

import os.path from platform import system from time import sleep from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service

Для начала напишем функцию, которая будет парсить перевод. По сути, в ней и будет происходить все основное действие. Я назвал ее browser_get_html(path_text, num).

Здесь на входе передается путь к тексту или текст для перевода, в зависимости от того, что выберет пользователь в стартовом меню. А также параметр num, который принимает значение 0 или 1 и обозначает, что выбрал пользователь. Если 0, переводим простой текст. Если 1 значит в переменной содержится путь к текстовому файлу из которого и берется текст для перевода.

Код функции парсинга перевода текста

def browser_get_html(path_text, num): options = Options() options.headless = False browser = » if system() == «Windows»: browser = webdriver.Firefox(options=options, service=Service(log_path=os.devnull, executable_path=os.path.join(os.getcwd(), ‘geckodriver’, ‘geckodriver.exe’))) elif system() == «Linux»: browser = webdriver.Firefox(options=options, service=Service(log_path=os.devnull, executable_path=os.path.join(os.getcwd(), ‘geckodriver’, ‘geckodriver’))) if num == 0: browser.get(‘https://www.deepl.com/translator#en/ru/’) sleep(2) field = browser.find_element(By.XPATH, ‘/html/body/div[3]/main/div[4]/div[3]/section[1]/div[3]/div[2]/textarea’) field.send_keys(path_text.strip()) sleep(10) html = browser.page_source soup = BeautifulSoup(html, ‘lxml’) translation = soup.find(‘div’, ) print(f’n’) browser.close() browser.quit() elif num == 1: name_translate = » if system() == «Windows»: name_translate = os.path.split(path_text)[1].removesuffix(«.txt») elif system() == «Linux»: name_translate = os.path.split(path_text)[1][0:-4] browser.get(‘https://www.deepl.com/translator’) sleep(2) field = browser.find_element(By.XPATH, ‘/html/body/div[3]/main/div[4]/div[3]/section[1]/div[3]/div[2]/textarea’) with open(path_text, ‘r’, encoding=’utf-8′) as file: read = file.read().split(«n») for line in read: if len(line.strip()) > 5000: print(f'[-] Количество введенных знаков: n ‘ f’- Онлайн перевод не поддерживает более 5000 знаков в тексте одновременноn’ f’ — Уберите лишнее кол-во знаков’) main() return field.send_keys(line.strip()) sleep(10) html = browser.page_source soup = BeautifulSoup(html, ‘lxml’) translation = soup.find(‘div’, ) print(translation.text) with open(os.path.join(os.getcwd(), f’_tr.txt’), ‘a’, encoding=’utf-8′) as file: file.write(translation.text) field.clear() browser.close() browser.quit()

Для начала устанавливаем настройки браузера.

Создаем параметр options, в котором они и будут содержаться. Далее, устанавливаем одну опцию: options.headless в значение False, что значит показывать браузер пользователю. Если же вы хотите отключить показ браузера, поставьте у данной опции значение True. И определяем, переменную browser, чтобы к ней был доступ из всего последующего кода.

options = Options() options.headless = False browser = »

Затем нам нужно инициализировать драйвер браузера, а значит передать в него опции, путь к драйверу и параметр, отвечающий за вывод лога работы драйвера. Поэтому определяем версию операционной системы. Если Windows, указываем одни параметры, Linux – чуть другие.

И в том, и в том случае драйвер, согласно кода, должен лежать в папке «geckodriver», которая должна находиться в папке со скриптом. Ну, или можете прописать в путь к драйверу в переменных средах. Если речь идет о Windows.

if system() == «Windows»: browser = webdriver.Firefox(options=options, service=Service(log_path=os.devnull, executable_path=os.path.join(os.getcwd(), ‘geckodriver’, ‘geckodriver.exe’))) elif system() == «Linux»: browser = webdriver.Firefox(options=options, service=Service(log_path=os.devnull, executable_path=os.path.join(os.getcwd(), ‘geckodriver’, ‘geckodriver’)))

Затем определяем, что выбрал пользователь. Если пришел 0, то значит пользователь переводи текст из командной строки.

Здесь запускаем браузер, переходим на страницу переводчика. Спим две секунды, для того, чтобы подождать, пока прогрузиться страница. Ищем поле ввода текста по элементу XPATH, куда и вставляем полученный от пользователя текст. Затем спим еще 10 секунд. Тут с параметром можно поэкспериментировать. Можно 10 секунд и не спать.

Это я несколько перестраховался. Но, тут все зависит от того, какой величины текст отправит пользователь. Ведь тут перевод проходит не мгновенно, а потому, на то, чтобы он отобразился в поле вывода нужно некоторое время. Затем передаем HTML в BeautifulSoup. Ищем по id тег, куда выводится перевод и принтуем его в терминал.

После этого закрываем браузер.

if num == 0: browser.get(‘https://www.deepl.com/translator#en/ru/’) sleep(2) field = browser.find_element(By.XPATH, ‘/html/body/div[3]/main/div[4]/div[3]/section[1]/div[3]/div[2]/textarea’) field.send_keys(path_text.strip()) sleep(10) html = browser.page_source soup = BeautifulSoup(html, ‘lxml’) translation = soup.find(‘div’, ) print(f’n’) browser.close() browser.quit()

Если же была получена 1, тогда в переменно path_text содержится путь к текстовому документу. Получаем из пути имя для будущего файла с переводом.

Открываем файл, разбиваем по «n». В итоге у нас получается список с абзацами и в цикле отправляем каждый абзац для перевода. Парсим перевод и сохраняем в тестовый документ.

name_translate = » if system() == «Windows»: name_translate = os.path.split(path_text)[1].removesuffix(«.txt») elif system() == «Linux»: name_translate = os.path.split(path_text)[1][0:-4] browser.get(‘https://www.deepl.com/translator#en/ru/’) sleep(2) field = browser.find_element(By.XPATH, ‘/html/body/div[3]/main/div[4]/div[3]/section[1]/div[3]/div[2]/textarea’) with open(path_text, ‘r’, encoding=’utf-8′) as file: read = file.read().split(«n») for line in read: if len(line.strip()) > 5000: print(f'[-] Количество введенных знаков: n ‘ f’- Онлайн перевод не поддерживает более 5000 знаков в тексте одновременноn’ f’ — Уберите лишнее кол-во знаков’) main() return field.send_keys(line.strip()) sleep(10) html = browser.page_source soup = BeautifulSoup(html, ‘lxml’) translation = soup.find(‘div’, ) print(translation.text) with open(os.path.join(os.getcwd(), f’_tr.txt’), ‘a’, encoding=’utf-8′) as file: file.write(translation.text) field.clear()

Читайте также:
Как перекинуть программу через блютуз на Андроид

Тут надо сказать, что текстовый документ должен быть отформатирован соответствующим образом, то есть, подготовлен к переводу.

И сырой текст тут явно не подойдет. Нужно убрать все переносы строк внутри параграфа, оставить их только между. Для того, чтобы разбивка текста происходила корректно. Еще переносы строк надо убрать для того, чтобы перевод был как можно более точный. Ведь смысл переводимого текста еще и зависит от того, как составлено предложение.

А если у вас посреди строки будет стоять перевод на следующую строку, переводчик и будет воспринимать это как два отдельных текста. А следовательно, перевод будет очень уж приблизительным.

С помощью Python пока эту задачу не решал. А решил ее вручную с помощью Notepad ++. У него есть такая замечательная штука, как запись макросов и функция «Объдинить строки». Записываю макрос и подготавливаю документ к переводу.

Ну и функция пользовательского выбора. Тут особо рассказывать не о чем. Идет выбор пользователем действий и в зависимости от выбора проводиться проверка на корректность выбора и на длину введенного текста. Дело в том, что переводчик позволяет перевести только 5000 символов с пробелами. А значит, если текст будет больше, он просто обрежется.

Поэтому, перед тем как начать перевод проводится проверка на его длину. Так что, старайтесь разбивать абзацы не более 5000 символов.

Функция main()

def main(): print(«nДля перевода текста из текстового файла текст должен быть отформатирован надлежащим образом.nА именно:n» » — убраны пробелы между связанными словами предложения. Или, если вы хотите перевести сразу целый абзац,n» » нужно убрать переносы строки;n» » — между абзацами наоборот, должен стоять перенос сторки, так как именно по переносу строки происходитn» » разделение текстаn пример смотрите в файле: example.txt») user_change = input(‘n[+] Выберите направление для перевода:n [1] Текст в консолиn [2] Текстовый файлn ‘ ‘[3] Выходn >>> ‘) if user_change == «1»: path_text = input(‘[+] Введите текст для перевода: ‘) if len(path_text) > 5000: print(f'[-] Количество введенных знаков: n ‘ f’- Онлайн перевод не поддерживает более 5000 знаков в тексте одновременноn’ f’ — Уберите лишнее кол-во знаков’) main() browser_get_html(path_text, 0) elif user_change == «2»: path_text = input(‘[+] Введите путь к текстовому файлу для перевода: ‘) if not os.path.exists(path_text): print(‘[-] Файла по введенному вами пути не обнаружено’) main() if not path_text.endswith(«.txt»): print(‘[-] Формат файла не поддерживается.

Нужен текстовый документ’) main() browser_get_html(path_text, 1) elif user_change == «3»: exit(0) else: print(«[-] Неопознанный ввод. Повторите попытку») main()

Вот, в принципе, и все. Во вложение добавлю перевод первой главы книги Эрика Чоу — Освоение сетевых технологий Python. Ее я как раз перевел с помощью данного скрипта.

Да, перевод длится не пять секунд, а потому придется подождать. Тут львиную долю занимает время ожидания загрузки перевода. Но, тем не менее, медленно, но верно перевод выполняется. И это все не вручную. Нет необходимости переключатся между переводчиком, блокнотом для правки текста, книгой для копирования и Word для его вставки.

Полный код скрипта для перевода

# pip install bs4 selenium import os.path from platform import system from time import sleep from bs4 import BeautifulSoup from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.firefox.options import Options from selenium.webdriver.firefox.service import Service # запуск браузера и цикла для перевода текста, # а также сохранение переведенного текста в файл def browser_get_html(path_text, num): options = Options() options.headless = False browser = » if system() == «Windows»: browser = webdriver.Firefox(options=options, service=Service(log_path=os.devnull, executable_path=os.path.join(os.getcwd(), ‘geckodriver’, ‘geckodriver.exe’))) elif system() == «Linux»: browser = webdriver.Firefox(options=options, service=Service(log_path=os.devnull, executable_path=os.path.join(os.getcwd(), ‘geckodriver’, ‘geckodriver’))) if num == 0: browser.get(‘https://www.deepl.com/translator#en/ru/’) sleep(2) field = browser.find_element(By.XPATH, ‘/html/body/div[3]/main/div[4]/div[3]/section[1]/div[3]/div[2]/textarea’) field.send_keys(path_text.strip()) sleep(10) html = browser.page_source soup = BeautifulSoup(html, ‘lxml’) translation = soup.find(‘div’, ) print(f’n’) browser.close() browser.quit() elif num == 1: name_translate = » if system() == «Windows»: name_translate = os.path.split(path_text)[1].removesuffix(«.txt») elif system() == «Linux»: name_translate = os.path.split(path_text)[1][0:-4] browser.get(‘https://www.deepl.com/translator#en/ru/’) sleep(2) field = browser.find_element(By.XPATH, ‘/html/body/div[3]/main/div[4]/div[3]/section[1]/div[3]/div[2]/textarea’) with open(path_text, ‘r’, encoding=’utf-8′) as file: read = file.read().split(«n») for line in read: if len(line.strip()) > 5000: print(f'[-] Количество введенных знаков: n ‘ f’- Онлайн перевод не поддерживает более 5000 знаков в тексте одновременноn’ f’ — Уберите лишнее кол-во знаков’) main() return field.send_keys(line.strip()) sleep(10) html = browser.page_source soup = BeautifulSoup(html, ‘lxml’) translation = soup.find(‘div’, ) print(translation.text) with open(os.path.join(os.getcwd(), f’_tr.txt’), ‘a’, encoding=’utf-8′) as file: file.write(translation.text) field.clear() browser.close() browser.quit() # получение пути к файлу для перевода # запуск функции парсинга def main(): print(«nДля перевода текста из текстового файла текст должен быть отформатирован надлежащим образом.nА именно:n» » — убраны пробелы между связанными словами предложения. Или, если вы хотите перевести сразу целый абзац,n» » нужно убрать переносы строки;n» » — между абзацами наоборот, должен стоять перенос сторки, так как именно по переносу строки происходитn» » разделение текстаn пример смотрите в файле: example.txt») user_change = input(‘n[+] Выберите направление для перевода:n [1] Текст в консолиn [2] Текстовый файлn ‘ ‘[3] Выходn >>> ‘) if user_change == «1»: path_text = input(‘[+] Введите текст для перевода: ‘) if len(path_text) > 5000: print(f'[-] Количество введенных знаков: n ‘ f’- Онлайн перевод не поддерживает более 5000 знаков в тексте одновременноn’ f’ — Уберите лишнее кол-во знаков’) main() browser_get_html(path_text, 0) elif user_change == «2»: path_text = input(‘[+] Введите путь к текстовому файлу для перевода: ‘) if not os.path.exists(path_text): print(‘[-] Файла по введенному вами пути не обнаружено’) main() if not path_text.endswith(«.txt»): print(‘[-] Формат файла не поддерживается. Нужен текстовый документ’) main() browser_get_html(path_text, 1) elif user_change == «3»: exit(0) else: print(«[-] Неопознанный ввод. Повторите попытку») main() if __name__ == «__main__»: main()

Пример форматирования текста также будет во вложении.

Спасибо за внимание. Надеюсь, что данная статья будет вам полезна

Источник: codeby.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru