พื้นที่เก็บข้อมูลของ GitHub นี้ประกอบด้วยการใช้ Python ของแนวคิด 'Resonance ที่คล้ายคลึงกัน' สำหรับกิจกรรมการจับคู่ในสองโมเดลกระบวนการ เป้าหมายของอัลกอริทึมคือการขยายแนวคิดของความคล้ายคลึงกันของฉลากและเพื่อชมเชยด้วยความคล้ายคลึงกันตามบริบทระดับโลก กระดาษและความคิดต้นฉบับได้รับการประพันธ์โดย Nour Assy, Boudewijn F. Van Dongen และ Wil MP Van der Aalst ที่มหาวิทยาลัยเทคนิคแห่ง Eindhoven สำหรับการอ้างอิงทฤษฎีโปรดดูที่กระดาษต้นฉบับ (ลิงก์) หรือคุณสามารถตรวจสอบสไลด์การนำเสนอที่ผู้เขียนใช้ที่นี่ (ดาวน์โหลด PDF)
อัลกอริทึมได้รับการพัฒนาบน Python 3.9 ไฟล์ข้อกำหนดที่ให้ไว้ TXT PIP สามารถใช้ในการติดตั้งการอ้างอิงทั้งหมดที่จำเป็นสำหรับโปรแกรมในการทำงาน ฉันขอแนะนำให้ติดตั้งสิ่งนี้ในสภาพแวดล้อมเสมือนจริง การพึ่งพาหลักคือ:
ตัวเลือก: เพื่อให้ได้ค่าความคล้ายคลึงกันของฉลากเริ่มต้นสำหรับการทดสอบจะใช้ Spacy Package การพึ่งพาเหล่านี้มีขนาดค่อนข้างใหญ่ (700MB+) และอยู่ในไฟล์แยกต่างหาก (ข้อกำหนด _spacy.txt) หากคุณวางแผนที่จะใช้แพ็คเกจนี้ให้ติดตั้งด้วย หากคุณกำลังมองหาการใช้การวัดความคล้ายคลึงกันเริ่มต้นของคุณเองตรวจสอบให้แน่ใจว่าได้สร้างเอาต์พุต SIML ในรูปแบบของพจนานุกรมที่คีย์: tuple [str, str] -> ค่า: ลอย
ตรวจสอบให้แน่ใจว่าได้วางที่เก็บข้อมูลที่ดาวน์โหลดลงในโฟลเดอร์แพคเกจไซต์ Python ของสภาพแวดล้อม (เช่น. /usr/local/anaconda3/envs/myenv/lib/python3.9/site-packages/)
คำเตือน: ในการคำนวณความคล้ายคลึงกันของฉลากเริ่มต้นฉันได้เลือกที่จะใช้ Spacy พร้อมกับโมเดลขนาดใหญ่ จะใช้เวลาสักครู่ในการดาวน์โหลด การติดตั้งผ่านไฟล์ข้อกำหนด. txt จะดาวน์โหลดโมดูลเพิ่มเติมโดยอัตโนมัติ หากการติดตั้งการพึ่งพาด้วยตนเองตรวจสอบให้แน่ใจว่าได้รับโมดูลนี้จากที่นี่
Model1: Source Model (Petri Net)
Model2: รุ่นเป้าหมาย (Petri Net)
SIML: ค่าความคล้ายคลึงกันของฉลากเริ่มต้น (พจนานุกรม | คีย์: tuple [str, str] -> float)
ตอบ: กำหนดค่าความคล้ายคลึงกันควรขึ้นอยู่กับความคล้ายคลึงกันตามบริบทของโลก 0 ไม่ได้เลย 1.0 ทั้งหมดเป็นของมัน A ∈ [0, 1]
K: กำหนดระยะห่างจากการเปลี่ยนแปลงที่ควรได้รับการพิจารณาว่าเป็นเพื่อนบ้าน k ∈ N+
L_THRESH: กำหนดเกณฑ์อัตราส่วนความน่าจะเป็นของการจับคู่ที่จะถือว่าคล้ายกัน l_thresh ∈ [0, 1]
import pm4py
from similarity_resonance . src . label_sim import algorithm as label_sim
from similarity_resonance . src . similarity_resonance import apply as sim_res
from similarity_resonance . src . matching import match_single
petri1 = pm4py . read_petri_net ( 'link/to/petri/net/1' )
petri2 = pm4py . read_petri_net ( 'link/to/petri/net/2' )
siml = label_sim ( petri1 [ 0 ], petri2 [ 0 ])
similarity_values = sim_res ( petri1 , petri2 , siml , a = 0.3 , k = 2 , l_thresh = 0.2 )
top_matches = match_single ( similarity_values )
for key , value in top_matches . items ():
print ( key , value )