Spaces:
Sleeping
Sleeping
File size: 3,963 Bytes
2ffbc3f 045765c adc6df0 2ffbc3f adc6df0 045765c adc6df0 045765c adc6df0 2ffbc3f adc6df0 045765c 2ffbc3f 045765c adc6df0 2ffbc3f 045765c adc6df0 2ffbc3f 045765c 2ffbc3f adc6df0 2ffbc3f adc6df0 2ffbc3f adc6df0 2ffbc3f 045765c 2ffbc3f 045765c adc6df0 2ffbc3f 045765c adc6df0 045765c 2ffbc3f 045765c 2ffbc3f adc6df0 045765c adc6df0 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
from PyPDF2 import PdfReader
from transformers import pipeline, MarianMTModel, MarianTokenizer
import torch
import gradio as gr
from gtts import gTTS
# Проверка доступности GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Инициализация модели для суммаризации
summarizer = pipeline("summarization", model="philschmid/bart-large-cnn-samsum", device=0 if device.type == "cuda" else -1)
# Инициализация модели для перевода
translation_model_name = "Helsinki-NLP/opus-mt-en-ru"
translation_tokenizer = MarianTokenizer.from_pretrained(translation_model_name)
translation_model = MarianMTModel.from_pretrained(translation_model_name).to(device)
def parse_pdf(pdf_file):
"""Функция для извлечения текста из PDF файла."""
reader = PdfReader(pdf_file)
extracted_text = ""
for page in reader.pages:
extracted_text += page.extract_text() or ""
return extracted_text
def summarize(text, max_length=130, min_length=30):
"""Функция для суммаризации текста."""
# Разделяем текст на части, если он слишком большой
max_chunk_size = 1024
chunks = [text[i:i + max_chunk_size] for i in range(0, len(text), max_chunk_size)]
summaries = []
for chunk in chunks:
result = summarizer(chunk, max_length=max_length, min_length=min_length, do_sample=False)
summaries.append(result[0]['summary_text'])
return " ".join(summaries)
def translate(text):
"""Функция для перевода текста на русский."""
# Токенизация и перевод
inputs = translation_tokenizer(text, return_tensors="pt", truncation=True, padding=True).to(device)
translated_tokens = translation_model.generate(**inputs)
translated_text = translation_tokenizer.decode(translated_tokens[0], skip_special_tokens=True)
return translated_text
def text_to_speech(text, language='ru'):
"""Функция для преобразования текста в аудиофайл."""
tts = gTTS(text=text, lang=language)
audio_file = "output.mp3"
tts.save(audio_file)
return audio_file
def process_pdf(pdf_file, language):
"""Основная функция обработки PDF файла."""
if not pdf_file:
return "No input provided."
# Извлечение текста из PDF
extracted_text = parse_pdf(pdf_file)
print(f"Extracted Text: {extracted_text}")
# Суммаризация текста
summary = summarize(extracted_text)
print(f"Summary: {summary}")
# Если выбран русский язык, переводим текст
if language == "rus":
translated_text = translate(summary)
print(f"Translated Text: {translated_text}")
final_text = translated_text
audio_language = 'ru'
else:
final_text = summary
audio_language = 'en'
# Преобразование текста в аудио
audio_file = text_to_speech(final_text, language=audio_language)
return final_text, audio_file
# Создание Gradio интерфейса
with gr.Blocks() as demo:
gr.Markdown("# PDF Summarizer, Translator, and Text-to-Speech")
gr.Markdown("Upload a PDF file to summarize, translate (if needed), and convert to audio.")
language = gr.Radio(choices=["eng", "rus"], label="Output Language", value="rus")
pdf_input = gr.File(label="Upload PDF File", type="filepath")
text_output = gr.Textbox(label="Processed Text", lines=10)
audio_output = gr.Audio(label="Generated Audio", type="filepath")
process_button = gr.Button("Process PDF")
process_button.click(process_pdf, inputs=[pdf_input, language], outputs=[text_output, audio_output])
# Запуск приложения
demo.launch(debug=True) |