{ "cells": [ { "cell_type": "markdown", "id": "96ec678e-b20c-4213-8616-542010f46342", "metadata": {}, "source": [ "\n", "# Clean-Clean Entity Resolution Tutorial\n", "\n", "In this notebook we present the pyJedAI approach in the well-known ABT-BUY dataset. Clean-Clean ER in the link discovery/deduplication between two sets of entities.\n" ] }, { "cell_type": "markdown", "id": "9c49d2b7-11b5-40b3-9341-de98608dde13", "metadata": {}, "source": [ "Dataset: __Abt-Buy dataset__ (D1)\n", "\n", "The Abt-Buy dataset for entity resolution derives from the online retailers Abt.com and Buy.com. The dataset contains 1076 entities from abt.com and 1076 entities from buy.com as well as a gold standard (perfect mapping) with 1076 matching record pairs between the two data sources. The common attributes between the two data sources are: product name, product description and product price." ] }, { "cell_type": "markdown", "id": "744b3017-9a5c-4d3c-8e0a-fe39b069b647", "metadata": {}, "source": [ "## How to install?\n", "\n", "pyJedAI is an open-source library that can be installed from PyPI.\n", "\n", "For more: [pypi.org/project/pyjedai/](https://pypi.org/project/pyjedai/)" ] }, { "cell_type": "code", "execution_count": null, "id": "029a5825-799d-4c3f-a6cd-a75e257cadcc", "metadata": {}, "outputs": [], "source": [ "!pip install pyjedai -U" ] }, { "cell_type": "code", "execution_count": 2, "id": "462695ec-3af1-4048-9971-9ed0bce0f07b", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Name: pyjedai\n", "Version: 0.1.0\n", "Summary: An open-source library that builds powerful end-to-end Entity Resolution workflows.\n", "Home-page: \n", "Author: \n", "Author-email: Konstantinos Nikoletos , George Papadakis , Jakub Maciejewski , Manolis Koubarakis \n", "License: Apache Software License 2.0\n", "Location: /home/jm/anaconda3/envs/pyjedai-new/lib/python3.8/site-packages\n", "Requires: faiss-cpu, gensim, matplotlib, matplotlib-inline, networkx, nltk, numpy, optuna, ordered-set, pandas, pandas-profiling, pandocfilters, plotly, py-stringmatching, PyYAML, rdflib, rdfpandas, regex, scipy, seaborn, sentence-transformers, strsim, strsimpy, tomli, tqdm, transformers, valentine\n", "Required-by: \n" ] } ], "source": [ "!pip show pyjedai" ] }, { "cell_type": "markdown", "id": "7b4c62c5-6581-4d2e-9d44-c7c02f43d441", "metadata": {}, "source": [ "Imports" ] }, { "cell_type": "code", "execution_count": 3, "id": "6db50d83-51d8-4c95-9f27-30ef867338f2", "metadata": {}, "outputs": [], "source": [ "import os\n", "import sys\n", "import pandas as pd\n", "import networkx\n", "from networkx import draw, Graph" ] }, { "cell_type": "code", "execution_count": 4, "id": "4d4e6a90-9fd8-4f7a-bf4f-a5b994e0adfb", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[nltk_data] Downloading package stopwords to /home/jm/nltk_data...\n", "[nltk_data] Package stopwords is already up-to-date!\n" ] } ], "source": [ "import pyjedai\n", "from pyjedai.utils import (\n", " text_cleaning_method,\n", " print_clusters,\n", " print_blocks,\n", " print_candidate_pairs\n", ")\n", "from pyjedai.evaluation import Evaluation" ] }, { "cell_type": "markdown", "id": "451bf970-4425-487b-8756-776abb9536ea", "metadata": {}, "source": [ "# Workflow Architecture\n", "\n", "![workflow-example.png](https://github.com/AI-team-UoA/pyJedAI/blob/main/docs/img/workflow-example.png?raw=true)" ] }, { "cell_type": "markdown", "id": "af77914f-5e76-4da8-a0ad-1c53e0111a0f", "metadata": {}, "source": [ "# Data Reading\n", "\n", "pyJedAI in order to perfrom needs only the tranformation of the initial data into a pandas DataFrame. Hence, pyJedAI can function in every structured or semi-structured data. In this case Abt-Buy dataset is provided as .csv files. \n" ] }, { "cell_type": "code", "execution_count": 5, "id": "e6aabec4-ef4f-4267-8c1e-377054e669d2", "metadata": {}, "outputs": [], "source": [ "from pyjedai.datamodel import Data\n", "from pyjedai.evaluation import Evaluation" ] }, { "cell_type": "code", "execution_count": 6, "id": "3d3feb89-1406-4c90-a1aa-dc2cf4707739", "metadata": {}, "outputs": [], "source": [ "d1 = pd.read_csv(\"./../data/ccer/D2/abt.csv\", sep='|', engine='python', na_filter=False)\n", "d2 = pd.read_csv(\"./../data/ccer/D2/buy.csv\", sep='|', engine='python', na_filter=False)\n", "gt = pd.read_csv(\"./../data/ccer/D2/gt.csv\", sep='|', engine='python')\n", "\n", "data = Data(dataset_1=d1,\n", " id_column_name_1='id',\n", " dataset_2=d2,\n", " id_column_name_2='id',\n", " ground_truth=gt)" ] }, { "cell_type": "markdown", "id": "5d8a8a78-858e-4c79-90fe-197a68e95e11", "metadata": {}, "source": [ "pyJedAI offers also dataset analysis methods (more will be developed)" ] }, { "cell_type": "code", "execution_count": 7, "id": "7cb87af2-adda-49e0-82cc-b1a5f7a595ef", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "------------------------- Data -------------------------\n", "Type of Entity Resolution: Clean-Clean\n", "Dataset-1:\n", "\tNumber of entities: 1076\n", "\tNumber of NaN values: 0\n", "\tAttributes: \n", "\t\t ['name', 'description', 'price']\n", "Dataset-2:\n", "\tNumber of entities: 1076\n", "\tNumber of NaN values: 0\n", "\tAttributes: \n", "\t\t ['name', 'description', 'price']\n", "\n", "Total number of entities: 2152\n", "Number of matching pairs in ground-truth: 1076\n", "-------------------------------------------------------- \n", "\n" ] } ], "source": [ "data.print_specs()" ] }, { "cell_type": "code", "execution_count": 8, "id": "b822d7c0-19a2-4050-9554-c35a208bb848", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnamedescriptionprice
00Sony Turntable - PSLX350HSony Turntable - PSLX350H/ Belt Drive System/ ...
11Bose Acoustimass 5 Series III Speaker System -...Bose Acoustimass 5 Series III Speaker System -...399
22Sony Switcher - SBV40SSony Switcher - SBV40S/ Eliminates Disconnecti...49
33Sony 5 Disc CD Player - CDPCE375Sony 5 Disc CD Player- CDPCE375/ 5 Disc Change...
44Bose 27028 161 Bookshelf Pair Speakers In Whit...Bose 161 Bookshelf Speakers In White - 161WH/ ...158
\n", "
" ], "text/plain": [ " id name \\\n", "0 0 Sony Turntable - PSLX350H \n", "1 1 Bose Acoustimass 5 Series III Speaker System -... \n", "2 2 Sony Switcher - SBV40S \n", "3 3 Sony 5 Disc CD Player - CDPCE375 \n", "4 4 Bose 27028 161 Bookshelf Pair Speakers In Whit... \n", "\n", " description price \n", "0 Sony Turntable - PSLX350H/ Belt Drive System/ ... \n", "1 Bose Acoustimass 5 Series III Speaker System -... 399 \n", "2 Sony Switcher - SBV40S/ Eliminates Disconnecti... 49 \n", "3 Sony 5 Disc CD Player- CDPCE375/ 5 Disc Change... \n", "4 Bose 161 Bookshelf Speakers In White - 161WH/ ... 158 " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.dataset_1.head(5)" ] }, { "cell_type": "code", "execution_count": 9, "id": "5c26b595-5e02-4bfc-8e79-e476ab2830ef", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnamedescriptionprice
00Linksys EtherFast EZXS88W Ethernet Switch - EZ...Linksys EtherFast 8-Port 10/100 Switch (New/Wo...
11Linksys EtherFast EZXS55W Ethernet Switch5 x 10/100Base-TX LAN
22Netgear ProSafe FS105 Ethernet Switch - FS105NANETGEAR FS105 Prosafe 5 Port 10/100 Desktop Sw...
33Belkin Pro Series High Integrity VGA/SVGA Moni...1 x HD-15 - 1 x HD-15 - 10ft - Beige
44Netgear ProSafe JFS516 Ethernet SwitchNetgear ProSafe 16 Port 10/100 Rackmount Switc...
\n", "
" ], "text/plain": [ " id name \\\n", "0 0 Linksys EtherFast EZXS88W Ethernet Switch - EZ... \n", "1 1 Linksys EtherFast EZXS55W Ethernet Switch \n", "2 2 Netgear ProSafe FS105 Ethernet Switch - FS105NA \n", "3 3 Belkin Pro Series High Integrity VGA/SVGA Moni... \n", "4 4 Netgear ProSafe JFS516 Ethernet Switch \n", "\n", " description price \n", "0 Linksys EtherFast 8-Port 10/100 Switch (New/Wo... \n", "1 5 x 10/100Base-TX LAN \n", "2 NETGEAR FS105 Prosafe 5 Port 10/100 Desktop Sw... \n", "3 1 x HD-15 - 1 x HD-15 - 10ft - Beige \n", "4 Netgear ProSafe 16 Port 10/100 Rackmount Switc... " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.dataset_2.head(5)" ] }, { "cell_type": "code", "execution_count": 10, "id": "b3c9827e-a08a-47b2-a7f2-6f3f72184a17", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
D1D2
0206216
16046
2182160
\n", "
" ], "text/plain": [ " D1 D2\n", "0 206 216\n", "1 60 46\n", "2 182 160" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data.ground_truth.head(3)" ] }, { "cell_type": "markdown", "id": "19891fc5-960e-4df1-a72a-e4533a74a761", "metadata": {}, "source": [ "### Data cleaning step (optional)\n", "\n", "pyJedAI offers 4 types of text cleaning/processing. \n", "\n", "- Stopwords removal\n", "- Punctuation removal\n", "- Numbers removal\n", "- Unicodes removal" ] }, { "cell_type": "code", "execution_count": 11, "id": "e471e48c-c882-4c74-b94f-4c1dff9fa36c", "metadata": {}, "outputs": [], "source": [ "data.clean_dataset(remove_stopwords = False, \n", " remove_punctuation = False, \n", " remove_numbers = False,\n", " remove_unicodes = False)" ] }, { "cell_type": "markdown", "id": "9c068252-4a69-405a-a320-c2875ec08ea5", "metadata": {}, "source": [ "## Block Building\n", "\n", "It clusters entities into overlapping blocks in a lazy manner that relies on unsupervised blocking keys: every token in an attribute value forms a key. Blocks are then extracted, possibly using a transformation, based on its equality or on its similarity with other keys.\n", "\n", "The following methods are currently supported:\n", "\n", "- Standard/Token Blocking\n", "- Sorted Neighborhood\n", "- Extended Sorted Neighborhood\n", "- Q-Grams Blocking\n", "- Extended Q-Grams Blocking\n", "- Suffix Arrays Blocking\n", "- Extended Suffix Arrays Blocking" ] }, { "cell_type": "code", "execution_count": 12, "id": "9c1b6213-a218-40cf-bc72-801b77d28da9", "metadata": {}, "outputs": [], "source": [ "from pyjedai.block_building import (\n", " StandardBlocking,\n", " QGramsBlocking,\n", " ExtendedQGramsBlocking,\n", " SuffixArraysBlocking,\n", " ExtendedSuffixArraysBlocking,\n", ")" ] }, { "cell_type": "code", "execution_count": 13, "id": "9741f0c4-6250-455f-9c88-b8dc61ab7d4d", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "bd8dfde5fb8e4dbd95cd43e14a2eb850", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Standard Blocking: 0%| | 0/2152 [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
id1id2
00205
10193
2053
3055
40697
\n", "" ], "text/plain": [ " id1 id2\n", "0 0 205\n", "1 0 193\n", "2 0 53\n", "3 0 55\n", "4 0 697" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pairs_df.head(5)" ] }, { "cell_type": "markdown", "id": "6aeff39a-b51b-4166-a55b-f8452ec258a7", "metadata": {}, "source": [ "## Entity Matching\n", "\n", "It compares pairs of entity profiles, associating every pair with a similarity in [0,1]. Its output comprises the similarity graph, i.e., an undirected, weighted graph where the nodes correspond to entities and the edges connect pairs of compared entities." ] }, { "cell_type": "code", "execution_count": 28, "id": "f479d967-8bac-4870-99bd-68c01e75747b", "metadata": {}, "outputs": [], "source": [ "from pyjedai.matching import EntityMatching" ] }, { "cell_type": "code", "execution_count": 29, "id": "ae7b1e6a-e937-44fe-bfe5-34696ea1156c", "metadata": {}, "outputs": [], "source": [ "em = EntityMatching(\n", " metric='cosine',\n", " tokenizer='char_tokenizer',\n", " vectorizer='tfidf',\n", " qgram=3,\n", " similarity_threshold=0.0\n", ")\n", "\n", "pairs_graph = em.predict(candidate_pairs_blocks, data, tqdm_disable=True)" ] }, { "cell_type": "code", "execution_count": 30, "id": "4d606bfc-3265-4042-93f3-22a1117c4886", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "draw(pairs_graph)" ] }, { "cell_type": "code", "execution_count": 31, "id": "4a2a5f4a-6ffa-4c16-ae49-ff4fec4c467d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "***************************************************************************************************************************\n", " Μethod: Entity Matching\n", "***************************************************************************************************************************\n", "Method name: Entity Matching\n", "Parameters: \n", "\tMetric: cosine\n", "\tAttributes: None\n", "\tSimilarity threshold: 0.0\n", "\tTokenizer: char_tokenizer\n", "\tVectorizer: tfidf\n", "\tQgrams: 3\n", "Runtime: 2.3469 seconds\n", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n", "Performance:\n", "\tPrecision: 10.86% \n", "\tRecall: 91.45%\n", "\tF1-score: 19.41%\n", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n" ] } ], "source": [ "_ = em.evaluate(pairs_graph)" ] }, { "cell_type": "markdown", "id": "07ecd3d3-aa47-447c-af4d-cdd4744ca7c1", "metadata": {}, "source": [ "### How to set a valid similarity threshold?\n", "\n", "Configure similariy threshold with a Grid-Search or with an Optuna search. Also pyJedAI provides some visualizations on the distributions of the scores.\n", "\n", "For example with a classic histogram:\n" ] }, { "cell_type": "code", "execution_count": 32, "id": "c04c0482-a0d2-4ebf-b9c8-f6cff1863e5d", "metadata": {}, "outputs": [ { "data": { "image/png": "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SopsNptsNpuqVasmX19fderUSY8//riysrIqtNZBgwbpq6++KvPjhoaGauHChWV+3F+CIAUAAIAKlZCQoEceeUTbtm3T8ePHy7Uvy7JUVFRUrn2YOHbsmGw22zW3P3jwoGJiYtS1a1dt27ZN+/fv16JFi+Th4aHi4mKnthkZGTp+/Lh2796tJ554QsnJybr55pu1f//+sj6NK/Ly8lL9+vUrrD9XIkgBAACgwtjtdq1evVoPPfSQYmNjtWzZMse2+++/X4MGDXJqX1hYqLp162r58uWSpJKSEsXHx6tx48by8vJShw4d9M477zjaXxyd2bhxo7p06SJPT09t375dR44c0d13362AgADVrl1bt9xyi5KTk536ysrKUmxsrLy8vNS4cWOtXLnykpGQ06dPa8yYMapXr558fHx055136vPPPy/7N+q/PvzwQwUGBmrevHm6+eab1bRpU8XExOi1116Tl5eXU9v69esrMDBQLVq00ODBg7Vjxw7Vq1dPDz300BWP37VrV82fP9+x3L9/f1WvXl12u12S9P3338tms+nw4cOSpAsXLiguLk4NGjRQrVq11K1bN6WkpDj2v9ytfc8++6zq168vb29vjRkzRlOnTlXHjh0vqWX+/PkKCgrSTTfdpAkTJqiwsFCSFBkZqW+//VaTJ092jLxVBgQpAACAKs6yLOUX5LvkZVmWUa1vv/22WrVqpZYtW2rYsGF6/fXXHccYOnSo/vWvfzn+iJekDz74QGfPntWAAQMkSfHx8Vq+fLmWLFmiAwcOaPLkyRo2bJhSU1Od+pk6darmzp2rQ4cOqX379rLb7erbt682b96svXv3KiYmRv369VNmZqZjnxEjRuj48eNKSUnRu+++q6VLlyonJ8fpuPfee69ycnK0ceNG7dmzR507d1avXr108uRJo/fhWgUGBiorK0vbtm0z3tfLy0vjx4/Xjh07LjmPiyIiIhxByLIsffTRR/Lz89P27dslld5W2KBBAzVr1kySNHHiRKWlpWnVqlXat2+f7r33XsXExOjrr7++7PFXrFih2bNn669//av27Nmjhg0b6pVXXrmk3datW3XkyBFt3bpVb775ppYtW+YI2WvWrNFvfvMbzZw5U1lZWRV+u+KVuLu6AAAAAPwyZwvPqnZ8bZf0bZ9mVy2PWtfcPiEhQcOGDZMkxcTEKDc3V6mpqYqM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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "em.plot_distribution_of_all_weights()" ] }, { "cell_type": "markdown", "id": "800c9f29-1260-40fb-bdf0-34cc9ada4aa3", "metadata": {}, "source": [ "Or with a range 0.1 from 0.0 to 1.0 grouping:" ] }, { "cell_type": "code", "execution_count": 33, "id": "3e624fb5-cb48-4081-b90f-0e59adf88d26", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Distribution-% of predicted scores: [13.551092474067536, 28.8126241447804, 25.5131317589936, 17.325093798278527, 9.00463473846833, 3.8402118737585518, 1.4566320900463474, 0.4634738468329287, 0.03310527477378062, 0.0]\n" ] }, { "data": { "image/png": "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I0aMsPsHzNy5c9WrVy81bdpUEydO1Pnz5zV9+nTVr19fW7ZsUfHixfXII4/o+PHjWr58uebOnZtlhlmzZunixYsaMGCAvL29VbBgQaWnp2eabvv27WrQoIE8PT01YMAAFS9eXIcOHdI333yjcePG3XBdr5aWlqamTZuqdu3aev3117VixQq98cYbKlmypB599NHrvnfkyJGaNGmSWrVqpaZNm2rbtm1q2rTpNYupxx57TKGhoXrxxReVlJQkSdq0aZN++uknde3aVXfccYeOHDmi6dOnKzY2Vrt375afn5/dPAYPHqyQkBCNHj1a+/bt0/Tp0/XHH3/YiuIMBw8eVMeOHdW3b1/16tVLH330kXr37q0aNWqoQoUKWea73n4r458AL7/8sry8vDRixAglJyfLy8tLs2fPVp8+fVSrVi1NmDBBJ0+e1JtvvqkNGzZoy5YtCgkJsevv5s2bKyYmRpMmTdK8efM0ePBg+fv76/nnn1f37t3Vvn17zZgxQz179lSdOnUUHR193c/hkUcesWUYOnSoDh8+rLfffltbtmzRhg0b7M4kuVG/xMTEaOjQoXrrrbf03HPPqVy5cra+yaq/rvU7qn79+ho7dqzmz5+vwYMH296TkpKiBQsWqEOHDjc88nszffXf//5XixcvVqdOnRQdHa2TJ0/qvffeU8OGDbV7925FRkbe8HesI/vBjJzZ/Q5Jju2ne/furc8//1wPPfSQ7rnnHq1du9b2uwLIE3Ly3Hbg3y7jmu5NmzZdc5rg4GBTrVo123DGtawZpkyZcsNrW693TVfDhg2NJDNjxowsxzVs2NA2nHFNd9GiRc3Zs2dt7Z9//rmRZN58801bW7FixbK8FvfqeV4vW69evUyxYsVsw4sXLzaSzCuvvGI3XceOHY3FYjEHDx60tUkyXl5edm3btm0zksy0adMyLetKU6dONZLMf/7zH1tbSkqKqVOnjgkICLBbd0evrXTkc/roo4+MJDN58uRM49LT040xzvdBvnz5zK5du+ym7du3r4mIiDB///23XXvXrl1NcHCwOX/+vDHGmDZt2pgKFSrccN2u9tprrxkPDw9bP7311lumWLFi5u677zbPPPOMMcaYtLQ0ExISYoYNG2Z739XbtjE3vqb74Ycftmtv166dKVSo0HXzpaammujoaFOsWDHzzz//2I3L6GdjjKlataoJCwszp06dsrVt27bN5MuXz/Ts2dPWFhwcbAYNGnTdZV69LR8+fNhIMoUKFTKnT5+2tX/11VdGkvnmm29sbY0aNTKVKlWyuyY8PT3d1K1b15QuXfq6y81YTmhoqDlz5oytfeTIkUaSqVKlit01mN26dTNeXl62ZZ07d86EhISY/v372833xIkTJjg42K79Wtd0Z2QICgoyCQkJWY678vsfExNjAgMDzR9//GE37ZWfzfXW9cp59erVy3bfjCtVq1bN1KhR47rzO3HihMmfP79p27atXfvo0aONJLvtMmNfXr9+/UzXlGd8n660ceNGI8nMmTMn0zxq1KhhUlJSbO2TJk0yksxXX31laytWrJiRZNatW2drS0hIMN7e3ubJJ5+87nplvP/q/VbG/r1EiRJ2mVNSUkxYWJipWLGi3T0Xvv32WyPJvPjii7a2jP4eP368re2ff/4xvr6+xmKxmM8++8zWvnfvXiPJvPTSS9fN+uOPPxpJZt68eXbty5Yty9TuaL9c75puZ35H1alTx9SuXduubdGiRdec95Vutq8uXrxo0tLS7OZ5+PBh4+3tbbe9Xyu/o/tBZ75DV2d0dD+9efNmI8k88cQTdtP17t3boW0EyA04vRy4zQUEBFz3LuYZRxi++uqrLI8aOcLb21t9+vRxePqePXsqMDDQNtyxY0dFRETou+++y9byHfXdd9/Jw8NDQ4cOtWt/8sknZYzR0qVL7dobN25sd2S0cuXKCgoK0n//+98bLic8PFzdunWztXl6emro0KGyWq1au3at09kd+ZwWLlyowoULa8iQIZnGZRzhcrYPGjZsaHftpjFGCxcuVKtWrWSM0d9//217NW3aVImJibbTokNCQnTs2LEsT3e+ngYNGigtLU0//fSTpMtHtBs0aKAGDRroxx9/lCTt3LlTZ86csR15ya6BAwdmWvapU6dsp8RmZcuWLTp8+LCeeOIJuyN00v/3c3x8vLZu3arevXurYMGCtvGVK1dWkyZN7Lb1kJAQ/fLLLzp+/LjT+bt06aICBQrY5Zdk20ZPnz6tVatWqXPnzjp37pztszp16pSaNm2qAwcOZDrFNyudOnVScHCwbbh27dqSpB49ethdR1+7dm2lpKTY5rl8+XKdOXNG3bp1s9tWPDw8VLt2ba1evdrhde3QocM1zwTJ8Ndff2ndunV6+OGHdeedd9qNu5lHJWa1ndxoP7By5Uqlpqbqscces2vP6vuZoX///vLw8LBru/Lsn0uXLunUqVMqVaqUQkJC7C5ByDBgwAC7I7ePPvqo8ufPn2n/Wr58ebvvT2hoqMqUKXPD9bqRXr162WX+7bfflJCQoMcee8zuyG3Lli1VtmxZLVmyJNM8+vXrZ/s5JCREZcqUkb+/vzp37mxrL1OmjEJCQm6Y94svvlBwcLCaNGlitw3WqFFDAQEBmbZBd/VLVnr27KlffvnF7vKfefPmKSoqSg0bNnRoHtntK29vb9u19mlpaTp16pTtsqWstqurObIfvFJ2vkPXe++V++mMy56c+a4BuQ1FN3Cbs1qtdgXu1bp06aJ69eqpX79+KlKkiLp27arPP//cqQK8aNGiTt08pnTp0nbDFotFpUqVcujxKzfjjz/+UGRkZKb+yDgt8I8//rBrv/qPdkkqUKDANa+PvHI5pUuXznTzoGstxxGOfE6HDh1SmTJlrnszMWf74OrTNv/66y+dOXNG77//vkJDQ+1eGf94SUhIkCQ988wzCggI0N13363SpUtr0KBBdqfDX0v16tXl5+dnK7Aziu6YmBj99ttvunjxom1c/fr1bzi/67n6M84oYK/3GWf8gVyxYsVrTpPRj2XKlMk0rly5cvr7779tpw9PmjRJO3fuVFRUlO6++26NHj3a4T9Gb5T/4MGDMsZo1KhRmT6vl156SdL/f17OLCejAI+KisqyPWP5Bw4ckHT5HhNXL/+HH35waNkZbnQKsfT//2y43mfjLB8fn0zFvqP7AUkqVaqUXXvBggXt/lFypazW8cKFC3rxxRdt92AoXLiwQkNDdebMGSUmJmaa/ur9a0BAgCIiIjLtX7O7f7uRq9fhet+FsmXLZtrnZNXfwcHBuuOOOzIVc8HBwTfMe+DAASUmJiosLCzTNmi1WjNtg+7ql6x06dJF3t7emjdvniQpMTFR3377rbp37+7QP4lupq/S09M1ZcoUlS5d2m67yric50Yc2Q9eL6czfXqj/dwff/yhfPnyZdr2rv7uAbkZ13QDt7Fjx44pMTHxur94fH19tW7dOq1evVpLlizRsmXLNH/+fN1333364YcfMh11udY8XO1af3CkpaU5lMkVrrUcc9UNx24FV3xO2V3ulTKK/B49eqhXr15Zvqdy5cqSLheX+/bt07fffqtly5Zp4cKFevfdd/Xiiy9qzJgx11ymp6enateurXXr1ungwYM6ceKEGjRooCJFiujSpUv65Zdf9OOPP6ps2bI3PPJ5I7fDZ9y5c2c1aNBAX375pX744Qe99tprmjhxohYtWqTmzZtf9703yp/xeY0YMUJNmzbNclpH/jC91nIcXf7cuXMVHh6eaTpn7jbvjv2MI27V/kbKeh2HDBmiWbNm6YknnlCdOnUUHBwsi8Wirl27ZvvsJMl92/7Nfk7Z3dauJT09XWFhYbbC9mpX70Nu5T6hQIECeuCBBzRv3jy9+OKLWrBggZKTk9WjRw+H3n8zfTV+/HiNGjVKDz/8sF5++WUVLFhQ+fLl0xNPPHFT25UzeW72/TnxuxjIKRTdwG0s44ZE1/pjO0O+fPnUqFEjNWrUSJMnT9b48eP1/PPPa/Xq1WrcuPFNnZaZlYyjXxmMMTp48KCtWJMu/zFy5Z2qM/zxxx8qUaKEbdiZbMWKFdOKFSt07tw5uyO9e/futY13hWLFimn79u1KT0+3O9p9s8u50edUsmRJ/fLLL7p06dI1HzF1s30QGhqqwMBApaWlqXHjxjfM7O/vry5duqhLly5KSUlR+/btNW7cOI0cOfK6Nwlq0KCBJk6cqBUrVqhw4cIqW7asLBaLKlSooB9//FE//vijHnjggRsu39XbrvT/N2PbuXPnNfsgox/37duXadzevXtVuHBhu8dBRURE6LHHHtNjjz2mhIQEVa9eXePGjbth0X0jGd8VT09Phz4vV8voq7CwsBsu3xWfVcb67ty586bndbMytoGDBw/aHYE7deqUU0dNFyxYoF69eumNN96wtV28eDHL/aN0ef9677332oatVqvi4+PVokULJ9fANa78Ltx333124/bt2+ey/e61lCxZUitWrFC9evVc9o8bZ7bVG03bs2dPtWnTRps2bdK8efNUrVq1a97IzpUWLFige++9VzNnzrRrP3PmjAoXLmwbvlZ+R/aDt0qxYsWUnp6uw4cP253pcfDgwRxMBbgWp5cDt6lVq1bp5ZdfVnR0tLp3737N6bJ6vE/VqlUlScnJyZJkKw6u9Uees+bMmWN3nfmCBQsUHx9vV2CULFlSP//8s1JSUmxt3377baZHizmTrUWLFkpLS9Pbb79t1z5lyhRZLJabLnCuXM6JEyc0f/58W1tqaqqmTZumgIAAh6/Vu5Ijn1OHDh30999/Z1o/6f+PCNxsH3h4eKhDhw5auHBhloXNlY+/OXXqlN04Ly8vlS9fXsYYXbp06brLadCggZKTkzV16lTVr1/f9odfgwYNNHfuXB0/ftyh67n9/f1dtt1mqF69uqKjozV16tRM887o54iICFWtWlUff/yx3TQ7d+7UDz/8YCuA0tLSMp3KGRYWpsjISNvnejPCwsIUGxur9957T/Hx8ZnGZ/W4Ildq2rSpgoKCNH78+Cw/8yuX74r9TGhoqGJiYvTRRx8pLi7ObtytPirWqFEj5c+fX9OnT7drz+r7eT0eHh6Zsk+bNu2ajyx7//337fp6+vTpSk1Nddn+zVk1a9ZUWFiYZsyYYbdNL126VHv27HH7HaY7d+6stLQ0vfzyy5nGpaamZmt7c2ZbvdG0zZs3V+HChTVx4kStXbvW4aPcNyur7eqLL77IdI+Ha+V3ZD94q2QcWHj33Xft2qdNm3ZLcwDuxJFu4DawdOlS7d27V6mpqTp58qRWrVql5cuXq1ixYvr666+ve0Rx7NixWrdunVq2bKlixYopISFB7777ru644w7b9bIlS5ZUSEiIZsyYocDAQPn7+6t27doOXWOZlYIFC6p+/frq06ePTp48qalTp6pUqVJ2jzXr16+fFixYoGbNmqlz5846dOiQ/vOf/2R65JMz2Vq1aqV7771Xzz//vI4cOaIqVarohx9+0FdffaUnnngi07yza8CAAXrvvffUu3dvbd68WcWLF9eCBQu0YcMGTZ069brX2F+LI59Tz549NWfOHA0fPly//vqrGjRooKSkJK1YsUKPPfaY2rRp45I+ePXVV7V69WrVrl1b/fv3V/ny5XX69Gn9/vvvWrFihe0fBPfff7/Cw8NVr149FSlSRHv27NHbb7+tli1b3rAP6tSpo/z582vfvn22x31JUkxMjK2IcaTorlGjhlasWKHJkycrMjJS0dHRtpuAZVe+fPk0ffp0tWrVSlWrVlWfPn0UERGhvXv3ateuXfr+++8lSa+99pqaN2+uOnXqqG/fvrZHhgUHB9ueG3vu3Dndcccd6tixo6pUqaKAgACtWLFCmzZtsjuyeTPeeecd1a9fX5UqVVL//v1VokQJnTx5Uhs3btSxY8fsnsvrakFBQZo+fboeeughVa9eXV27dlVoaKji4uK0ZMkS1atXz1aE1qhRQ5I0dOhQNW3aVB4eHuratavTy3zrrbdUv359Va9eXQMGDFB0dLSOHDmiJUuWaOvWra5cvesqUqSIHn/8cb3xxhtq3bq1mjVrpm3btmnp0qUqXLiww0dLH3jgAc2dO1fBwcEqX768Nm7cqBUrVlzzsYUpKSlq1KiROnfurH379undd99V/fr11bp1a1eunsM8PT01ceJE9enTRw0bNlS3bt1sjwwrXry4hg0b5tblN2zYUI888ogmTJigrVu36v7775enp6cOHDigL774Qm+++aY6duzo1DyrVq0qDw8PTZw4UYmJifL29tZ9992nsLCwTNPe6HeUp6enunbtqrffflseHh52N+B0pwceeEBjx45Vnz59VLduXe3YsUPz5s2zO5PsRvkd2Q/eCjVq1FCHDh00depUnTp1yvbIsP3790tyzxlPwC13K2+VDsBexiNiMl5eXl4mPDzcNGnSxLz55pt2j6bKcPVjlVauXGnatGljIiMjjZeXl4mMjDTdunUz+/fvt3vfV199ZcqXL2/y589v9/iQhg0bXvOxUNd6ZNinn35qRo4cacLCwoyvr69p2bJlpsf7GGPMG2+8YYoWLWq8vb1NvXr1zG+//ZZpntfLdvVjloy5/AijYcOGmcjISOPp6WlKly5tXnvttUyPE5KU5WOcrvUos6udPHnS9OnTxxQuXNh4eXmZSpUqZfnIGEcfGebo53T+/Hnz/PPPm+joaOPp6WnCw8NNx44dzaFDh1zWBxnrN2jQIBMVFWVbTqNGjcz7779vm+a9994zMTExplChQsbb29uULFnSPPXUUyYxMfGG62uMMbVq1TKSzC+//GJrO3bsmJFkoqKiMk2f1SPD9u7da2JiYoyvr6/dY5oypr36EWwZ36nDhw/fMN/69etNkyZNTGBgoPH39zeVK1fO9Di5FStWmHr16hlfX18TFBRkWrVqZXbv3m0bn5ycbJ566ilTpUoV23yqVKli3n33Xbv5XOuRYa+99lqmXMriETmHDh0yPXv2NOHh4cbT09MULVrUPPDAA2bBggXXXcdrLSfju/zFF1/YtV/rMYarV682TZs2NcHBwcbHx8eULFnS9O7d2/z222+2aVJTU82QIUNMaGiosVgsts/yeuua1WO+jDFm586dpl27diYkJMT4+PiYMmXKmFGjRjm0rlc/Mszf3z/TtFlta1lJTU01o0aNMuHh4cbX19fcd999Zs+ePaZQoUJm4MCBtumu9/jHf/75x7YvCQgIME2bNjV79+7NtC/KmMfatWvNgAEDTIECBUxAQIDp3r273WPrjLn2fier/WtWrvfIsKu3iQzz58831apVM97e3qZgwYKme/fu5tixY3bTXKu/r/V7xtH9pzHGvP/++6ZGjRrG19fXBAYGmkqVKpmnn37aHD9+/Ibzy6pfPvjgA1OiRAnj4eFh94gvZ35HZfj111+NJHP//fc7tC7G3HxfXbx40Tz55JMmIiLC+Pr6mnr16pmNGzc6nf9G+0FnvkNX77uc2U8nJSWZQYMGmYIFC5qAgADTtm1bs2/fPiPJvPrqq5mWD+Q2FmO4iwEAAIAjzpw5owIFCuiVV17R888/77L5zp49W3369NGmTZtUs2ZNl80X7rdt2zZVrVpVc+bM0UMPPZTTcfKMrVu3qlq1avrPf/5z3cvsgNyAa7oBAACycOHChUxtU6dOlSTFxsbe2jC4bX3wwQcKCAhQ+/btczpKrnWt71q+fPkUExOTA4kA1+KabgAAgCzMnz9fs2fPVosWLRQQEKD169fr008/1f3336969erldDzksG+++Ua7d+/W+++/r8GDB9s90QDOmTRpkjZv3qx7771X+fPn19KlS7V06VINGDBAUVFROR0PuGkU3QAAAFmoXLmy8ufPr0mTJuns2bO2m6u98sorOR0Nt4EhQ4bo5MmTatGihcaMGZPTcXK1unXravny5Xr55ZdltVp15513avTo0S69hAPISVzTDQAAAACAm3BNNwAAAAAAbkLRDQAAAACAm+T5a7rT09N1/PhxBQYGymKx5HQcAAAAAEAeYIzRuXPnFBkZqXz5rnM8OycfEv7uu++aSpUqmcDAQBMYGGjuuece891339nGX7hwwTz22GOmYMGCxt/f37Rv396cOHHCqWUcPXrUSOLFixcvXrx48eLFixcvXrxc/jp69Oh1a9IcvZHaN998Iw8PD5UuXVrGGH388cd67bXXtGXLFlWoUEGPPvqolixZotmzZys4OFiDBw9Wvnz5tGHDBoeXkZiYqJCQEB09elRBQUFuXBsA/3ZJSVJk5OWfjx+XeHpM3paUkqTINy5/4MefPC5/r1v3gSclJSnyfxvb8ePHeVQRAAA54OzZs4qKitKZM2cUHBx8zeluu7uXFyxYUK+99po6duyo0NBQffLJJ+rYsaMkae/evSpXrpw2btyoe+65x6H5nT17VsHBwUpMTKToBuBWSUlSQMDln61Wiu68LiklSQETLn/g1pHWW150B/xvY7NarRTdAADkAEdrzdvmRmppaWn67LPPlJSUpDp16mjz5s26dOmSGjdubJumbNmyuvPOO7Vx48YcTAoAAAAAgGNy/EZqO3bsUJ06dXTx4kUFBAToyy+/VPny5bV161Z5eXkpJCTEbvoiRYroxIkT15xfcnKykpOTbcNnz551V3QAAAAAAK4rx490lylTRlu3btUvv/yiRx99VL169dLu3buzPb8JEyYoODjY9oqKinJhWgAAAAAAHJfjR7q9vLxUqlQpSVKNGjW0adMmvfnmm+rSpYtSUlJ05swZu6PdJ0+eVHh4+DXnN3LkSA0fPtw2nHFxOwAAAIAbS09PV0pKSk7HAHKcp6enPDw8bno+OV50Xy09PV3JycmqUaOGPD09tXLlSnXo0EGStG/fPsXFxalOnTrXfL+3t7e8vb1vVVwAAAAgz0hJSdHhw4eVnp6e01GA20JISIjCw8NlsViyPY8cLbpHjhyp5s2b684779S5c+f0ySefaM2aNfr+++8VHBysvn37avjw4SpYsKCCgoI0ZMgQ1alTx+E7lwMAAABwjDFG8fHx8vDwUFRUlPLly/ErUYEcY4zR+fPnlZCQIEmKiIjI9rxytOhOSEhQz549FR8fr+DgYFWuXFnff/+9mjRpIkmaMmWK8uXLpw4dOig5OVlNmzbVu+++m5ORAQAAgDwpNTVV58+fV2RkpPz8/HI6DpDjfH19JV2uW8PCwrJ9qnmOFt0zZ8687ngfHx+98847euedd25RIgAAAODfKS0tTdLley4BuCzjH1CXLl3KdtHNOSMAAAAAbG7m2lUgr3HF94GiGwAAAAAAN6HoBgAAAIB/sTVr1shisejMmTMOv2f06NGqWrWq2zLlJRTdAAAAAHK9jRs3ysPDQy1btszpKLlO3bp1bTe3dqXY2Fg98cQTLp1nbkTRDQAAACDXmzlzpoYMGaJ169bp+PHjbl2WMUapqaluXcat5OXlddPPosa1UXQDAAAAyNWsVqvmz5+vRx99VC1bttTs2bNt4x588EF16dLFbvpLly6pcOHCmjNnjiQpPT1dEyZMUHR0tHx9fVWlShUtWLDANn3G6ddLly5VjRo15O3trfXr1+vQoUNq06aNihQpooCAANWqVUsrVqywW1Z8fLxatmwpX19fRUdH65NPPlHx4sU1depU2zRnzpxRv379FBoaqqCgIN13333atm3bNde3Y8eOGjx4sG34iSeekMVi0d69eyVJKSkp8vf3t2VxdP2uPL38gw8+UFRUlPz8/NSuXTtNnjxZISEhmbLMnTtXxYsXV3BwsLp27apz585Jknr37q21a9fqzTfflMVikcVi0ZEjR665TnkZRTcAAACATIyRkpJy5mWMc1k///xzlS1bVmXKlFGPHj300UcfyfxvJt27d9c333wjq9Vqm/7777/X+fPn1a5dO0nShAkTNGfOHM2YMUO7du3SsGHD1KNHD61du9ZuOc8++6xeffVV7dmzR5UrV5bValWLFi20cuVKbdmyRc2aNVOrVq0UFxdne0/Pnj11/PhxrVmzRgsXLtT777+vhIQEu/l26tRJCQkJWrp0qTZv3qzq1aurUaNGOn36dJbr27BhQ61Zs8Y2vHbtWhUuXNjWtmnTJl26dEl169Z1av0ybNiwQQMHDtTjjz+urVu3qkmTJho3blym6Q4dOqTFixfr22+/1bfffqu1a9fq1VdflSS9+eabqlOnjvr376/4+HjFx8crKioqy+XleSaPS0xMNJJMYmJiTkcBkMdZrcZc/jPh8s/I26zJVqPRMhotY02+tR+41Wo1kowkY2VjA+AiFy5cMLt37zYXLlwwxtj/XrvVL2d3bXXr1jVTp041xhhz6dIlU7hwYbN69Wq74Tlz5tim79atm+nSpYsxxpiLFy8aPz8/89NPP9nNs2/fvqZbt27GGGNWr15tJJnFixffMEuFChXMtGnTjDHG7Nmzx0gymzZtso0/cOCAkWSmTJlijDHmxx9/NEFBQebixYt28ylZsqR57733slzG9u3bjcViMQkJCeb06dPGy8vLvPzyy7Z1euWVV0zdunWdXr9//vnHGGNMly5dTMuWLe2m7969uwkODrYNv/TSS8bPz8+cPXvW1vbUU0+Z2rVr24YbNmxoHn/88et1123v6u/FlRytNfPnXLkPAAAAADdn3759+vXXX/Xll19KkvLnz68uXbpo5syZio2NVf78+dW5c2fNmzdPDz30kJKSkvTVV1/ps88+kyQdPHhQ58+fV5MmTezmm5KSomrVqtm11axZ027YarVq9OjRWrJk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+ugj9enTJ9N0EyZM0Jw5czRjxgzt2rVLw4YNU48ePbR27VpJ0tGjR9W+fXu1atVKW7duVb9+/ewK3axYrVa1aNFCK1eu1JYtW9SsWTO1atVKcXFxdtO98cYbqlmzprZs2aLHHntMjz76qPbt25flPBs0aKBz585py5YtkqS1a9eqcOHCWrNmjW2atWvXKjY2VtLlwr9Zs2bq0KGDtm/frvnz52v9+vUaPHhwlvNPS0tT27Zt5efnp19++UXvv/++nn/++Synff755zVixAht3bpVd911l7p166bU1FTVrVtXU6dOVVBQkOLj4xUfH68RI0Zct6/+lUwel5iYaCSZxMTEnI6CnCblrhdyHav1/z8+qzWn08DdrMlWo9EyGi1jTb61H7jVajWSjCRjZWMD4CIXLlwwu3fvNhcuXDDG2O9rbvXLmX1br169TJs2bUxCQoLx9vY2R44cMUeOHDE+Pj7mr7/+Mm3atDG9evUyxhhz8eJF4+fnZ3766Se7efTt29d069bNGGPMyJEjTfny5e3GP/PMM0aS+eeff4wxxsyaNcsEBwdfN1eFChXMtGnTbMPFihUzPXr0sA2np6ebsLAwM3369GvOo3r16ua1114zxhjTtm1bM27cOOPl5WXOnTtnjh07ZiSZ/fv329ZhwIABdu//8ccfTb58+WyfabFixcyUKVOMMcYsXbrU5M+f38THx9umX758uZFkvvzyS2OMMYcPHzaSzIcffmibZteuXUaS2bNnj8N9kZtd/b24kqO1Zn431vMAAAAAcEuEhoaqZcuWmj17towxatmypQoXLmw3zcGDB3X+/Hk1adLErj0lJcV2GvqePXtUu3Ztu/F16tS57rKtVqtGjx6tJUuWKD4+Xqmpqbpw4UKmI92VK1e2/WyxWBQeHq6EhIRrzrdhw4Zas2aNnnzySf3444+aMGGCPv/8c61fv16nT59WZGSkSpcuLUnatm2btm/frnnz5tneb4xRenq6Dh8+rHLlytnNe9++fYqKilJ4eLit7e67784yx5W5IyIiJEkJCQkqW7bsdfsFl1F0AwAAAMjEz89PVqs1x5adHQ8//LDtdOp33nkn0/iM9VmyZImKFi1qN87b2ztby5SkESNGaPny5Xr99ddVqlQp+fr6qmPHjkpJSbGbztPT027YYrEoPT39mvONjY3VRx99pG3btsnT01Nl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x7v1lPn8bpszAAAAgFzr/KXzCpgQkCPLto60yt/L3+HpZ86cqR49ekiSmjVrpsTERK1du1axsbFq2rSp/P399eWXX+qhhx6SJH3yySdq3bq1AgMDlZycrPHjx2vFihWqU6eOJKlEiRJav3693nvvPTVs2NC2nLFjx6pJkya24YIFC6pKlSq24Zdffllffvmlvv76aw0ePFh79+7VihUrtGnTJtWsWVOS9OGHH6p06dK296xfv16//vqrEhIS5O3tLeny0dnFixdrwYIFGjBggLPdd0OdOnXS999/r4YNGyo8PFz33HOPGjVqpJ49eyooKOiG7y9btqyky6e1Z3Xad2xsrGbOnKm0tDTt3LlTXl5e6tKli9asWaNmzZppzZo1tn6Ni4vTrFmzFBcXp8jISEnSiBEjtGzZMs2aNUvjx4/PNP9p06apb9++6tOnjyTpxRdf1A8//GD3jxVJKlCggN5++215eHiobNmyatmypVauXKn+/furYMGC8vDwUGBgoMLDw53rQCdxpBsAAABArrVv3z79+uuv6tatmyQpf/786tKli2bOnGkb7ty5s+bNmydJSkpK0ldffaXu3btLkg4ePKjz58+rSZMmCggIsL3mzJmjQ4cO2S0ro3DOYLVaNWLECJUrV04hISEKCAjQnj17bEe69+3bp/z586t69eq295QqVUoFChSwDW/btk1Wq1WFChWyW/7hw4czLf9KFSpUsE1boUIFSbJ7f/Pmza/5Xg8PD82aNUvHjh3TpEmTVLRoUY0fP14VKlRw6IhvxlkE1zolu0GDBjp37py2bNmitWvXqmHDhoqNjbUd/c74h4gk7dixQ2lpabrrrrvs8q9du/aa679v3z7dfffddm1XD0uX+8jDw8M2HBERcc2j8+7EkW4AAAAAmfh5+sk60nrjCd20bEfNnDlTqamptqOk0uWi0NvbW2+//baCg4PVvXt3NWzYUAkJCVq+fLl8fX3VrFkzSbIdHV2yZImKFi1qN++MI88Z/P3tj76PGDFCy5cv1+uvv65SpUrJ19dXHTt2tN0B3BFWq1URERF21zBnuN5jsr777jvb9cl//vmnYmNjtXXrVtv4q6/NzkrRokX10EMP6aGHHtLLL7+su+66SzNmzNCYMWOu+749e/ZIunz376yEhISoSpUqWrNmjTZu3KgmTZooJibGdhfyAwcO2I50W61WeXh4aPPmzXYFsnT5nwg3w9PT027YYrEoPT39puaZHRTdAAAAADKxWCxOneKdE1JTUzVnzhy98cYbuv/+++3GtW3bVp9++qkGDhyounXrKioqSvPnz9fSpUvVqVMnW0FWvnx5eXt7Ky4uzu5Uckds2LBBvXv3tl0bbrVadeTIEdv4MmXKKDU1VVu2bFGNGjUkXT6y/s8//9imqV69uk6cOKH8+fNfs4jNSrFixWw/589/uazLuEY6OwoUKKCIiAglJSVdd7oLFy7o/fffV0xMjEJDQ685XcOGDbV69Wr9+uuvGjdunAoWLKhy5cpp3LhxioiI0F133SVJqlatmtLS0pSQkKAGDRo4lLVMmTLatGmTevbsaWvbtGmTQ++9UlZ3a3cHim4AAAAAudK3336rf/75R3379lVwcLDduA4dOmjmzJkaOHCgpMt3MZ8xY4b279+v1atX26YLDAzUiBEjNGzYMKWnp6t+/fpKTEzUhg0bFBQUpF69el1z+aVLl9aiRYvUqlUrWSwWjRo1yu5IatmyZdW4cWMNGDBA06dPl6enp5588kn5+vraTs1u3Lix6tSpo7Zt22rSpEm66667dPz4cS1ZskTt2rXLdEq7K7z33nvaunWr2rVrp5IlS+rixYuaM2eOdu3apWnTptlNm5CQoIsXL+rcuXPavHmzJk2apL///luLFi267jJiY2M1bdo0hYaG2q4Bj42N1dtvv61OnTrZprvrrrvUvXt39ezZU2+88YaqVaumv/76SytXrlTlypWzfO76kCFD1L9/f9WsWVN169bV/PnztX37dpUoUcKpfihevLjWrVunrl27ytvbW4ULF3bq/Y7imm4AAAAAudLMmTPVuHHjTAW3dLno/u2337R9+3ZJl+9ivnv3bhUtWlT16tWzm/bll1/WqFGjNGHCBJUrV07NmjXTkiVLFB0dfd3lT548WQUKFFDdunXVqlUrNW3a1O76bUmaM2eOihQpopiYGLVr1079+/dXYGCgfHx8JF0+o+C7775TTEyM+vTpY3s01x9//KEiRYrcTPdc09133y2r1aqBAweqQoUKatiwoX7++WctXrw409H+MmXKKDIyUjVq1NCrr76qxo0ba+fOnSpfvvx1l9GgQQOlp6fbzS82NlZpaWm267kzzJo1Sz179tSTTz6pMmXKqG3bttq0aZPuvPPOLOfdvXt3jRw5UiNGjFD16tV1+PBh9e7d29anjho7dqyOHDmikiVLXveo/c2yGGfvx5/LnD17VsHBwUpMTHToTnzIw9z47D23yNtfzTwpKUnKuPTIapX8b+8z8nCTklKSbHf1dfYuuze97KQk23VuVqs10zWGAJAdFy9e1OHDhxUdHe108QLHHTt2TFFRUVqxYoUaNWqU03HyjCZNmig8PFxz58516Xyv971wtNbk9HIAAAAAcJNVq1bJarWqUqVKio+P19NPP63ixYsrJiYmp6PlWufPn9eMGTPUtGlTeXh46NNPP9WKFSu0fPnynI6WJYpuAAAAAHCTS5cu6bnnntN///tfBQYGqm7dupo3b16mO2vDcRmn5I8bN04XL15UmTJltHDhQjVu3Dino2WJohsAAAAA3KRp06Zq2rRpTsfIU3x9fbVixYqcjuEwbqQGAAAAAICbUHQDAAAAsMnj91kGnOKK7wNFNwAAAAB5eHhIklJSUnI4CXD7OH/+vCTd1DX4XNMNAAAAQPnz55efn5/++usveXp6Kl8+js/h38sYo/PnzyshIUEhISG2f0plB0U3AAAAAFksFkVEROjw4cP6448/cjoOcFsICQlReHj4Tc2DohsAAACAJMnLy0ulS5fmFHNAl08pv5kj3BkougEAAADY5MuXTz4+PjkdA8gzuFADAAAAAAA3oegGAAAAAMBNOL0cgOtYLDmdwDk8hxQAAABuxpFuAAAAAADchKIbAAAAAAA3oegGAAAAAMBNcrTonjBhgmrVqqXAwECFhYWpbdu22rdvn900sbGxslgsdq+BAwfmUGIAAAAAAByXo0X32rVrNWjQIP38889avny5Ll26pPvvv19JSUl20/Xv31/x8fG216RJk3IoMQAAAAAAjsvRu5cvW7bMbnj27NkKCwvT5s2bFRMTY2v38/NTeHj4rY4HAAAAAMBNua2u6U5MTJQkFSxY0K593rx5Kly4sCpWrKiRI0fq/PnzOREPAAAAAACn3DbP6U5PT9cTTzyhevXqqWLFirb2Bx98UMWKFVNkZKS2b9+uZ555Rvv27dOiRYuynE9ycrKSk5Ntw2fPnnV7dgAAAAAAsnLbFN2DBg3Szp07tX79erv2AQMG2H6uVKmSIiIi1KhRIx06dEglS5bMNJ8JEyZozJgxbs8LAAAAAMCN3Banlw8ePFjffvutVq9erTvuuOO609auXVuSdPDgwSzHjxw5UomJibbX0aNHXZ4XAAAAAABH5OiRbmOMhgwZoi+//FJr1qxRdHT0Dd+zdetWSVJERESW4729veXt7e3KmAAAAAAAZEuOFt2DBg3SJ598oq+++kqBgYE6ceKEJCk4OFi+vr46dOiQPvnkE7Vo0UKFChXS9u3bNWzYMMXExKhy5co5GR0AAAAAgBvK0aJ7+vTpkqTY2Fi79lmzZql3797y8vLSihUrNHXqVCUlJSkqKkodOnTQCy+8kANpAQAAAABwTo6fXn49UVFRWrt27S1KAwAAAACAa90WN1IDAAAAACAvougGAAAAAMBNKLoBAAAAAHATim4AAAAAANyEohsAAAAAADeh6AYAAAAAwE0ougEAAAAAcBOKbgAAAAAA3ISiGwAAAAAAN6HoBgAAAADATfI7M/GZM2f05Zdf6scff9Qff/yh8+fPKzQ0VNWqVVPTpk1Vt25dd+UEAAAAACDXcehI9/Hjx9WvXz9FRETolVde0YULF1S1alU1atRId9xxh1avXq0mTZqofPnymj9/vrszAwAAAACQKzh0pLtatWrq1auXNm/erPLly2c5zYULF7R48WJNnTpVR48e1YgRI1waFAAAAACA3Mahonv37t0qVKjQdafx9fVVt27d1K1bN506dcol4QAAAAAAyM0cOr38RgX3zU4PAAAAAEBelO27l587d05PPfWUatWqperVq2vIkCH6+++/XZkNAAAAAIBcLdtFd//+/fX3339rzJgxeumll/Tf//5X3bt3d2U2AAAAAAByNYcfGTZlyhQ98cQTslgskqRNmzZp//798vDwkCSVKVNG99xzj3tSAgAAAACQCzlcdB86dEi1a9fWe++9p2rVqqlJkyZq2bKl2rZtq0uXLmnu3Llq2rSpO7MCAAAAAJCrOFx0v/322/r555/18MMP695779WECRP0n//8R8uXL1daWpo6deqkwYMHuzMrAAAAAAC5isNFtyTdc8892rRpkyZOnKg6derotdde08KFC92VDQAAAACAXM3pG6nlz59fzz//vL755htNnTpVHTt21IkTJ9yRDQAAAACAXM3honvbtm2qVauWAgMDVa9ePaWnp2vlypVq2bKl6tatq+nTp7szJwAAAAAAuY7DRffDDz+sBg0aaNOmTerUqZMGDhwoSerTp49++eUX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X357enq6evbsyTXdAAAAAABcwami2xijEydOaPbs2XrllVe0detW+fr6qlKlSipWrJi7MgIAAAAAkCs5XXSXKlVKu3btUunSpVW6dGl35QIAAAAAINdz6prufPnyqXTp0jp16pS78gAAAAAAkGc4fSO1V199VU899ZR27tzpjjwAAAAAAOQZTt9IrWfPnjp//ryqVKkiLy8v+fr62o0/ffq0y8IBAAAAAJCbOV10T5061Q0xAAAAAADIe5wuunv16uWOHAAAAAAA5DlOX9MtSYcOHdILL7ygbt26KSEhQZK0dOlS7dq1y6XhAAAAAADIzZwuuteuXatKlSrpl19+0aJFi2S1WiVJ27Zt00svveTygAAAAAAA5FZOF93PPvusXnnlFS1fvlxeXl629vvuu08///yzS8MBAAAAAJCbOV1079ixQ+3atcvUHhYWpr///tsloQAAAAAAyAucLrpDQkIUHx+fqX3Lli0qWrSoS0IBAAAAAJAXOF10d+3aVc8884xOnDghi8Wi9PR0bdiwQSNGjFDPnj3dkREAAAAAgFzJ6aJ7/PjxKlu2rKKiomS1WlW+fHnFxMSobt26euGFF9yREQAAAACAXMnp53R7eXnpgw8+0IsvvqgdO3bIarWqWrVqKl26tDvyAQAAAACQazlcdKenp+u1117T119/rZSUFDVq1EgvvfSSfH193ZkPAAAAAIBcy+HTy8eNG6fnnntOAQEBKlq0qN58800NGjTIndkAAAAAAMjVHC6658yZo3fffVfff/+9Fi9erG+++Ubz5s1Tenq6O/MBAAAAAJBrOVx0x8XFqUWLFrbhxo0by2Kx6Pjx424JBgAAAABAbudw0Z2amiofHx+7Nk9PT126dMnloQAAAAAAyAscvpGaMUa9e/eWt7e3re3ixYsaOHCg/P39bW2LFi1ybUIAAAAAAHIph4vuXr16ZWrr0aOHS8MAAAAAAJCXOFx0z5o1y505AAAAAADIcxy+phsAAAAAADiHohsAAAAAADeh6AYAAAAAwE0ougEAAAAAcBOKbgAAAAAA3ISiGwAAAAAAN6HoBgAAAADATSi6AQAAAABwE4puAAAAAADchKIbAAAAAAA3oegGAAAAAMBNKLoBAAAAAHCT27roHj16tCwWi92rbNmyOR0LAAAAAACH5M/pADdSoUIFrVixwjacP/9tHxkAAAAA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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "em.plot_distribution_of_scores()" ] }, { "cell_type": "markdown", "id": "93b72120-4578-4d5c-a408-a24ee78bf6cb", "metadata": {}, "source": [ "## Entity Clustering\n", "\n", "It takes as input the similarity graph produced by Entity Matching and partitions it into a set of equivalence clusters, with every cluster corresponding to a distinct real-world object." ] }, { "cell_type": "code", "execution_count": 34, "id": "500d2ef7-7017-4dba-bbea-acdba8abf5b7", "metadata": {}, "outputs": [], "source": [ "from pyjedai.clustering import ConnectedComponentsClustering, UniqueMappingClustering" ] }, { "cell_type": "code", "execution_count": 35, "id": "aebd9329-3a4b-48c9-bd05-c7bd4aed3ca9", "metadata": {}, "outputs": [], "source": [ "ccc = UniqueMappingClustering()\n", "clusters = ccc.process(pairs_graph, data, similarity_threshold=0.17)" ] }, { "cell_type": "code", "execution_count": 36, "id": "5b52a534-691a-48be-b5e9-c073dc04b154", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Method name: Unique Mapping Clustering\n", "Method info: Prunes all edges with a weight lower than t, sorts the remaining ones indecreasing weight/similarity and iteratively forms a partition forthe top-weighted pair as long as none of its entities has alreadybeen matched to some other.\n", "Parameters: None\n", "Runtime: 0.1299 seconds\n" ] } ], "source": [ "ccc.report()" ] }, { "cell_type": "code", "execution_count": 37, "id": "00bc2e82-9bc1-4119-b8cb-4a1c18afee19", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "***************************************************************************************************************************\n", " Μethod: Unique Mapping Clustering\n", "***************************************************************************************************************************\n", "Method name: Unique Mapping Clustering\n", "Parameters: \n", "Runtime: 0.1299 seconds\n", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n", "Performance:\n", "\tPrecision: 92.69% \n", "\tRecall: 86.06%\n", "\tF1-score: 89.25%\n", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n" ] } ], "source": [ "_ = ccc.evaluate(clusters)" ] }, { "cell_type": "markdown", "id": "315369d8-6564-44d4-aea0-14034b54cf16", "metadata": {}, "source": [ "
\n", "
\n", "K. Nikoletos, J. Maciejewski, G. Papadakis & M. Koubarakis\n", "
\n", "
\n", "Apache License 2.0\n", "
" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.6" }, "vscode": { "interpreter": { "hash": "824e5f4123a1a5b690f910010b2896a5dc6379151ca1c56e0c0465c15ebbd094" } } }, "nbformat": 4, "nbformat_minor": 5 }