138 lines
3.6 KiB
ReStructuredText
138 lines
3.6 KiB
ReStructuredText
===========
|
|
split-miner
|
|
===========
|
|
|
|
|
|
Description
|
|
===========
|
|
|
|
**split-miner** is a Python implementation of the Split Miner algorithm
|
|
for automated discovery of BPMN process models from event logs.
|
|
|
|
Split Miner (Augusto et al., 2017/2019) produces simple process models
|
|
with low branching complexity and consistently high and balanced fitness
|
|
and precision, while being guaranteed to produce deadlock-free models
|
|
with concurrency.
|
|
|
|
This package implements Split Miner 1.0 with the following pipeline:
|
|
|
|
1. DFG and loops discovery
|
|
2. Concurrency discovery
|
|
3. Edge filtering
|
|
4. Split gateways discovery
|
|
5. Join gateways discovery (via RPST / SPQR-tree)
|
|
6. OR-joins minimization (via dominator tree)
|
|
|
|
Features:
|
|
|
|
- Pure Python --- no compiled extensions.
|
|
- Implements Split Miner 1.0 from the original papers.
|
|
- Uses SPQR-tree for correct RPST computation.
|
|
- Typed package with PEP 561 support.
|
|
- Requires Python 3.10 or later.
|
|
|
|
|
|
Installation
|
|
============
|
|
|
|
You can install split-miner with ``pip``:
|
|
|
|
::
|
|
|
|
pip install split-miner
|
|
|
|
You may also install the latest source from the
|
|
`split-miner GitHub repository`_.
|
|
|
|
::
|
|
|
|
pip install git+https://github.com/imacat/split-miner.git
|
|
|
|
|
|
Quick Start
|
|
===========
|
|
|
|
.. code-block:: python
|
|
|
|
from split_miner import BPMNModel, split_miner
|
|
|
|
# Create an event log (trace -> frequency)
|
|
traces: dict[tuple[str, ...], int] = {
|
|
("a", "b", "c", "d"): 10,
|
|
("a", "c", "b", "d"): 10,
|
|
}
|
|
|
|
# Discover a BPMN model
|
|
model: BPMNModel = split_miner(traces)
|
|
|
|
# Inspect the model
|
|
print(f"Tasks: {len(model.tasks)}")
|
|
print(f"Gateways: {len(model.gateways)}")
|
|
print(f"Edges: {len(model.edges)}")
|
|
|
|
|
|
Parameters
|
|
==========
|
|
|
|
- **epsilon** (float, 0--1): Controls concurrency detection sensitivity.
|
|
Lower values require more balanced directly-follows frequencies to
|
|
detect concurrency. Default: 0.33.
|
|
- **eta** (float, 0--1): Controls edge filtering / retention.
|
|
Lower values retain more edges, resulting in higher fitness at the
|
|
cost of lower precision. Default: 0.8.
|
|
|
|
|
|
References
|
|
==========
|
|
|
|
- A. Augusto, R. Conforti, M. Dumas, M. La Rosa, and A. Polyvyanyy,
|
|
"Split Miner: Automated Discovery of Accurate and Simple Business
|
|
Process Models from Event Logs," *Knowledge and Information Systems*,
|
|
vol. 59, no. 2, pp. 251--284, 2019.
|
|
`doi:10.1007/s10115-018-1214-x`_
|
|
|
|
- A. Augusto, R. Conforti, M. Dumas, M. La Rosa, and
|
|
A. Polyvyanyy, "Split Miner: Discovering Accurate and Simple
|
|
Business Process Models from Event Logs," *Proc. ICDM 2017*,
|
|
pp. 1--10, 2017. `doi:10.1109/ICDM.2017.9`_
|
|
|
|
|
|
Acknowledgments
|
|
===============
|
|
|
|
This project was implemented from scratch in Python based on the
|
|
original Split Miner papers.
|
|
|
|
Development was assisted by `Claude Code`_ (Anthropic).
|
|
|
|
|
|
Copyright
|
|
=========
|
|
|
|
Copyright (c) 2026 imacat.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
|
|
|
|
Authors
|
|
=======
|
|
|
|
| imacat
|
|
| imacat@mail.imacat.idv.tw
|
|
| 2026/3/10
|
|
|
|
.. _split-miner GitHub repository: https://github.com/imacat/split-miner
|
|
.. _doi\:10.1007/s10115-018-1214-x: https://doi.org/10.1007/s10115-018-1214-x
|
|
.. _doi\:10.1109/ICDM.2017.9: https://doi.org/10.1109/ICDM.2017.9
|
|
.. _Claude Code: https://claude.com/claude-code
|