pyxreader
pyxreader is a Python module that streamlines the process of reading and vocalizing the content of files using text-to-speech capabilities in a memory-efficient way. It provides a flexible and extensible architecture to support various file formats and allows for custom methods that the user can choose to extract text from various files.
Features
- Read and vocalize the content of any file.
- Easily configure reading speed, volume, and voice.
- Support for custom dependency injection, enabling users to define their own text extraction logic for various file formats. The module comes with native support for PDFs.
Installation
pip install pyxreader
if you're on linux, for the speech capabilities you might also need to install:
sudo apt update && sudo apt install espeak ffmpeg libespeak1
Note: The text-to-speech capabilities are provided by pyttsx3. If you encounter any issues with speech not functioning on your system, make sure to consult the library for more information.
Configuration
The Reader class allows you to configure various settings:
- speed: Reading speed in words per minute (default: 200).
- volume: Volume level, a float between 0.0 and 1.0 (default: 1.0).
- voice: The voice to use for reading (default: operating system).
Usage
Normal text file reader
from pyxreader import TextReader
TextReader("Hey there!").say().execute()
TextReader("Whatever it read").save("output.mp3").execute()
TextReader().read_file("reader.py").execute()
Custom files (PDFs by default)
from pyxreader import AdaptableReader
AdaptableReader(filename="example.pdf").read()
This uses PDFTextIterator
to parse PDFs and extract text per page
How it works
from pyxreader import PDFTextIterator
per_page = PDFTextIterator("any.pdf")
for line in per_page:
print(line)
If the file you have is not a PDF like
AdaptableReader(filename="example.custom").read()
Then define your own custom file iterator
from pyxreader import AdaptableReader
from pyxreader.iterators import BaseIterator
class CustomIterator(BaseIterator):
def __init__(self, file: str):
super().__init__(file)
def __iter__(self) -> "CustomIterator":
"""
Method to initialize the custom iterator.
"""
pass
def __next__(self) -> str:
"""
Method to extract the next item in the iteration.
"""
pass
AdaptableReader("example.custom").inject_iterator(CustomIterator).read()