{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "96ec678e-b20c-4213-8616-542010f46342",
   "metadata": {},
   "source": [
    "\n",
    "# Tf-Idf transformation\n",
    "\n",
    "<div align=\"center\"> \n",
    "    <img src=\"https://scikit-learn.org/stable/_static/scikit-learn-logo-small.png\" style=\"width: 150px;\"/>\n",
    "</div>\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<?, ?it/s]"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Standard Blocking: 100%|██████████| 2152/2152 [00:00<00:00, 20775.30it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "***************************************************************************************************************************\n",
      "                                         Method:  Standard Blocking\n",
      "***************************************************************************************************************************\n",
      "Method name: Standard Blocking\n",
      "Parameters: \n",
      "Runtime: 0.1049 seconds\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
      "Performance:\n",
      "\tPrecision:      0.08% \n",
      "\tRecall:        99.81%\n",
      "\tF1-score:       0.15%\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
      "Classification report:\n",
      "\tTrue positives: 1074\n",
      "\tFalse positives: 1406781\n",
      "\tTrue negatives: 1156698\n",
      "\tFalse negatives: 2\n",
      "\tTotal comparisons: 1407855\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Block Purging: 100%|██████████| 4266/4266 [00:00<00:00, 462839.21it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "***************************************************************************************************************************\n",
      "                                         Method:  Block Purging\n",
      "***************************************************************************************************************************\n",
      "Method name: Block Purging\n",
      "Parameters: \n",
      "\tSmoothing factor: 1.025\n",
      "\tMax Comparisons per Block: 13920.0\n",
      "Runtime: 0.0110 seconds\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
      "Performance:\n",
      "\tPrecision:      0.25% \n",
      "\tRecall:        99.81%\n",
      "\tF1-score:       0.49%\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
      "Classification report:\n",
      "\tTrue positives: 1074\n",
      "\tFalse positives: 436832\n",
      "\tTrue negatives: 1156698\n",
      "\tFalse negatives: 2\n",
      "\tTotal comparisons: 437906\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Block Filtering: 100%|██████████| 3/3 [00:00<00:00, 26.37it/s]\n",
      "Cardinality Edge Pruning: 100%|██████████| 1076/1076 [00:02<00:00, 532.97it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "***************************************************************************************************************************\n",
      "                                         Method:  Cardinality Edge Pruning\n",
      "***************************************************************************************************************************\n",
      "Method name: Cardinality Edge Pruning\n",
      "Parameters: \n",
      "\tNode centric: False\n",
      "\tWeighting scheme: X2\n",
      "Runtime: 2.0199 seconds\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
      "Performance:\n",
      "\tPrecision:      7.32% \n",
      "\tRecall:        93.77%\n",
      "\tF1-score:      13.58%\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
      "Classification report:\n",
      "\tTrue positives: 1009\n",
      "\tFalse positives: 12773\n",
      "\tTrue negatives: 1156633\n",
      "\tFalse negatives: 67\n",
      "\tTotal comparisons: 13782\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'Precision %': 7.32114352053403,\n",
       " 'Recall %': 93.77323420074349,\n",
       " 'F1 %': 13.581908736034462,\n",
       " 'True Positives': 1009,\n",
       " 'False Positives': 12773,\n",
       " 'True Negatives': 1156633,\n",
       " 'False Negatives': 67}"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pyjedai.block_building import StandardBlocking\n",
    "from pyjedai.block_cleaning import BlockFiltering\n",
    "from pyjedai.block_cleaning import BlockPurging\n",
    "from pyjedai.comparison_cleaning import WeightedEdgePruning, WeightedNodePruning, CardinalityEdgePruning, CardinalityNodePruning\n",
    "from pyjedai.matching import EntityMatching\n",
    "\n",
    "sb = StandardBlocking()\n",
    "blocks = sb.build_blocks(data)\n",
    "sb.evaluate(blocks, with_classification_report=True)\n",
    "\n",
    "cbbp = BlockPurging()\n",
    "blocks = cbbp.process(blocks, data, tqdm_disable=False)\n",
    "cbbp.evaluate(blocks, with_classification_report=True)\n",
    "\n",
    "bf = BlockFiltering(ratio=0.8)\n",
    "blocks = bf.process(blocks, data, tqdm_disable=False)\n",
    "\n",
    "wep = CardinalityEdgePruning(weighting_scheme='X2')\n",
    "candidate_pairs_blocks = wep.process(blocks, data)\n",
    "wep.evaluate(candidate_pairs_blocks, with_classification_report=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7f4ead03-11f5-4e19-9fd1-6dd7746e8a61",
   "metadata": {},
   "source": [
    "## Entity Matching with Tf-Idf configuration\n",
    "\n",
    "Available options with `metric='tf-idf'``:\n",
    "```\n",
    "tokenizer = {   'tfidf_char_1gram', ..., 'tfidf_char_6gram',\n",
    "                'tfidf_word_1gram', ..., 'tfidf_word_6gram',\n",
    "                'tf_char_1gram', ... , 'tf_char_6gram',\n",
    "                'tf_word_1gram', ... , 'tf_word_6gram',\n",
    "                'boolean_char_1gram', ... , 'boolean_char_6gram'\n",
    "                'boolean_word_1gram', ... , 'boolean_word_6gram'                \n",
    "```\n",
    "\n",
    "where: \n",
    "\n",
    "- `tdidf` literal calculates tf-idf in the whole dataset using TdidfVectorizer\n",
    "- `tf` literal calculates tf  in the whole dataset using CountVectorizer\n",
    "- `boolean` literal transforms tf-idf matrix to boolean\n",
    "\n",
    "and available metrics for vector similarity metric:\n",
    "\n",
    "- `metric = ['dice', 'jaccard', 'cosine']`\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e0de660d-7170-4b4d-96d1-c07c2b36b40d",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Entity Matching (cosine, char_tokenizer): 100%|██████████| 1073/1073 [00:00<00:00, 2605.80it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "***************************************************************************************************************************\n",
      "                                         Method:  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: 0.4132 seconds\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n",
      "Performance:\n",
      "\tPrecision:      7.32% \n",
      "\tRecall:        93.77%\n",
      "\tF1-score:      13.58%\n",
      "───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'Precision %': 7.32114352053403,\n",
       " 'Recall %': 93.77323420074349,\n",
       " 'F1 %': 13.581908736034462,\n",
       " 'True Positives': 1009,\n",
       " 'False Positives': 12773,\n",
       " 'True Negatives': 1156633,\n",
       " 'False Negatives': 67}"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "em = EntityMatching(metric='cosine', \n",
    "                    tokenizer='char_tokenizer',\n",
    "                    vectorizer='tfidf',\n",
    "                    qgram=3,\n",
    "                    similarity_threshold=0.0)\n",
    "pairs_graph = em.predict(candidate_pairs_blocks, data)\n",
    "em.evaluate(pairs_graph)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7f773307-35d8-4a10-88c0-c6eda7356ec4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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QpJ09OhRnTt3Tj179nTab0FBge666y6nZR07dnSaz83N1ZQpUxQXF6f09HQVFhbq/Pnz5ohUamqqXF1d1b59e3Obpk2bqnbt2ub8V199pdzcXN12221O+z5//ryOHTt2xXO+8847VadOHSUlJcnNzU133XWX/vCHP2j+/PmSLo1QhYaGWj6/X35PS0brStxzzz1at26d07JGjRrJ09PTnPf3979stA3WEKQAAACqOA8P6Rd3w1X4sa/XokWLVFhYqICAAHOZYRiy2+1688035eXlpYEDB6p79+7KyspSfHy83N3dFRERIUnmLX9xcXGqX7++077tdrvTfM2aNZ3mx40bp/j4eM2aNUtNmzaVu7u7HnnkERUUFFx3/7m5ufL393e6Va/ElZ5Jki59SGy3bt2UmJgou92u0NBQtWnTRvn5+fr666+1a9cujRs3zvL5WVW9evXL+iouLr6hff7eEaQAAACqOJtN+lVuuOkUFhZq6dKlmj17tnr16uW0rl+/fvrggw80atQode7cWYGBgVq5cqU2bNigRx991AwBwcHBstvtSktLU/fu3S0df+fOnXryySfN0Zvc3FynFyo0b95chYWF2r9/vzp06CDp0gjR6dOnzZr27dsrIyNDrq6uatSo0XUfu3v37nr33Xdlt9s1ffp0VatWTd26ddOrr76q/Px83XfffaU+v+bNm2vv3r1Oy349fz3c3NxUVFRkebvfM4IUfvcaTYyr7BZUXHDB/LrlixtVza3Gb9S7SIr4Rf2N/8N3Ygaf5QEAKD/r1q3T6dOnNWzYsMs+A6l///5atGiRRo0aJenS2/sWLlyob7/9Vtu2bTPrPD09NW7cOEVHR6u4uFhdunRRdna2du7cKYfDoaFDh171+HfccYdWr16tvn37ymaz6cUXX3QakWnRooXCwsI0cuRILViwQNWrV9dzzz0nd3d381XjYWFhCgkJUb9+/TRz5kw1a9ZMp06dUlxcnB566KHLbicsERoaqujoaLm5ualLly7msnHjxunuu+82R89Kc37PPvusunXrpjlz5qhv377aunWrNmzYYPn16I0aNdLnn3+uEydOqFatWqpTp46qVeO9dNfCdwcAAADlbtGiRQoLC7viB8n2799fX3zxhQ4cOCDp0tv7Dh8+rPr165ujNSWmTZumF198UTExMWrZsqUiIiIUFxenoKCg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++yz2r59u06dOlWuxzIMQ4WFheV6DCtOnDghm8123fWHDx9WRESEOnbsqO3bt+vgwYOaN2+e3NzcVFRU5FSbmpqqU6dOae/evZowYYISEhJ055136uDBg2V9Glfl7u4uHx+fCjteZSJIAQAAoMLk5uZq5cqVeuaZZxQZGanY2Fhz3RNPPKEBAwY41V+8eFF169bV0qVLJUnFxcWKiYlRUFCQ3N3d1bZtW3300UdmfWJiomw2mzZs2KAOHTrIbrdrx44dOnbsmB588EH5+vqqVq1auvvuu5WQkOB0rPT0dEVGRsrd3V1BQUFavny5GjVqpNdee82sOXPmjIYPH6569erJ4XDogQce0FdffVX236j/2Lx5s/z8/DRz5kzdeeedatKkiSIiIvTuu+/K3d3dqdbHx0d+fn5q1qyZHnvsMe3cuVP16tXTM888c9X9d+zYUbNmzTLn+/Xrp+rVqys3N1eS9OOPP8pms+no0aOSpPz8fI0bN07169dXzZo11alTJyUmJprbX+nWvr///e/y8fGRp6enhg8frokTJ6pdu3aX9TJr1iz5+/vrtttuU1RUlC5evChJCg0N1Q8//KDo6GjZbDZLQbQ8EaQAAACqOMMwlFeQVymTYRiWel21apVatGih5s2ba9CgQXr//ffNfQwcOFCffvqp+Uu8JG3atEnnzp3TQw89JEmKiYnR0qVLtXDhQh06dEjR0dEaNGiQkpKSnI4zceJEzZgxQ0eOHFGbNm2Um5urPn36aMuWLdq/f78iIiLUt29fpaWlmdsMGTJEp06dUmJiov71r3/pnXfeUVZWltN+H330UWVlZWnDhg3at2+f2rdvrx49eujnn3+29H24Xn5+fkpPT9f27dstb+vu7q5Ro0Zp586dl51Hie7du5tByDAMffbZZ/L29taOHTskXbqtsH79+mratKkkafTo0UpOTtaKFSt04MABPfroo4qIiNB33313xf0vW7ZM06dP1z/+8Q/t27dPDRo00IIFCy6r27Ztm44dO6Zt27ZpyZIlio2NNUP26tWrdfvtt2vq1KlKT09Xenq65e9FeeAZKQAAgCru3MVzqhVTq1KOnTspVzXdal53/aJFizRo0CBJUkREhLKzs5WUlKTQ0FCFh4erZs2aWrNmjQYPHixJWr58uf74xz/K09NT+fn5euWVV5SQkKCQkBBJUuPGjbVjxw69/fbb6t69u3mcqVOnqmfPnuZ8nTp11LZtW3N+2rRpWrNmjT755BONHj1a33zzjRISErR371517NhRkvTee+/pjjvuMLfZsWOH9uzZo6ysLNntdkmXRlHWrl2rjz76SCNHjrT67ftNjz76qDZt2qTu3bvLz89P9957r3r06KEhQ4bI4XD85vYtWrSQdOmWwivdchcaGqpFixapqKhIX3/9tdzc3DRgwAAlJiYqIiJCiYmJ5vc1LS1NixcvVlpamgICAiRJ48aN08aNG7V48WK98sorl+1/3rx5GjZsmJ566ilJ0ksvvaTNmzc7hWVJql27tt588025uLioRYsWioyM1JYtWzRixAjVqVNHLi4u8vT0lJ+fn7VvYDliRAoAAAAVIjU1VXv27NHjjz8uSXJ1ddWAAQO0aNEic/5Pf/qTli1bJknKy8vTxx9/rIEDB0qSjh49qnPnzqlnz56qVauWOS1dulTHjh1zOlZJGCqRm5urcePGqWXLlvL29latWrV05MgRc0QqNTVVrq6uat++vblN06ZNVbt2bXP+q6++Um5urm677Tan4x8/fvyy4/9Sq1atzNpWrVpJktP2vXv3vuq2Li4uWrx4sX788UfNnDlT9evX1yuvvKJWrVpd18hMyWjf1W6H69q1q86ePav9+/crKSlJ3bt3V2hoqDlKVRJyJengwYMqKipSs2bNnPpPSkq66vmnpqbqnnvucVr263np0vfIxcXFnPf397/qKNrNghEpAACAKs6juodyJ+X+dmE5Hft6LVq0SIWFheZohnTpF3273a4333xTXl5eGjhwoLp3766srCzFx8fL3d1dERERkmSOYsTFxal+/fpO+y4ZISpRs6bzKNm4ceMUHx+vWbNmqWnTpnJ3d9cjjzyigoKC6+4/NzdX/v7+Ts8ElbjWK7/Xr19vPu/zv//7vwoNDVVKSoq5/tfPOl1J/fr1NXjwYA0ePFjTpk1Ts2bNtHDhQr388svX3O7IkSOSLr317kq8vb3Vtm1bJSYmKjk5WT179lS3bt00YMAAffvtt/ruu+/MEanc3Fy5uLho3759TqFHuhQMb0T16tWd5m02m4qLi29on+WNIAUAAFDF2Ww2S7fXVYbCwkItXbpUs2fPVq9evZzW9evXTx988IFGjRqlzp07KzAwUCtXrtSGDRv06KOPmr9kBwcHy263Ky0t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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "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": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "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": [
    "<hr>\n",
    "<div align=\"right\">\n",
    "K. Nikoletos, J. Maciejewski, G. Papadakis & M. Koubarakis\n",
    "</div>\n",
    "<div align=\"right\">\n",
    "<a href=\"https://github.com/Nikoletos-K/pyJedAI/blob/main/LICENSE\">Apache License 2.0</a>\n",
    "</div>"
   ]
  }
 ],
 "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
}