Source code for pm4py.objects.log.util.insert_classifier
'''
PM4Py – A Process Mining Library for Python
Copyright (C) 2024 Process Intelligence Solutions UG (haftungsbeschränkt)
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see this software project's root or
visit <https://www.gnu.org/licenses/>.
Website: https://processintelligence.solutions
Contact: info@processintelligence.solutions
'''
[docs]
def search_act_class_attr(log, force_activity_transition_insertion=False):
"""
Search among classifiers expressed in the log one that is good for the process model extraction
Parameters
-----------
log
Trace log
force_activity_transition_insertion
Optionally force the activitiy+transition classifier insertion
Returns
-----------
log
Trace log (plus eventually one additional event attribute as the classifier)
"""
classifier = None
if (
log.classifiers
and "Activity classifier" in log.classifiers
and log.classifiers["Activity classifier"]
):
classifier = "Activity classifier"
elif (
log.classifiers
and "MXML Legacy Classifier" in log.classifiers
and log.classifiers["MXML Legacy Classifier"]
):
classifier = "MXML Legacy Classifier"
return insert_activity_classifier_attribute(
log,
classifier,
force_activity_transition_insertion=force_activity_transition_insertion,
)
[docs]
def insert_activity_classifier_attribute(
log, classifier, force_activity_transition_insertion=False
):
"""
Insert the specified classifier as additional event attribute in the log
Parameters
-----------
log
Trace log
classifier
Event classifier
force_activity_transition_insertion
Optionally force the activitiy+transition classifier insertion
Returns
--------
log
Trace log (plus eventually one additional event attribute as the classifier)
classifier_attr_key
Attribute name of the attribute that contains the classifier value
"""
classifier_attr_key = None
if classifier is not None:
classifier_attr_key = "@@classifier"
for trace in log:
for event in trace:
classifier_value = "+".join(
[event[x] for x in log.classifiers[classifier]]
)
event[classifier_attr_key] = classifier_value
elif force_activity_transition_insertion:
if (
len(log) > 0
and len(log[0]) > 0
and "concept:name" in log[0][0]
and "lifecycle:transition" in log[0][0]
):
classifier_attr_key = "@@classifier"
for trace in log:
for event in trace:
classifier_value = (
event["concept:name"]
+ "+"
+ event["lifecycle:transition"]
)
event[classifier_attr_key] = classifier_value
return log, classifier_attr_key
[docs]
def insert_trace_classifier_attribute(log, classifier):
"""
Insert the specified classifier as additional trace attribute in the log
Parameter
-----------
log
Trace log
classifier
Event classifier
Returns
-----------
log
Trace log (plus eventually one additional event attribute as the classifier)
classifier_attr_key
Attribute name of the attribute that contains the classifier value
"""
classifier_attr_key = None
if classifier is not None:
classifier_attr_key = "@@traceClassifier"
for trace in log:
classifier_value = "+".join(
[trace.attributes[x] for x in log.classifiers[classifier]]
)
trace.attributes[classifier_attr_key] = classifier_value
return log, classifier_attr_key