Como todos saben la biblioteca Python Text to Speech de Google básicamente lee cualquier fragmento de texto y lo convierte a un archivo .mp3. Entonces fue cuando surgió la idea de este.
Muchos tendrán almacenados muchos libros pdf y por supuesto no leídos.
Te gusta leer libros. ¿Realmente lo haces? Yo tengo un directorio en el que guardo los libros en pdf que planeo leer, pero muy pocas veces lo hago. Así que al encontrar este proyecto, creo que el postergar esas lecturas se terminó.
- Permitir que el usuario elija un archivo .pdf
- Convierte el archivo en una cadena
- Archivo de salida .mp3.
Permitir que el usuario elija un archivo .pdf
Python puede leer archivos fácilmente. Solo necesito usar el método open («filelocation», «rb») para abrir el archivo en modo lectura. Sin embargo, no se quiere copiar y pegar archivos en el directorio del código cada vez que quiero usar el código. Entonces, para hacerlo más fácil, se usa la biblioteca tkinter para abrir una interfaz que nos permita elegir el archivo.
from tkinter import Tk
from tkinter.filedialog import askopenfilename
Tk().withdraw() # no queremos una GUI completa, así que evita que aparezca la ventana raíz
filelocation = askopenfilename() # abre el cuadro de diálogo GUI
Excelente. Ahora tenemos la ubicación del archivo almacenada en una variable de ubicación de archivo.
Permitir al usuario elegir un archivo .pdf
Convierte el archivo en una cadena
Como se mencionó anteriormente, para abrir un archivo en Python solo necesitamos usar el método open (). Pero también queremos convertir el archivo pdf en fragmentos de texto regulares. Así que bien podríamos hacerlo ahora. Para hacer eso usaremos una biblioteca llamada pdftotext.
Vamos a instalarlo:
sudo pip instalar pdftotext
Luego:
from tkinter import Tk
from tkinter.filedialog import askopenfilename
import pdftotext
Tk().withdraw() # no queremos una GUI completa, así que evita que aparezca la ventana raíz
filelocation = askopenfilename() # abre el cuadro de diálogo GUI
with open(filelocation, "rb") as f: # abre el archivo en modo lectura (rb) y llámalo f
pdf = pdftotext.PDF(f) # almacenar una versión de texto del archivo pdf f en la variable pdf
Si imprime esta variable, obtendrá una matriz de cadenas. Cada cadena es una línea en el archivo. Para ponerlos todos en un archivo .mp3, tendremos que asegurarnos de que estén todos almacenados como una sola cadena. Así que recorreremos esta matriz y agreguemos todos a una cadena.
from tkinter import Tk
from tkinter.filedialog import askopenfilename
import pdftotext
Tk().withdraw() # no queremos una GUI completa, así que evita que aparezca la ventana raíz
filelocation = askopenfilename() # abre el cuadro de diálogo GUI
with open(filelocation, "rb") as f: # abre el archivo en modo lectura (rb) y llámalo f
pdf = pdftotext.PDF(f) # almacenar una versión de texto del archivo pdf f en la variable pdf
string_of_text = ''
for text in pdf:
string_of_text += text
Ahora lo tenemos todo como un todo.
Convierta el archivo en una sola cadena
Archivo de salida .mp3
Ahora estamos listos para usar la biblioteca gTTS (texto a voz de Google). Todo lo que tenemos que hacer es pasar la cadena que hicimos, almacenar la salida en una variable, luego usar el método save () para enviar el archivo a la computadora.
Vamos a instalarlo:
sudo pip install gtts
Luego:
from tkinter import Tk
from tkinter.filedialog import askopenfilename
import pdftotext
from gtts import gTTS
Tk().withdraw() # no queremos una GUI completa, así que evita que aparezca la ventana raíz
filelocation = askopenfilename() # abre el cuadro de diálogo GUI
with open(filelocation, "rb") as f: # abre el archivo en modo lectura (rb) y llámalo f
pdf = pdftotext.PDF(f) # almacenar una versión de texto del archivo pdf f en la variable pdf
string_of_text = ''
for text in pdf:
string_of_text += text
final_file = gTTS(text=string_of_text, lang='en') # almacenar archivo en variable
final_file.save("Generated Speech.mp3") # guardar archivo en la computadora
¡Tan sencillo como eso! hemos terminado
Si desea saber más sobre cómo personalizar esta API, consulte esta página