{ "cells": [ { "cell_type": "markdown", "id": "96ec678e-b20c-4213-8616-542010f46342", "metadata": {}, "source": [ "\n", "# Clean-Clean Entity Resolution Tutorial
using Tf-Idf transformation.\n", "\n", "
\n", " \n", "
\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": "0629c164-b1c2-4538-bb99-ad358c72cbcf", "metadata": { "tags": [] }, "source": [ "## How to install?\n", "\n", "pyJedAI is an open-source library that can be installed from PyPI.\n" ] }, { "cell_type": "code", "execution_count": null, "id": "3f73d340-7110-4792-8193-19fe34f14d54", "metadata": {}, "outputs": [], "source": [ "!pip install pyjedai -U" ] }, { "cell_type": "code", "execution_count": 2, "id": "0b433cc9-3d48-44ed-911e-3118514d3ca1", "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": "b11a4c12-b983-4529-8281-e6c886982397", "metadata": {}, "source": [ "Imports" ] }, { "cell_type": "code", "execution_count": 3, "id": "6db50d83-51d8-4c95-9f27-30ef867338f2", "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 os\n", "import sys\n", "import pandas as pd\n", "import networkx\n", "from networkx import draw, Graph\n", "\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\n", "from pyjedai.datamodel import Data\n", "d1 = pd.read_csv(\"../data/ccer/D2/abt.csv\", sep='|', engine='python')\n", "d2 = pd.read_csv(\"../data/ccer/D2/buy.csv\", sep='|', engine='python')\n", "gt = pd.read_csv(\"../data/ccer/D2/gt.csv\", sep='|', engine='python')\n", "\n", "data = Data(\n", " dataset_1=d1,\n", " id_column_name_1='id',\n", " dataset_2=d2,\n", " id_column_name_2='id',\n", " ground_truth=gt\n", ")" ] }, { "cell_type": "markdown", "id": "9c068252-4a69-405a-a320-c2875ec08ea5", "metadata": {}, "source": [ "# Simple workflow" ] }, { "cell_type": "code", "execution_count": 4, "id": "9c1b6213-a218-40cf-bc72-801b77d28da9", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1c9c771a7f9d4174a1b1c53be137923a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "Standard Blocking: 0%| | 0/2152 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "em.plot_distribution_of_all_weights()" ] }, { "cell_type": "code", "execution_count": 11, "id": "19d0eb71-ba9f-4613-9e18-9fd876b9f82d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Distribution-% of predicted scores: [8.997242780438253, 34.20403424756929, 31.359744594398492, 14.576984472500362, 6.827746335800319, 2.7354520388913075, 0.9650268466115223, 0.3192570018865186, 0.014511681903932667, 0.0]\n" ] }, { "data": { "image/png": "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1aolb29vFS1aVN27d9dff/1l1X5mfyckJOihhx6Sn5+fihcvbvls7Ny5Uw888IB8fX1VqlSpXM8lN78P06ZNU6VKleTl5aVixYrpiSeeyNIvmXPdc+uX2bNnq2PHjpKk+++/39IHa9askWT776hXXnlF7u7u+vvvv7PE279/fwUFBSklJSXHY7rTvjp37pyGDx+uKlWqyM/PTwEBAWrRooW2b99uqXOr37GSbedBSTZ9h26e0515Tj906NAtz9NXrlzR008/raJFi8rf318PP/yw/vrrL+aJI9/In0MKQD7x2GOP6cUXX9TPP/+sfv36ZVtn9+7deuihh1S1alWNHTtWnp6eOnTokNavXy9JqlChgsaOHatRo0apf//+atSokSSpfv36ljbOnj2rFi1aqEuXLurevbuKFSuWa1zjx4+XyWTS888/r8TERE2bNk1NmzbVtm3bLCPytrAlthsZhqGHH35Yq1evVp8+fVS9enX99NNPeu655/TXX39p6tSpVvXXrVunxYsX66mnnpK/v7/efvttdejQQQkJCSpSpEiOcV25ckWxsbE6dOiQBg0apMjISH311Vfq1auXLly4oGeeeUYVKlTQ3LlzNXToUJUoUULPPvusJCk4ODjbNm/1PknX/5nx0EMPaeXKlerSpYueeeYZXbp0ScuXL9euXbtUtmxZu/tg1apV+vLLLzVo0CAVLVpUpUuX1unTp3XfffdZkvLg4GAtW7ZMffr00cWLFy03Vfroo4/09NNP65FHHtEzzzyjlJQU7dixQ5s2bdKjjz6a7XGaTCY1aNBAa9eutZTt2LFDSUlJKlCggNavX69WrVpJkn755RfVqFEjx5v0zJ07V3379tW9996r/v37S5LKli1rVadTp06KjIzUxIkT9fvvv+vjjz9WSEiIJk2alNPbK+n6P0AeeughhYWF6ZlnnlFoaKj27t2r77//Xs8884wkacWKFWrRooXKlCmj0aNH68qVK3rnnXfUoEED/f7775YkesCAAVq4cKEGDRqkihUr6uzZs1q3bp327t2rmjVr5hrH/PnzdenSJT3xxBMymUyaPHmy2rdvrz/++MMyOr579241aNBAxYsX1wsvvCBfX199+eWXatu2rRYtWqR27drlug9JmjdvntLS0jR48GCdO3dOkydPVqdOnfTAAw9ozZo1ev7553Xo0CG98847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/vvva9SoURozZkyO+3R3d1fdunW1du1aHTp0SKdOnVKjRo1UrFgxXb16VZs2bdIvv/yi8uXL33Lk81buhve4U6dOatSokb7++mv9/PPPev311zVp0iQtXrxYLVq0yHXbW8Wf+X4NHz5ccXFx2da15Q/TnPZj6/7nzp2r0NDQLPXsudu8M84ztvinzjdS9sc4ePBgzZo1S0OGDFG9evUUGBgok8mkLl263PbVSZLzPvt3+j7d7mctJxkZGQoJCbEktje7+RzyT54TChUqpIceekjz5s3TqFGjtHDhQqWmpqp79+42bX8nfTVhwgSNHDlSjz/+uMaNG6fChQurQIECGjJkyB19ruyJ5063z4vfxUBeIekG7mKZNyTK6Y/tTAUKFFCTJk3UpEkTTZkyRRMmTNBLL72k1atXq2nTpnd0WWZ2Mke/MhmGoUOHDlmSNen6HyM33qk6059//qkyZcpYlu2JrVSpUlqxYoUuXbpkNdK7b98+y3pHKFWqlHbs2KGMjAyr0e473c+t3qeyZctq06ZNunr1ao6PmLrTPggODpa/v7/S09PVtGnTW8bs6+urzp07q3PnzkpLS1P79u01fvx4jRgxItebBDVq1EiTJk3SihUrVLRoUZUvX14mk0mVKlXSL7/8ol9++UUPPfTQLffv6M+u9P83Y9u1a1eOfZDZj/v378+ybt++fSpatKjV46DCwsL01FNP6amnnlJiYqJq1qyp8ePH3zLpvpXM74q7u7tN75ejZfZVSEjILffviPcq83h37dp1x23dqczPwKFDh6xG4M6ePWvXqOnChQvVs2dPvfnmm5aylJSUbM+P0vXz6/33329ZNpvNOnnypFq2bGnnETjGjd+FBx54wGrd/v37HXbezUnZsmW1YsUKNWjQwGH/uLHns3qruj169FCbNm20efNmzZs3TzVq1MjxRnaOtHDhQt1///2aOXOmVfmFCxdUtGhRy3JO8dtyHvynlCpVShkZGTpy5IjVlR6HDh3Kw6gAx+LycuAutWrVKo0bN06RkZHq1q1bjvWye7xP9erVJUmpqamSZEkOcvojz15z5syxmme+cOFCnTx50irBKFu2rDZu3Ki0tDRL2ffff5/l0WL2xNayZUulp6fr3XfftSqfOnWqTCbTHSc4N+7n1KlTWrBggaXs2rVreuedd+Tn52fzXL0b2fI+dejQQWfOnMlyfNL/jwjcaR+4ubmpQ4cOWrRoUbaJzY2Pvzl79qzVOg8PD1WsWFGGYejq1au57qdRo0ZKTU3VtGnT1LBhQ8sffo0aNdLcuXN14sQJm+Zz+/r6Ouxzm6lmzZqKjIzUtGnTsrSd2c9hYWGqXr26Pv30U6s6u3bt0s8//2xJgNLT07NcyhkSEqLw8HDL+3onQkJCFBsbqw8++EAnT57Msj67xxU5UlxcnAICAjRhwoRs3/Mb9++I80xwcLBiYmL0ySefKCEhwWrdPz0q1qRJExUsWFDTp0+3Ks/u+5kbNze3LLG/8847OT6y7MMPP7Tq6+nTp+vatWsOO7/Zq3bt2goJCdGMGTOsPtPLli3T3r17nX6H6U6dOik9PV3jxo3Lsu7atWu39Xmz57N6q7otWrRQ0aJFNWnSJMXHx9s8yn2nsvtcffXVV1nu8ZBT/LacB/8pmQML77//vlX5O++884/GATgTI93AXWDZsmXat2+frl27ptOnT2vVqlVavny5SpUqpW+//TbXEcWxY8dq7dq1atWqlUqVKqXExES9//77KlGihGW+bNmyZRUUFKQZM2bI399fvr6+qlu3rk1zLLNTuHBhNWzYUL1799bp06c1bdo0lStXzuqxZn379tXChQvVvHlzderUSYcPH9Znn32W5ZFP9sTWunVr3X///XrppZd09OhRVatWTT///LO++eYbDRkyJEvbt6t///764IMP1KtXL23ZskWlS5fWwoULtX79ek2bNi3XOfY5seV96tGjh+bMmaNhw4bp119/VaNGjZScnKwVK1boqaeeUps2bRzSB6+99ppWr16tunXrql+/fqpYsaLOnTun33//XStWrLD8g+DBBx9UaGioGjRooGLFimnv3r1699131apVq1v2Qb169VSwYEHt37/f8rgvSYqJibEkMbYk3bVq1dKKFSs0ZcoUhYeHKzIy0nITsNtVoEABTZ8+Xa1bt1b16tXVu3dvhYWFad++fdq9e7d++uknSdLrr7+uFi1aqF69eurTp4/lkWGBgYGW58ZeunRJJUqU0COPPKJq1arJz89PK1as0ObNm61GNu/Ee++9p4YNG6pKlSrq16+fypQpo9OnT2vDhg06fvy41XN5HS0gIEDTp0/XY489ppo1a6pLly4KDg5WQkKCli5dqgYNGliS0Fq1akmSnn76acXFxcnNzU1d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ktasWSOTySSTyaQCBQooMDBQNWrU0H/+8x+dPHnyH421c+fOOnDggMPbLV26tKZNm+bwdm9G0g0AAADA5c2cOVODBw/W2rVrdeLECafuyzAMXbt2zan7sMfRo0dlMplsrr9nzx41b95ctWvX1tq1a7Vz506988478vDwUHp6ulXd/fv368SJE9q8ebOef/55rVixQpUrV9bOnTsdfRg58vb2VkhIyD+2P0cj6QYAAADg0sxmsxYsWKAnn3xSrVq10uzZsy3rHn30UXXu3Nmq/tWrV1W0aFHNmTNHkpSRkaGJEycqMjJS3t7eqlatmhYuXGipnznqu2zZMtWqVUuenp5at26dDh8+rDZt2qhYsWLy8/NTnTp1tGLFCqt9nTx5Uq1atZK3t7ciIyM1f/78LCOsFy5cUN++fRUcHKyAgAA98MAD2r59u+M76n9+/vlnhYaGavLkyapcubLKli2r5s2b66OPPpK3t7dV3ZCQEIWGhuqee+5Rly5dtH79egUHB+vJJ5/Msf3atWvrjTfesCy3bdtW7u7uMpvNkqTjx4/LZDLp0KFDkqTU1FQNHz5cxYsXl6+vr+rWras1a9ZYts/u8vJXX31VISEh8vf3V9++ffXCCy+oevXqWWJ54403FBYWpiJFimjgwIG6evWqJCk2NlZ//vmnhg4dahnRdxaSbgAAAABZGIah5LTkPHkZhmFXrF9++aXKly+v6Ohode/eXZ988omljW7duum7776zJHyS9NNPP+ny5ctq166dJGnixImaM2eOZsyYod27d2vo0KHq3r274uPjrfbzwgsv6LXXXtPevXtVtWpVmc1mtWzZUitXrtTWrVvVvHlztW7dWgkJCZZtevTooRMnTmjNmjVatGiRPvzwQyUmJlq127FjRyUmJmrZsmXasmWLatasqSZNmujcuXN29YOtQkNDdfLkSa1du9bubb29vTVgwACtX78+y3Fkaty4sSVpNgxDv/zyi4KCgrRu3TpJ1y9tL168uMqVKydJGjRokDZs2KAvvvhCO3bsUMeOHdW8eXMdPHgw2/bnzZun8ePHa9KkSdqyZYtKliyp6dOnZ6m3evVqHT58WKtXr9ann36q2bNnW/4hs3jxYpUoUUJjx47VyZMnnXrJfEGntQwAAADAZV2+ell+E/3yZN/mEWb5evjaXH/mzJnq3r27JKl58+ZKSkpS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jx6i8gipLxFh7NixmDx5ssaXmA+F0BqfP38emzZtwoYNGyTNI7QPT58+HVFRUThz5gy+/vprhIeHY86cOZJmE0JofV1cXLB582YcOnQIO3bsgEqlgr+/P+7fvy8qj5D63r17FwAQGhqKhQsX4siRIzAzM0Pnzp3x7NkzUXnEElrfu3fvIjo6GhUVFTh69CiCg4OxcuVKfP/996LySPEZt2nTJri6usLf319UFqlI8Tn366+/4tq1a5gwYYLoPEL6sI6ODn7++WekpKRAqVRCoVBg1apVOH78OMzMzERnEkNofUeOHInFixejQ4cOMDAwgJOTEzp37oy//e1vovII6cPt2rWDkZER5s6di+LiYhQVFSEoKAgVFRXIzc0VlUcsofUNCAjAqlWrcOfOHahUKpw6dQoHDhyol/ZU5vxQvstLgQfdn6icnBwYGxurf8LDw+s70iepao0nT56slX0UFBSgb9++cHNzQ2hoqFb2UdciIiIQFRWFgwcPVnujpLrow7Nnz0ZKSgpOnjwJPT09BAYGgogk309dUSqVSE1NRWJiIpYsWYKZM2ciPj7+rctqs75r165FYWEh5s+fL9k261thYSFGjx6NDRs2wMLCokbraLsPz5w5E507d0arVq0wefJkrFy5EmvXrkVJSYmk+6krfn5+CAwMhIeHBzp16oQDBw7A0tISP/3001uX12Z9VSoVAGDBggUYMmQIvLy8EBkZ+cHd6Ks2VCoVrKys8O9//xteXl744osvsGDBAvz444/VrlMXn3GvXr3Crl27Ppiz3FLZtGkT3N3d4ePjU+0y2uzDRISpU6fCysoK586dw6+//oqBAweiX79+9T4oFCo+Ph7h4eFYt24dkpOTceDAAcTGxiIsLKzadbTVhy0tLbFv3z785z//gbGxMUxNTfHixQu0adMGurof5/BqzZo1aNGiBVq2bAmZTIZp06bhq6++emd76uIY8amo3+tU/4AsLCygp6f3xt0NHz16BBsbm2rXs7GxqdU6jRs31rhTcHWX8NrY2LxxN8PK/bwrz4dMaI2FqFpjExOTty5jY2ODx48fa0wrLy/Hs2fP3punsLAQvXr1glKpxMGDB+v90mdAfH1XrFiBiIgI/Pzzz2jVqlW1y9VFH7awsICFhQWcnZ3h6uoKe3t7XLp0CX5+fu9th7aIqa+uri6aN28OAPDw8MDN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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "em.plot_distribution_of_scores()" ] }, { "cell_type": "markdown", "id": "07649cc9-b7e6-4acf-876b-ce5f97c00772", "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": 14, "id": "5a232214-58fc-4a70-8069-37f3fe974f9e", "metadata": {}, "outputs": [], "source": [ "from pyjedai.clustering import UniqueMappingClustering\n" ] }, { "cell_type": "code", "execution_count": 15, "id": "6f8efe1d-b981-4fba-b5cf-2b28fb189ee2", "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.2460 seconds\n", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n", "Performance:\n", "\tPrecision: 92.56% \n", "\tRecall: 87.92%\n", "\tF1-score: 90.18%\n", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n", "Classification report:\n", "\tTrue positives: 946\n", "\tFalse positives: 76\n", "\tTrue negatives: 1156570\n", "\tFalse negatives: 130\n", "\tTotal comparisons: 1022\n", "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n" ] }, { "data": { "text/plain": [ "{'Precision %': 92.56360078277886,\n", " 'Recall %': 87.9182156133829,\n", " 'F1 %': 90.1811248808389,\n", " 'True Positives': 946,\n", " 'False Positives': 76,\n", " 'True Negatives': 1156570,\n", " 'False Negatives': 130}" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "umc = UniqueMappingClustering()\n", "clusters = umc.process(pairs_graph, data)\n", "umc.evaluate(clusters, with_classification_report=True)" ] }, { "cell_type": "markdown", "id": "ac01eed9-25f4-41b2-8c18-e126901acd2a", "metadata": {}, "source": [ "
\n", "
\n", "K. Nikoletos, J. Maciejewski, G. Papadakis & M. Koubarakis\n", "
\n", "
\n", "Apache License 2.0\n", "
" ] }, { "cell_type": "code", "execution_count": null, "id": "b3537920-78f1-4333-8448-04a584edc152", "metadata": {}, "outputs": [], "source": [] } ], "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.10.5" }, "vscode": { "interpreter": { "hash": "824e5f4123a1a5b690f910010b2896a5dc6379151ca1c56e0c0465c15ebbd094" } } }, "nbformat": 4, "nbformat_minor": 5 }