Document Transformer allows users to define and apply transformations to documents in a flexible and robust manner, ensuring traceability of each change made to the documents.
- Flexible document transformation
- Comprehensive traceability for each transformation
- Add custom supports to multiple document formats (e.g., JSON, XML, CSV)
- Easy integration with other tools and workflows
To install Document Transformer, follow these steps:
# Install using pip
pip install document-transformer
Define custom Document class
from document_transformer import Document
class PDFDocument(Document):
"""Custom class to PDF Documents"""
class ImageDocument(Document):
"""Custom class to Image Documents"""
def saver(self, path):
self.data.save(path)
return self
Define the transformer. Specify input and output Document types
from document_transformer import DocumentTransformer
import pdf2image # install: pip install pdf2image
from typing import List
from pathlib import Path
class PDF2Images(DocumentTransformer):
input: PDFDocument = None
output: List[ImageDocument] = []
def transformer(self) -> List[ImageDocument]:
"""Split the PDF document into pages"""
images = pdf2image.convert_from_path(self.input.path)
return [
ImageDocument(
metadata={'pdf_path': Path(self.input.path).name, 'page': i+1, 'size': image.size},
data=image,
)
for i, image in enumerate(images)
]
Run your implementation
pdf_doc = PDFDocument(path="document.pdf")
images = PDF2Images(input=pdf_doc).run()
for image in images:
image.save(path=f'images/pag_{image.metadata["page"]}.jpg')
print(f"Imagen: {image.id}")
print(f"Parents: {image.parents}")
print(f"Metadata: {image.metadata}")
Or run like a pipeline, visualize the graph transformation
from document_transformer import Pipeline
from document_transformer.utils import plot_graph
# Define Pipeline, add more transformers as you need
pipeline = Pipeline(transformers=[
PDF2Images(to="images/pag_{metadata[page]}.jpg"),
# Images2Markdown(to="images/pag_{metadata[page]}.md")),
# ...
])
# Define input and get output
pdf_doc = PDFDocument(path="document.pdf")
images = pipeline.run(input=pdf_doc)
# See transfomer plot graph
plot_graph(pipeline.get_traces())
We welcome contributions! Please read our Contributing Guide to learn how you can help.
Document Transformer is licensed under the MIT License
If you have any questions or feedback, please feel free to reach out to us at johngonzalezv@gmail.com.