Создание аудиокниг с помощью Python
Перевод статьи How to Create Audiobooks Using Python.
Как вы, возможно, уже знаете, Python – замечательный язык программирования, потому что он позволяет нам делать практически все! Это также означает, что мы можем создавать собственное программное обеспечение. В этом уроке мы узнаем, как синтезировать речь, научим Python читать PDF-файлы и даже переведем и озвучим их!
Итак, Python должен прочитать нам PDF-файл и перевести его. Сначала мы попытаемся создать аудиокнигу на английском языке. Таким образом, первое, что мы должны сделать, – это извлечь текст из PDF. Для этого нам понадобится модуль tika. Как обычно, чтобы установить tika, нужно поколдовать с pip.
pip install tika
Tika — это модуль, используемый для обнаружения и извлечения контента. После установки нужно импортировать объект parser.
from tika import parser
Далее нам понадобится метод from_file(), принимающий два аргумента. Первый аргумент принимает имя PDF-файла, второй (дополнительный) – тип искомых данных. Если не указать второй аргумент, будет произведён поиск всех типов данных: от метаданных до самого контента. Здесь meta вернёт метаданные, text – текст, а параметр xmlContent – XML данные.
raw = parser.from_file('comment.pdf')
Теперь, получив все данные, мы должны извлечь текст. Это можно сделать, выбрав content в нашем raw:
raw_text = raw['content']
Проблема модуля Tika заключается в том, что при слишком большом количестве страниц всё может сломаться. Поэтому мы воспользуемся другим методом. Если PDF-файл довольно короткий, определённо стоит воспользоваться Tika. Однако, вы также можете использовать модуль PyPDF2.
pip install PyPDF2
Итак, приступим:
import PyPDF2
Первым делом откроем наш документ и прочитаем его, используя метод open() и класс PdfFileReader(). Метод open() принимает два аргумента: имя файла и режим чтения. Здесь rb означает “чтение бинарного файла” (“read binary”). Затем класс PdfFileReader принимает pdf_document.
pdf_document = open("welcome.pdf", "rb") pdf_document_read = PyPDF2.PdfFileReader(pdf_document)
Далее мы определяем количество страниц методом numPages. Нам это понадобится для цикла for, который будет итерироваться от страницы 1 до последней.
number_of_pages = pdf_document_read.numPages
Затем мы начинаем цикл for для счета страниц.
for page in range(1, number_of_pages):
Теперь нам нужно получить одну страницу с помощью getPage() и извлечь из неё текст методом extractText().
one_page = pdf_document_read.getPage(page) raw_text = one_page.extractText()
import pyttsx3
Вызовем init(), чтобы инициализировать модуль.
engine = pyttsx3.init()
Мы можем настроить голос, громкость и скорость при помощи engine.getProperty(). Метод setProperty() принимает два аргумента: свойство, которое необходимо изменить, и его новое значение. В нашем случае установлен женский голос (voices[1].id) с максимальной громкостью (1) и темпом 128.
oices = engine.getProperty('voices') engine.setProperty('voice', voices[1].id) volume = engine.getProperty('volume') engine.setProperty('volume', 1.0) rate = engine.getProperty('rate') engine.setProperty('rate', 128)
Чтобы синтезировать речь и прочитать текст вслух, воспользуемся методом engine.say().
engine.say(raw_text) engine.runAndWait()
Весь код будет выглядеть как-то так:
import PyPDF2 pdf_document = open("welcome.pdf", "rb") pdf_document_read = PyPDF2.PdfFileReader(pdf_document) number_of_pages = pdf_document_read.numPages for page in range(1, number_of_pages): one_page = pdf_document_read.getPage(page) raw_text = one_page.extractText() import pyttsx3 engine = pyttsx3.init() voices = engine.getProperty('voices') engine.setProperty('voice', voices[1].id) volume = engine.getProperty('volume') engine.setProperty('volume', 1.0) rate = engine.getProperty('rate') engine.setProperty('rate', 128) engine.say(raw_text) engine.runAndWait()
В данном примере у нас был английский текст, озвученный на английском. Теперь же мы попробуем перевести текст на другой язык и прослушать перевод. В этом случае первая часть кода остаётся неизменной – это всё, что касается работы с pdf. Но в начале цикла for мы кое-что изменим: добавим перевод и произведём чтение на нужном нам языке.
Первым делом установим googletrans.
pip install googletrans
Теперь мы можем приступить к переводу текста.
from googletrans import Translator
Далее вызываем Translator().
translator = Translator()
Мы воспользуемся методом translate(). В его синтаксисе первый аргумент принимает текст на перевод, а второй – язык, на который мы хотим перевести. В данном случае текст переводится на французский (‘fr’).
translated = translator.translate(raw_text, dest='fr')
Переведя текст, мы должны извлечь из него текстовую часть.
translated_2 = translated.text
Таким образом мы переведем и сохраним результат в переменной translated_2. Теперь нам нужен модуль, который будет переводить и сохранять озвученный текст в mp3. Тут нам пригодятся gTTS и PlaySound:
pip install gTTS pip install playsound import gtts from playsound import playsound
У класса gtts.gTTS() есть несколько аргументов. Однако мы будем использовать только два: первый аргумент – это текст, который нужно прочитать, а второй – язык, на котором будет прочитан текст. Мы будем читать текст на французском языке (fr).
Причина, по которой мы используем здесь gTTS вместо pyttsx3, заключается в более естественном звучании: когда текст читается на французском языке с помощью gTTS, это будет звучать так, как будто текст читает француз, а не носитель английского языка.
text = gtts.gTTS(translated_2, lang="fr")
Далее мы сохраним озвученный текст в формате mp3. Назовем его text.mp3:
text.save("text.mp3")
Чтобы проиграть сохранённый mp3, используем playsound():
playsound("text.mp3")
Получится примерно следующий код:
import PyPDF2 pdf_document = open("welcome.pdf", "rb") pdf_document_read = PyPDF2.PdfFileReader(pdf_document) number_of_pages = pdf_document_read.numPages for page in range(1, number_of_pages): one_page = pdf_document_read.getPage(page) raw_text = one_page.extractText() from googletrans import Translator translator = Translator() translated = translator.translate(raw_text, dest='fr') translated_2 = translated.text import gtts from playsound import playsound tts = gtts.gTTS(translated_2, lang="fr") tts.save("text.mp3") playsound("text.mp3")
Кодинг-марафон по Python
Реши 10 задач и выиграй 5500 рублей
Подписаться ×
- 15 views
- 0 Comment