Skip to main content

A simple python framework for building data processing pipelines

Project description

Pypeliner

pypeliner is a simple python framework for building data processing pipelines.

you can check out the documentation here.

and checkout some examples here.

Installation

it can be simply installing using pip:

pip install simple-pypeliner

Getting Started

Let's say we want to build a pipeline for processing textual data coming from a file. we will need 3 main components to achieve this using pypeliner.

Reader

first we will need a reader for reading the file, and it can be defined like the following:

from pypeliner.readers.base import BaseReader

class FileReader(BaseReader):
    def __init__(self, file_path: str) -> None:
        self.file_path = file_path

    def read(self) -> str:
        with open(self.file_path, "r") as file_handler:
            return file_handler.read()

inheriting from BaseReader makes sure that the read method is implemented to be used later within the Reader. the code basically is reading a file and returning its content as a string.

Processors

next we will define our processing logic, lets say we want to make all letters in the text file lower case, then remove stop words i.g: but, and, or, etc after that remove numbers.

to achieve that we will write a processor for each one of these tasks.

each processor should define its own process method. a processor will receive the state it needs to process from the Runner.

if state is passed the that processor will use the state instead of the state passed by the runner, this is achieved using the super call for process method and passing state there. it is recommended to always call super for the process method as a best practice.

PROCESSOR_NAME is a verbose name for a processor.

1- Lower Case Processor

class LowerCaseProcessor(BaseProcessor):
    PROCESSOR_NAME = "Lower Case Processor"

    def process(self, state: Any = None) -> Any:
        return state.lower()

2- Remove Stop Words Processor

class RemoveStopWordsProcessor(BaseProcessor):
    PROCESSOR_NAME = "Remove Stop Words Processor"

    def process(self, state: Any = None) -> Any:
        stop_words = [
            "the", "to", "and", "a",
            "in", "it", "is", "am",
            "I", "that", "had", "on",
            "for", "be", "were", "was",
            "of", "or", "it", "an",
        ]

        result = ""

        for stop_word in stop_words:
            result = re.sub(
                rf"\W+{stop_word.title()}\W+", " ",
                re.sub(
                    rf"\W+{stop_word}\W+", " ",
                    state
                )
            )

        return result

3- Remove Numbers Processor

class RemoveNumbersProcessor(BaseProcessor):
    PROCESSOR_NAME = "Remove Numbers Processor"

    def process(self, state: Any = None) -> Any:
        return re.sub(r"\d+", "", state)

Runner

the runner is the place where everything comes together, it will use the Reader to load the file and define the running loop for the Processor

we'll be using the built in BaseRunner

from runners.base import BaseRunner

runner = BaseRunner(
    processors=[
        LowerCaseProcessor(),
        RemoveStopWordsProcessor(),
        RemoveNumbersProcessor(),
    ],
    reader=FileReader(
        file_path="test.txt"
    ),
    verbose=True,
    run_timers=True
)

print(runner.run())

processors parameter will set the processors of the pipeline and also its order.

reader parameter will set the reader of the pipeline to be the file reader we defined earlier.

verbose parameter will print the current processor that is running.

run_timers parameter will print the time consumed by each processor to run.

for more information visit the documentation at pypeliner

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simple-pypeliner-0.0.3.tar.gz (11.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

simple_pypeliner-0.0.3-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file simple-pypeliner-0.0.3.tar.gz.

File metadata

  • Download URL: simple-pypeliner-0.0.3.tar.gz
  • Upload date:
  • Size: 11.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for simple-pypeliner-0.0.3.tar.gz
Algorithm Hash digest
SHA256 fa6a049de89738d995f2d7099e27249757bc19a9988c93b439059a66e45ae974
MD5 20300129c20862af2606ad766ea618da
BLAKE2b-256 c8eb2d50d4e223f89be931dc1db91b5c54ee12902e415f10f4f355dcae23f96c

See more details on using hashes here.

File details

Details for the file simple_pypeliner-0.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for simple_pypeliner-0.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 32b7aa5e1167fb9bf7bfe295b78d3db92de95a5cc24ef5007f6b51a719394697
MD5 78f6e59c5f31d3b958553e60c188b825
BLAKE2b-256 06f45ddf89ccfb8d031a41e473b03f30a8062d4a5f05a68e62cdebcd39706cb0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page