Alex11-321 commited on
Commit
045765c
·
verified ·
1 Parent(s): fa5432d

Update app.py

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