Fox13th / git_intro

0 stars 0 forks source link

5 #8

Open Fox13th opened 2 months ago

Fox13th commented 2 months ago

Сохранение структуры и форматирования документа

Чтобы сохранить структуру и форматирование документа при переводе, нужно учитывать, что библиотека python-docx позволяет работать не только с текстом, но и с другими элементами документа, такими как заголовки, таблицы и т.д.

Пример кода с сохранением форматирования

Вот модифицированный пример кода, который сохраняет форматирование, включая заголовки:

from docx import Document
from googletrans import Translator

def translate_paragraph(para, translator, dest_lang):
    """Функция для перевода параграфа с сохранением форматирования."""
    translated_text = translator.translate(para.text, dest=dest_lang).text
    new_para = para._element.clone()  # Клонируем элемент параграфа
    new_para.text = translated_text  # Устанавливаем переведенный текст
    return new_para

def translate_docx(input_file, output_file, dest_lang='ru'):
    # Создаем объект Translator
    translator = Translator()

    # Загружаем документ
    doc = Document(input_file)
    new_doc = Document()

    # Перебираем параграфы в документе
    for para in doc.paragraphs:
        # Переводим параграф
        new_para = translate_paragraph(para, translator, dest_lang)
        # Добавляем переведенный параграф в новый документ
        new_doc._element.body.append(new_para)

    # Сохраняем новый документ
    new_doc.save(output_file)

# Пример использования
translate_docx('input.docx', 'translated_output.docx', 'en')

Что изменилось?

Заключение

С помощью этого подхода можно сохранить форматирование и структуру оригинального документа при переводе. Если у вас есть дополнительные вопросы или нужны уточнения, не стесняйтесь спрашивать!

Fox13th commented 2 months ago

Перевод PDF документов на Python

Для автоматического перевода PDF документов на Python можно использовать библиотеки PyPDF2 или pdfplumber для извлечения текста и googletrans для перевода. Однако стоит отметить, что сохранение форматирования в PDF может быть более сложным, чем в DOCX.

Установка необходимых библиотек

Сначала установите необходимые библиотеки:

pip install PyPDF2 googletrans==4.0.0-rc1

Пример кода

Вот пример кода, который извлекает текст из PDF файла, переводит его и сохраняет в новый PDF файл:

import PyPDF2
from googletrans import Translator
from fpdf import FPDF

def translate_pdf(input_file, output_file, dest_lang='ru'):
    # Создаем объект Translator
    translator = Translator()

    # Открываем PDF файл
    with open(input_file, 'rb') as file:
        reader = PyPDF2.PdfReader(file)
        pdf_writer = FPDF()
        pdf_writer.set_auto_page_break(auto=True, margin=15)
        pdf_writer.add_page()
        pdf_writer.set_font("Arial", size=12)

        # Перебираем страницы в документе
        for page in reader.pages:
            text = page.extract_text()
            if text:
                # Переводим текст
                translated_text = translator.translate(text, dest=dest_lang).text
                # Добавляем переведенный текст в новый PDF
                pdf_writer.multi_cell(0, 10, translated_text)

    # Сохраняем новый PDF файл
    pdf_writer.output(output_file)

# Пример использования
translate_pdf('input.pdf', 'translated_output.pdf', 'en')

Описание кода

Ограничения

Заключение

Теперь у вас есть базовая программа для автоматического перевода PDF документов на Python! Если у вас есть дополнительные вопросы или нужны уточнения, не стесняйтесь спрашивать!

Fox13th commented 2 months ago

Чтобы создать автоматический переводчик для документов формата DOCX с сохранением форматирования и стилей, можно использовать библиотеки python-docx для работы с DOCX и googletrans для перевода текста. Вот общий план действий:

  1. Установите необходимые библиотеки:

    pip install python-docx googletrans==4.0.0-rc1
  2. Чтение документа: Используйте python-docx, чтобы открыть и прочитать текст из документа.

  3. Перевод текста: Используйте googletrans для перевода текста на нужный язык.

  4. Создание нового документа: Сохраните переведенный текст в новый DOCX-документ, сохраняя оригинальное форматирование.

Вот пример кода:

from docx import Document
from googletrans import Translator

def translate_docx(input_file, output_file, dest_language='ru'):
    # Создаем экземпляр Translator
    translator = Translator()

    # Открываем исходный документ
    doc = Document(input_file)
    new_doc = Document()

    for paragraph in doc.paragraphs:
        # Переводим текст параграфа
        translated_text = translator.translate(paragraph.text, dest=dest_language).text

        # Добавляем новый параграф с сохранением форматирования
        new_paragraph = new_doc.add_paragraph(translated_text)
        new_paragraph.style = paragraph.style  # Сохраняем стиль параграфа

    # Сохраняем новый документ
    new_doc.save(output_file)

# Пример использования
translate_docx('input.docx', 'translated_output.docx', 'es')  # Перевод на испанский

Замечания:

Fox13th commented 2 months ago

Для реализации более сложного переводчика PDF с сохранением форматирования, вы можете использовать библиотеки PyMuPDF для извлечения текста и reportlab для создания нового PDF-документа. Также можно использовать pdfplumber для более точного извлечения текста с сохранением структуры.

Вот пример реализации, который включает обработку текстов, шрифтов и базовых форматирований:

Установка библиотек

pip install PyMuPDF pdfplumber googletrans==4.0.0-rc1 reportlab

Пример кода

import fitz  # PyMuPDF
import pdfplumber
from googletrans import Translator
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib import colors
from reportlab.lib.units import inch

def translate_pdf(input_file, output_file, dest_language='ru'):
    translator = Translator()
    new_pdf = canvas.Canvas(output_file, pagesize=letter)
    width, height = letter

    with pdfplumber.open(input_file) as pdf:
        for page in pdf.pages:
            # Извлекаем текст и его расположение
            text = page.extract_text()
            if not text:
                continue

            # Переводим текст
            translated_text = translator.translate(text, dest=dest_language).text

            # Разбиваем текст на строки для корректного отображения
            lines = translated_text.split('\n')
            y_position = height - 72  # Начальная позиция по Y

            for line in lines:
                new_pdf.drawString(72, y_position, line)
                y_position -= 12  # Понижаем позицию Y для следующей строки

                # Если достигаем нижней границы страницы, создаем новую
                if y_position < 72:
                    new_pdf.showPage()
                    y_position = height - 72

            new_pdf.showPage()  # Переход на новую страницу

    # Завершаем создание PDF
    new_pdf.save()

# Пример использования
translate_pdf('input.pdf', 'translated_output.pdf', 'es')  # Перевод на испанский

Объяснение кода

  1. Извлечение текста: Используется pdfplumber для извлечения текста с учетом его структуры. Это позволяет сохранить абзацы и строки.

  2. Перевод: Каждый абзац переводится с использованием googletrans.

  3. Создание нового PDF: reportlab используется для создания нового PDF-документа. Мы разбиваем переведенный текст на строки и добавляем их на страницу. Если текст не помещается, создается новая страница.

  4. Учет позиционирования: Мы следим за положением по вертикали (y_position), чтобы корректно размещать текст на странице.

Замечания

Если вам нужно сохранить больше форматирования или обработать специфические элементы, дайте знать, и я помогу с более детальной реализацией!