{ "cells": [ { "cell_type": "markdown", "id": "96ec678e-b20c-4213-8616-542010f46342", "metadata": {}, "source": [ "\n", "# 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": null, "id": "0b433cc9-3d48-44ed-911e-3118514d3ca1", "metadata": {}, "outputs": [], "source": [ "%pip show pyjedai" ] }, { "cell_type": "markdown", "id": "b11a4c12-b983-4529-8281-e6c886982397", "metadata": {}, "source": [ "Imports" ] }, { "cell_type": "code", "execution_count": 1, "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\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": 2, "id": "9c1b6213-a218-40cf-bc72-801b77d28da9", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/conda/miniconda3/envs/pypi_dependencies/lib/python3.9/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", " from .autonotebook import tqdm as notebook_tqdm\n", "Standard Blocking: 0%| | 0/2152 [00:00" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "em.plot_distribution_of_all_weights()" ] }, { "cell_type": "code", "execution_count": 5, "id": "19d0eb71-ba9f-4613-9e18-9fd876b9f82d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Distribution-% of predicted scores: [8.960963575678422, 34.465244521840084, 31.410535481062258, 14.4826585401248, 6.733420403424757, 2.7064286750834423, 0.9432593237556233, 0.28297779712668697, 0.014511681903932667, 0.0]\n" ] }, { "data": { "image/png": "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jLD6B8zcuXPVq1cvRUVFaeLEibp27ZqmT5+uBg0aaNeuXSpRooSefPJJnTlzRqtWrdLcuXMzjGHWrFlKSEjQgAED5O7urgIFCig1NTVdvb1796phw4ZydXXVgAEDVKJECZ04cULff/+9xo0bd8djvV1KSoqioqJUp04dvfPOO1q9erXeffddlSpVSk899VSW244cOVKTJk1S69atFRUVpT179igqKirTZOrpp59WQECAXnvtNcXHx0uSduzYoV9++UVdu3ZV0aJFderUKU2fPl2RkZE6ePCgvLy8rNoYPHiw/P39NXr0aB05ckTTp0/Xn3/+aUmK0xw/flyPPvqo+vbtq169eunzzz9X7969VbNmTVWsWDHD+LI6b6X9E+CNN96Qm5ubRowYocTERLm5uWn27Nnq06ePateurQkTJujcuXN67733tGXLFu3atUv+/v5W/d2iRQtFRERo0qRJmjdvngYPHixvb2+98sor6t69uzp06KAZM2aoZ8+eqlu3rsLCwrJ8H5588klLDM8884xOnjypDz74QLt27dKWLVusriS5U79ERETomWee0fvvv6+XX35Z5cuXt/RNRv2V2e+oBg0aaOzYsVq4cKEGDx5s2SYpKUmLFi1Sx44d7zjyey999ccff2jZsmXq1KmTwsLCdO7cOX388cdq1KiRDh48qJCQkDv+jrXlPJgW591+hyTbztO9e/fW119/rccff1wPPvigNmzYYPldAeQK2XltO/Bflzane8eOHZnW8fPzM6pXr25ZTpvLmmbKlCl3nNua1ZyuRo0aGZKMGTNmZLiuUaNGluW0Od1FihQxrly5Yin/+uuvDUnGe++9ZykrXrx4hnNxb28zq9h69eplFC9e3LK8bNkyQ5Lx5ptvWtV79NFHDZPJZBw/ftxSJslwc3OzKtuzZ48hyZg2bVq6fd1q6tSphiTjyy+/tJQlJSUZdevWNXx8fKyO3da5lba8T59//rkhyZg8eXK6dampqYZh2N8HefLkMQ4cOGBVt2/fvkZwcLBx/vx5q/KuXbsafn5+xrVr1wzDMIy2bdsaFStWvOOx3e7tt982XFxcLP30/vvvG8WLFzceeOAB48UXXzQMwzBSUlIMf39/Y+jQoZbtbv9sG8ad53Q/8cQTVuXt27c3ChYsmGV8ycnJRlhYmFG8eHHj0qVLVuvS+tkwDKNatWpGYGCgceHCBUvZnj17jDx58hg9e/a0lPn5+RmDBg3Kcp+3f5ZPnjxpSDIKFixoXLx40VL+7bffGpKM77//3lLWpEkTo3LlylZzwlNTU4169eoZ4eHhWe43bT8BAQHG5cuXLeUjR440JBlVq1a1moPZrVs3w83NzbKvq1evGv7+/kb//v2t2j179qzh5+dnVZ7ZnO60GHx9fY3Y2NgM1936/Y+IiDDy5ctn/Pnnn1Z1b31vsjrWW9vq1auX5b4Zt6pevbpRs2bNLNs7e/askTdvXqNdu3ZW5aNHjzYkWX0u087lDRo0SDenPO37dKutW7cakow5c+aka6NmzZpGUlKSpXzSpEmGJOPbb7+1lBUvXtyQZGzcuNFSFhsba7i7uxvDhw/P8rjStr/9vJV2fi9ZsqRVzElJSUZgYKBRqVIlq3su/PDDD4Yk47XXXrOUpfX3+PHjLWWXLl0yPD09DZPJZCxYsMBSfvjwYUOS8frrr2cZ66ZNmwxJxrx586zKV65cma7c1n7Jak63Pb+j6tata9SpU8eqbMmSJZm2fat77auEhAQjJSXFqs2TJ08a7u7uVp/3zOK39Txoz3fo9hhtPU/v3LnTkGQ899xzVvV69+5t02cEyAm4vBy4z/n4+GR5F/O0EYZvv/02w1EjW7i7u6tPnz421+/Zs6fy5ctnWX700UcVHBysH3/88a72b6sff/xRLi4ueuaZZ6zKhw8fLsMwtGLFCqvypk2bWo2MVqlSRb6+vvrjjz/uuJ+goCB169bNUubq6qpnnnlGZrNZGzZssDt2W96nxYsXq1ChQhoyZEi6dWkjXPb2QaNGjazmbhqGocWLF6t169YyDEPnz5+3vKKiohQXF2e5LNrf319//fVXhpc7Z6Vhw4ZKSUnRL7/8IunmiHbDhg3VsGFDbdq0SZK0f/9+Xb582TLycrcGDhyYbt8XLlywXBKbkV27dunkyZN67rnnrEbopP/v55iYGO3evVu9e/dWgQIFLOurVKmiZs2aWX3W/f39tX37dp05c8bu+Lt06aL8+fNbxS/J8hm9ePGi1q5dq86dO+vq1auW9+rChQuKiorSsWPH0l3im5FOnTrJz8/PslynTh1JUo8ePazm0depU0dJSUmWNletWqXLly+rW7duVp8VFxcX1alTR+vWrbP5WDt27JjplSBp/vnnH23cuFFPPPGEihUrZrXuXh6VmNHn5E7ngTVr1ig5OVlPP/20VXlG3880/fv3l4uLi1XZrVf/3LhxQxcuXFDp0qXl7+9vNQUhzYABA6xGbp966inlzZs33fm1QoUKVt+fgIAAlS1b9o7HdSe9evWyivm3335TbGysnn76aauR21atWqlcuXJavnx5ujb69etn+dnf319ly5aVt7e3OnfubCkvW7as/P397xjvN998Iz8/PzVr1szqM1izZk35+Pik+ww6q18y0rNnT23fvt1q+s+8efMUGhqqRo0a2dTG3faVu7u7Za59SkqKLly4YJm2lNHn6na2nAdvdTffoay2vfU8nTbtyZ7vGpDTkHQD9zmz2WyV4N6uS5cuql+/vvr166fChQura9eu+vrrr+1KwIsUKWLXzWPCw8Otlk0mk0qXLm3T41fuxZ9//qmQkJB0/ZF2WeCff/5pVX77H+2SlD9//kznR966n/Dw8HQ3D8psP7aw5X06ceKEypYtm+XNxOztg9sv2/znn390+fJlffLJJwoICLB6pf3jJTY2VpL04osvysfHRw888IDCw8M1aNAgq8vhM1OjRg15eXlZEuy0pDsiIkK//fabEhISLOsaNGhwx/aycvt7nJbAZvUep/2BXKlSpUzrpPVj2bJl060rX768zp8/b7l8eNKkSdq/f79CQ0P1wAMPaPTo0Tb/MXqn+I8fPy7DMDRq1Kh079frr78u6f/fL3v2k5aAh4aGZlietv9jx45JunmPidv3//PPP9u07zR3uoRY+v9/NmT13tjLw8MjXbJv63lAkkqXLm1VXqBAAat/lNwqo2O8fv26XnvtNcs9GAoVKqSAgABdvnxZcXFx6erffn718fFRcHBwuvPr3Z7f7uT2Y8jqu1CuXLl055yM+tvPz09FixZNl8z5+fndMd5jx44pLi5OgYGB6T6DZrM53WfQWf2SkS5dusjd3V3z5s2TJMXFxemHH35Q9+7dbfon0b30VWpqqqZMmaLw8HCrz1XadJ47seU8mFWc9vTpnc5zf/75p/LkyZPus3f7dw/IyZjTDdzH/vrrL8XFxWX5i8fT01MbN27UunXrtHz5cq1cuVILFy5U48aN9fPPP6cbdcmsDUfL7A+OlJQUm2JyhMz2Y9x2w7F/gyPep7vd763SkvwePXqoV69eGW5TpUoVSTeTyyNHjuiHH37QypUrtXjxYn300Ud67bXXNGbMmEz36erqqjp16mjjxo06fvy4zp49q4YNG6pw4cK6ceOGtm/frk2bNqlcuXJ3HPm8k/vhPe7cubMaNmyopUuX6ueff9bbb7+tiRMnasmSJWrRokWW294p/rT3a8SIEYqKisqwri1/mGa2H1v3P3fuXAUFBaWrZ8/d5p1xnrHFv3W+kTI+xiFDhmjWrFl67rnnVLduXfn5+clkMqlr1653fXWS5LzP/r2+T3f7WctMamqqAgMDLYnt7W4/h/yb54T8+fPrkUce0bx58/Taa69p0aJFSkxMVI8ePWza/l76avz48Ro1apSeeOIJvfHGGypQoIDy5Mmj55577p4+V/bEc6/bZ8fvYiC7kHQD97G0GxJl9sd2mjx58qhJkyZq0qSJJk+erPHjx+uVV17RunXr1LRp03u6LDMjaaNfaQzD0PHjxy3JmnTzj5Fb71Sd5s8//1TJkiUty/bEVrx4ca1evVpXr161Guk9fPiwZb0jFC9eXHv37lVqaqrVaPe97udO71OpUqW0fft23bhxI9NHTN1rHwQEBChfvnxKSUlR06ZN7xizt7e3unTpoi5duigpKUkdOnTQuHHjNHLkyCxvEtSwYUNNnDhRq1evVqFChVSuXDmZTCZVrFhRmzZt0qZNm/TII4/ccf+O/uxK/38ztv3792faB2n9eOTIkXTrDh8+rEKFClk9Dio4OFhPP/20nn76acXGxqpGjRoaN27cHZPuO0n7rri6utr0fjlaWl8FBgbecf+OeK/Sjnf//v333Na9SvsMHD9+3GoE7sKFC3aNmi5atEi9evXSu+++aylLSEjI8Pwo3Ty/PvTQQ5Zls9msmJgYtWzZ0s4jcIxbvwuNGze2WnfkyBGHnXczU6pUKa1evVr169d32D9u7Pms3qluz5491bZtW+3YsUPz5s1T9erVM72RnSMtWrRIDz30kGbOnGlVfvnyZRUqVMiynFn8tpwH/y3FixdXamqqTp48aXWlx/Hjx7MxKsCxuLwcuE+tXbtWb7zxhsLCwtS9e/dM62X0eJ9q1apJkhITEyXJkhxk9keevebMmWM1z3zRokWKiYmxSjBKlSqlbdu2KSkpyVL2ww8/pHu0mD2xtWzZUikpKfrggw+syqdMmSKTyXTPCc6t+zl79qwWLlxoKUtOTta0adPk4+Nj81y9W9nyPnXs2FHnz59Pd3zS/48I3GsfuLi4qGPHjlq8eHGGic2tj7+5cOGC1To3NzdVqFBBhmHoxo0bWe6nYcOGSkxM1NSpU9WgQQPLH34NGzbU3LlzdebMGZvmc3t7ezvsc5umRo0aCgsL09SpU9O1ndbPwcHBqlatmr744gurOvv379fPP/9sSYBSUlLSXcoZGBiokJAQy/t6LwIDAxUZGamPP/5YMTEx6dZn9LgiR4qKipKvr6/Gjx+f4Xt+6/4dcZ4JCAhQRESEPv/8c0VHR1ut+7dHxZo0aaK8efNq+vTpVuUZfT+z4uLiki72adOmZfrIsk8++cSqr6dPn67k5GSHnd/sVatWLQUGBmrGjBlWn+kVK1bo0KFDTr/DdOfOnZWSkqI33ngj3brk5OS7+rzZ81m9U90WLVqoUKFCmjhxojZs2GDzKPe9yuhz9c0336S7x0Nm8dtyHvy3pA0sfPTRR1bl06ZN+1fjAJyJkW7gPrBixQodPnxYycnJOnfunNauXatVq1apePHi+u6777IcURw7dqw2btyoVq1aqXjx4oqNjdVHH32kokWLWubLlipVSv7+/poxY4by5csnb29v1alTx6Y5lhkpUKCAGjRooD59+ujcuXOaOnWqSpcubfVYs379+mnRokVq3ry5OnfurBMnTujLL79M98gne2Jr3bq1HnroIb3yyis6deqUqlatqp9//lnffvutnnvuuXRt360BAwbo448/Vu/evbVz506VKFFCixYt0pYtWzR16tQs59hnxpb3qWfPnpozZ46GDRumX3/9VQ0bNlR8fLxWr16tp59+Wm3btnVIH7z11ltat26d6tSpo/79+6tChQq6ePGifv/9d61evdryD4KHH35YQUFBql+/vgoXLqxDhw7pgw8+UKtWre7YB3Xr1lXevHl15MgRy+O+JCkiIsKSxNiSdNesWVOrV6/W5MmTFRISorCwMMtNwO5Wnjx5NH36dLVu3VrVqlVTnz59FBwcrMOHD+vAgQP66aefJElvv/22WrRoobp166pv376WR4b5+flZnht79epVFS1aVI8++qiqVq0qHx8frV69Wjt27LAa2bwXH374oRo0aKDKlSurf//+KlmypM6dO6etW7fqr7/+snour6P5+vpq+vTpevzxx1WjRg117dpVAQEBio6O1vLly1W/fn1LElqzZk1J0jPPPKOoqCi5uLioa9eu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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": 6, "id": "5a232214-58fc-4a70-8069-37f3fe974f9e", "metadata": {}, "outputs": [], "source": [ "from pyjedai.clustering import UniqueMappingClustering\n" ] }, { "cell_type": "code", "execution_count": 7, "id": "6f8efe1d-b981-4fba-b5cf-2b28fb189ee2", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "***************************************************************************************************************************\n", " Method: Unique Mapping Clustering\n", "***************************************************************************************************************************\n", "Method name: Unique Mapping Clustering\n", "Parameters: \n", "\tSimilarity Threshold: 0.1\n", "Runtime: 0.0654 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": 7, "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", "
" ] } ], "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.9.0" }, "vscode": { "interpreter": { "hash": "824e5f4123a1a5b690f910010b2896a5dc6379151ca1c56e0c0465c15ebbd094" } } }, "nbformat": 4, "nbformat_minor": 5 }