{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "BERTopic Probabilities vs LDA Probabilities: https://github.com/MaartenGr/BERTopic/issues/763 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "UsageError: Line magic function `%pip3` not found.\n"
     ]
    }
   ],
   "source": [
    "%pip3 install -Uq sentence-transformers faiss-cpu accelerate hdbscan bertopic evaluate kaleido datasets>=2.11\n",
    "%pip install bertopic"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from transformers import AutoTokenizer, AutoModel, AutoModelForSequenceClassification\n",
    "from transformers import pipeline\n",
    "import numpy as np\n",
    "import torch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from bertopic import BERTopic\n",
    "from bertopic.vectorizers import ClassTfidfTransformer\n",
    "import plotly\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "model_name = 'sentence-transformers/all-MiniLM-L6-v2'\n",
    "\n",
    "docs = pd.read_csv(\"data/cisi-csv/docs.csv\")\n",
    "queries = pd.read_csv(\"data/cisi-csv/queries.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Number of documents: 1460\n",
      "Number of queries: 112\n"
     ]
    }
   ],
   "source": [
    "print(\"Number of documents:\", len(docs))\n",
    "print(\"Number of queries:\", len(queries))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "def word_len(x):\n",
    "    return len(x.split(\" \"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Average length of documents in characters: 833.1465753424658\n",
      "Min length of documents in characters: 70\n",
      "Max length of documents in characters: 3886\n",
      "Average length of documents in words: 127.7904109589041\n",
      "Min length of documents in words: 10\n",
      "Max length of documents in words: 567\n",
      "Average length of queries in characters: 580.4642857142857\n",
      "Min length of queries in characters: 38\n",
      "Max length of queries in characters: 2178\n",
      "Average length of queries in words: 89.10714285714286\n",
      "Min length of queries in words: 4\n",
      "Max length of queries in words: 362\n"
     ]
    }
   ],
   "source": [
    "docs[\"length\"] = docs[\"text\"].apply(len)\n",
    "docs[\"length_words\"] = docs[\"text\"].apply(word_len)\n",
    "print(\"Average length of documents in characters:\", docs.loc[:, 'length'].mean())\n",
    "print(\"Min length of documents in characters:\", docs.loc[:, 'length'].min())\n",
    "print(\"Max length of documents in characters:\", docs.loc[:, 'length'].max())\n",
    "print(\"Average length of documents in words:\", docs.loc[:, 'length_words'].mean())\n",
    "print(\"Min length of documents in words:\", docs.loc[:, 'length_words'].min())\n",
    "print(\"Max length of documents in words:\", docs.loc[:, 'length_words'].max())\n",
    "queries[\"length\"] = queries[\"text\"].apply(len)\n",
    "queries[\"length_words\"] = queries[\"text\"].apply(word_len)\n",
    "print(\"Average length of queries in characters:\", queries.loc[:, 'length'].mean())\n",
    "print(\"Min length of queries in characters:\", queries.loc[:, 'length'].min())\n",
    "print(\"Max length of queries in characters:\", queries.loc[:, 'length'].max())\n",
    "print(\"Average length of queries in words:\", queries.loc[:, 'length_words'].mean())\n",
    "print(\"Min length of queries in words:\", queries.loc[:, 'length_words'].min())\n",
    "print(\"Max length of queries in words:\", queries.loc[:, 'length_words'].max())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAHHCAYAAABZbpmkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABH8UlEQVR4nO3deXhU1f3H8c+EkEBCFhKylhACIsgqoMRUUJDIWiqCVREqIEJFQBa3Yq0stg2CUlyhVglYtSgu2GpB2UFEBAQRUIQIASWbxDAJS9bz+4OH+TEmLJlMMpPL+/U893mYe8+5870nY/Lx3nPv2IwxRgAAABbl4+kCAAAAqhNhBwAAWBphBwAAWBphBwAAWBphBwAAWBphBwAAWBphBwAAWBphBwAAWBphBwAAWBphB/Ai3bt3V9u2bWvkvebMmaNmzZqpTp06uvrqq2vkPeE+999/v26++WbH60OHDslms2nRokWeK6qaTZ8+XTabrVJ99u7dK19fX+3evbuaqkJtQNiB5SxatEg2m03btm3zdCkVOnr0qKZPn66dO3d6rIZPPvlEjzzyiK6//nqlpqbqb3/723nbjhgxQjabzbE0aNBAzZo102233aZ3331XZWVlNVh57XLy5ElNnz5d69atc+t+Dx48qFdeeUWPPfaYW/drRa1bt1b//v31xBNPeLoUeJCvpwsALjdHjx7VjBkz1LRpU4+dUVmzZo18fHz06quvys/P76Lt/f399corr0iSTp06pfT0dP33v//Vbbfdpu7du+uDDz5QcHBwdZdd65w8eVIzZsyQdOasnbs8++yzSkhIUI8ePRzr4uPjderUKdWtW9dt72MV9913n/r166e0tDQ1b97c0+XAAzizA1yGsrOzVb9+/UsKOpLk6+urYcOGadiwYRo9erT+8pe/6KuvvlJKSorWrVun0aNHV3PFOKu4uFhvvPGGbr/9dqf1NptN9erVU506dTxUWdWVlJSoqKjI7ftNTk5Ww4YNtXjxYrfvG7UDYQeXrR9//FH33HOPoqKi5O/vrzZt2mjhwoVObdatWyebzaa3335bf/3rX9W4cWPVq1dPPXv21IEDB8rt88UXX1SzZs1Uv359denSRRs3blT37t0d/1e/bt06XXvttZKkkSNHOi4N/XKexd69e9WjRw8FBAToV7/6lWbPnn1Jx1RSUqInn3xSzZs3l7+/v5o2barHHntMhYWFjjY2m02pqak6ceLEed//Uv3xj39Ur169tHTpUn333XdO21566SW1adNG/v7+io2N1bhx45SXl1duH1u2bFG/fv3UsGFDBQYGqn379nr22Wcd288dv3ONGDFCTZs2dbw+O2fl6aefdvwcAgIC1KtXLx05ckTGGD355JNq3Lix6tevr1tuuUW5ubnl9rt8+XJ169ZNgYGBCgoKUv/+/bVnz55y792gQQP9+OOPGjhwoBo0aKCIiAg99NBDKi0tddQTEREhSZoxY4ZjrKdPny5JyszM1MiRI9W4cWP5+/srJiZGt9xyiw4dOnTBMf/000/1008/KTk52Wl9RXN2LqXO85kyZYrCw8NljHGsmzBhgmw2m5577jnHuqysLNlsNs2fP9+xLjs7W6NGjVJUVJTq1aunDh06lAsa5/685s2b5/jM7t2713Gc1157rerVq6fmzZvrH//4R4V1rly5Ul27dlVoaKgaNGigli1blru8V7duXccZSFyeuIyFy1JWVpauu+462Ww2jR8/XhEREVq+fLlGjRolu92uSZMmObWfNWuWfHx89NBDD+n48eOaPXu2hg4dqi1btjjazJ8/X+PHj1e3bt00efJkHTp0SAMHDlTDhg3VuHFjSdJVV12lmTNn6oknntCYMWPUrVs3SdKvf/1rx35+/vln9enTR4MGDdLtt9+ud955R48++qjatWunvn37XvC47r33Xi1evFi33XabHnzwQW3ZskUpKSn65ptv9P7770uS/vWvf+nll1/WF1984bg0de77V9bvf/97ffLJJ1q5cqWuvPJKSWcmks6YMUPJyckaO3as9u3bp/nz52vr1q3atGmT41LLypUr9Zvf/EYxMTGaOHGioqOj9c033+jDDz/UxIkTXarnjTfeUFFRkSZMmKDc3FzNnj1bt99+u2666SatW7dOjz76qA4cOKDnn39eDz30kFPA/de//qXhw4erd+/eeuqpp3Ty5EnNnz9fXbt21Y4dO5zCVWlpqXr37q3ExEQ9/fTTWrVqlZ555hk1b95cY8eOVUREhObPn6+xY8fq1ltv1aBBgyRJ7du3lyQNHjxYe/bs0YQJE9S0aVNlZ2dr5cqVOnz4sNP7/NJnn30mm82mjh07XtJ4XKzO8+nWrZv+/ve/a8+ePY5J8xs3bpSPj482btyoBx54wLFO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PHjwoHx8fByT6HF5IezgslOnTh0NHjxY7777boV/aHNyciq9z2uuuUbh4eH65z//qZKSEsf6N954o9z/hQcGBkpShX/Aq6Jfv36SpHnz5jmtnzt3riSpf//+bn0/6cxdap988onuuOMOx2WH5ORk+fn56bnnnnM6I/Pqq6/q+PHjjjo6deqkhIQEzZs3r9xYnNuvefPm+vbbb51+Ll999VWFd9xURe/evRUcHKy//e1vKi4uLrfdlc9FQECApPI/65MnT+r06dNO65o3b66goCCnxwRUJCkpScYYbd++vdL1VFZCQoJ+9atf6e9//7uKi4t1/fXXSzoTgtLS0vTOO+/ouuuuczrr1a9fP2VmZuqtt95yrCspKdHzzz+vBg0a6MYbb7zge9apU0e9e/fWsmXLdPjwYcf6b775Rh9//LFT24oeHXD2QZ2/HMft27erTZs2TvO5cPngMhYsa+HChVqxYkW59RMnTtSsWbO0du1aJSYmavTo0WrdurVyc3P15ZdfatWqVRX+Er0QPz8/TZ8+XRMmTNBNN92k22+/XYcOHdKiRYvUvHlzp//Db968uUJDQ7VgwQIFBQUpMDBQiYmJ5eYuVFaHDh00fPhwvfzyy8rLy9ONN96oL774QosXL9bAgQOdnrZbWSUlJXr99dclSadPn1Z6err+85//aNeuXerRo4defvllR9uIiAhNnTpVM2bMUJ8+ffTb3/5W+/bt00svvaRrr73WMfnax8dH8+fP14ABA3T11Vdr5MiRiomJ0bfffqs9e/Y4/rDdc889mjt3rnr37q1Ro0YpOztbCxYsUJs2bWS326swYs6Cg4M1f/58/f73v1enTp105513KiIiQocPH9ZHH32k66+/Xi+88EKl9lm/fn21bt1ab731lq688kqFhYWpbdu2KikpUc+ePXX77berdevW8vX11fvvv6+srCzdeeedF9xn165dFR4erlWrVummm26qyiFfkm7dumnJkiVq166dY65ap06dFBgYqO+++0533XWXU/sxY8boH//4h0aMGKHt27eradOmeuedd7Rp0ybNmzfPMbfrQmbMmKEVK1aoW7duuv/++x1hqU2bNtq1a5ej3cyZM7Vhwwb1799f8fHxys7O1ksvvaTGjRura9eujnbFxcVav3697r//fjeNCmodD90FBlSbs7een285cuSIMcaYrKwsM27cOBMXF2fq1q1roqOjTc+ePc3LL7/s2NfZW8+XLl3q9B4V3eZrjDHPPfeciY+PN/7+/qZLly5m06ZNpnPnzqZPnz5O7T744APTunVr4+vr67SfG2+80bRp06bcMf3yNuvzKS4uNjNmzDAJCQmmbt26Ji4uzkydOtVxe/W5+6vMrefnjl9AQIBp2rSpGTx4sHnnnXecbi8/1wsvvGBatWpl6tata6KioszYsWPL3WJujDGffvqpufnmm01QUJAJDAw07du3N88//7xTm9dff900a9bM+Pn5mauvvtp8/PHH5731/Je3c5/vZ3i+RxSsXbvW9O7d24SEhJh69eqZ5s2bmxEjRpht27Y5jUlF4zdt2jTzy1+rn332mencubPx8/Nz3Ib+008/mXHjxplWrVqZwMBAExISYhITE83bb79d4Vj+0gMPPGCuuOIKp3Xnu/X8Uus8nxdffNFIMmPHjnVan5ycbCSZ1atXl+uTlZVlRo4caRo1amT8/PxMu3btyv23cr6f11nr1693jFuzZs3MggULytW9evVqc8stt5jY2Fjj5+dnYmNjzZAhQ8x3333ntK/ly5cbSWb//v2XdMywHpsx1TDDEoCkM5NeIyIiNGjQIP3zn//0dDmwiO+//16tWrXS8uXL1bNnT0+X4/UGDhwom83meLAmLj9cxgLc5PTp0/L393e6ZPXaa68pNzfXrV8CCTRr1kyjRo3SrFmzCDsXcfaJ3Dt37vR0KfAgzuwAbrJu3TpNnjxZv/vd7xQeHq4vv/xSr776qq666ipt3779kr90EwDgXpzZAdykadOmiouL03PPPafc3FyFhYXp7rvv1qxZswg6AOBBnNkBAACWxnN2AACApRF2AACApTFnR2duDz569KiCgoL4kjgAAGoJY4zy8/MVGxtb7stnz0XYkXT06NFy34gMAABqhyNHjqhx48bn3U7YkRyPLz9y5IiCg4M9XA0AALgUdrtdcXFxF/0aEsKO/v+biYODgwk7AADUMhebgsIEZQAAYGmEHQAAYGmEHQAAYGkeDTspKSm69tprFRQUpMjISA0cOFD79u1zanP69GmNGzdO4eHhatCggQYPHqysrCynNocPH1b//v0VEBCgyMhIPfzwwyopKanJQwEAAF7Ko2Fn/fr1GjdunD7//HOtXLlSxcXF6tWrl06cOOFoM3nyZP33v//V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CwvTm2++6c6yAACAhdSqOTsAAACVRdgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACWRtgBAACW5tGws2HDBg0YMECxsbGy2WxatmyZY1txcbEeffRRtWvXToGBgYqNjdXdd9+to0ePOu2jadOmstlsTsusWbNq+EgAAIC38mjYOXHihDp06KAXX3yx3LaTJ0/qyy+/1J///Gd9+eWXeu+997Rv3z799re/Ldd25syZysjIcCwTJkyoifIBAEAt4OvJN+/bt6/69u1b4baQkBCtXLnSad0LL7ygLl266PDhw2rSpIljfVBQkKKjo6u1VgAAUDvVqjk7x48fl81mU2hoqNP6WbNmKTw8XB07dtScOXNUUlJywf0UFhbKbrc7LQAAwJo8emanMk6fPq1HH31UQ4YMUXBwsGP9Aw88oE6dOiksLEyfffaZpk6dqoyMDM2dO/e8+0pJSdGMGTNqomwAAOBhtSLsFBcX6/bbb5cxRvPnz3faNmXKFMe/27dvLz8/P/3hD39QSkqK/P39K9zf1KlTnfrZ7XbFxcVVT/EAAMCjvD7snA066enpWrNmjdNZnYokJiaqpKREhw4dUsuWLSts4+/vf94gBAAArMWrw87ZoLN//36tXbtW4eHhF+2zc+dO+fj4KDIysgYqBAAA3s6jYaegoEAHDhxwvD548KB27typsLAwxcTE6LbbbtOXX36pDz/8UKWlpcrMzJQkhYWFyc/PT5s3b9aWLVvUo0cPBQUFafPmzZo8ebKGDRumhg0beuqwAACAF/Fo2Nm2bZt69OjheH12Hs3w4cM1ffp0/ec//5EkXX311U791q5dq+7du8vf319LlizR9OnTVVhYqISEBE2ePNlpPg4AALi8eTTsdO/eXcaY826/0DZJ6tSpkz7//HN3lwUAACzEpefsfP/99+6uAwAAoFq4FHauuOIK9ejRQ6+//rpOnz7t7poAAADcxqWw8+WXX6p9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VKXnZBQcy6ymagAAqH14qCAAALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0wg4AALA0rw4706dPl81mc1patWrl2H769GmNGzdO4eHhatCggQYPHqysrCwPVgwAALyNV4cdSWrTpo0yMjIcy6effurYNnnyZP33v//V0qVLtX79eh09elSDBg3yYLUAAMDb+Hq6gIvx9fVVdHR0ufXHjx/Xq6++qjfffFM33XSTJCk1NVVXXXWVPv/8c1133XU1XSoAAPBCXn9mZ//+/YqNjVWzZs00dOhQHT58WJK0fft2FRcXKzk52dG2VatWatKkiTZv3nzBfRYWFsputzstAADAmrw67CQmJmrRokVasWKF5s+fr4MHD6pbt27Kz89XZmam/Pz8FBoa6tQnKipKmZmZF9xvSkqKQkJCHEtcXFw1HgUAAPAkr76M1bdvX8e/27dvr8TERMXHx+vtt99W/fr1Xd7v1KlTNWXKFMdru91O4AEAwKK8+szOL4WGhurKK6/UgQMHFB0draKiIuXl5Tm1ycrKqnCOz7n8/f0VHBzstAAAAGuqVWGnoKBAaWlpiomJUefOnVW3bl2tXr3asX3fvn06fPiwkpKSPFglAADwJl59Geuhhx7SgAEDFB8fr6NHj2ratGmqU6eOhgwZopCQEI0aNUpTpkxRWFiYgoODNWHCBCUlJXEnFgAAcPDqsPPDDz9oyJAhOnbsmCIiItS1a1d9/vnnioiIkCT9/e9/l4+PjwYPHqzCwkL17t1bL730koerBgAA3sSrw86SJUsuuL1evXp68cUX9eKLL9ZQRQAAoLapVXN2AAAAKouwAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALI2wAwAALM2rv/UcgPfJycmR3W53qW9wcLAiIiLcXBEAXBhhB8Aly8nJ0bCR9yo3/6RL/cOCAvR66isEHgA1irAD4JLZ7Xbl5p9URNJgBYZFVarvidws5Wx+V3a7nbADoEYR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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "docs['length_words'].plot(kind='hist', bins=30, edgecolor='black', alpha=0.7)\n",
    "plt.xlabel('Length')\n",
    "plt.ylabel('Frequency')\n",
    "plt.title('Length of Documents (in words)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjIAAAHHCAYAAACle7JuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA7a0lEQVR4nO3deXQUVd7G8adJSCAhTRKySwgQ9lVFWQZRlMjmIAgzKooGBvCVAQcE1EFnBHQU0RfGBQQ3goyOirLoOIrKpoiIAgLiEiFC2JLQEkgnLFnv+4eHfm0SSLpJ0qnw/ZzT59BV91b/bleZfqy+1WUzxhgBAABYUB1fFwAAAOAtggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggwAALAsggxgEb1791aHDh2q5bWeeuopNW/eXH5+frr00kur5TWris1m04wZM6r9db/66isFBAQoPT3dtax3797q3bt3tddSXfbt2yebzabFixd71K979+66//77q6Yo1HoEGVxUFi9eLJvNpi1btvi6lDIdPnxYM2bM0Pbt231Ww8cff6z7779fPXv2VEpKih5//PFy+7z//vvq37+/GjVqpHr16qlVq1a67777lJ2dXQ0V10wPPfSQhg8froSEBF+XUuM98MADmj9/vjIzM31dCizI39cFAPh/hw8f1syZM9W0aVOfnQlZu3at6tSpo1deeUUBAQHltp86darmzJmjzp0764EHHlB4eLi2bdum5557Tm+99ZbWrFmjli1bVkPlZTt16pT8/av3T9327du1evVqffHFF27LP/7442qtwyoGDx4su92u559/Xo888oivy4HFEGQAuDly5Ijq169foRDzxhtvaM6cObrlllv0+uuvy8/Pz7Vu5MiRuvbaa/XHP/5RW7ZsqdYwUVJSooKCAtWrV0/16tWrttc9IyUlRU2aNFH37t3dllfkPa3pTp48qaCgoErdZp06dfSHP/xBS5Ys0cyZM2Wz2Sp1+6jd+GoJKMOhQ4f0pz/9SdHR0QoMDFT79u21aNEitzbr16+XzWbT0qVL9dhjj6lx48aqV6+e+vTpoz179pTa5vz589W8eXPVr19fXbt21YYNG9zmTKxfv15XXnmlJGnUqFGy2Wxlzjf4/vvvde211yooKEiXXHKJnnzyyQqNqaioSI8++qgSExMV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/+x+QECAZsyYoXvuuUfXXXedbr75Zu3bt0+LFy9WYmKi29mGxMREhYaGauHChQoJCVFwcLC6detWofkf59O5c2clJyfrxRdf1PHjx3XNNdfoq6++0quvvqohQ4a4nSnyxPDhw7VlyxbNnTtX33//vWsC87Zt27Ro0SJFRkbqnXfecZvkPGbMGL3zzjvq37+/br75ZqWlpem1115TYmKi27bvuOMOLV26VHfffbfWrVunnj17qri4WD/++KOWLl2qjz76SFdccYXHNVd0//bt21cxMTHq2bOnoqOj9cMPP2jevHm64YYbyp3gPHjwYK1YsaJa5nz06tVLjz32mA4cOOAWWK6++mq98MILatq0qesSf+nXs1LTpk3TzJkz1b9/f914441KTU3V888/ryuvvNJtMvm5DBo0SD179tRf//pX7du3T+3atdPy5cuVk5Pj1u6nn35Snz59dPPNN6tdu3by9/fXihUrlJWVpVtvvdWt7SeffKImTZpw6TU855uLpQDfOHP59bkeBw4cMMYYk5WVZcaPH2/i4+NN3bp1TUxMjOnTp4958cUXXds6c+ns22+/7fYae/fuLfMS6meffdYkJCSYwMBA07VrV7Nx40bTpUsX079/f7d27777rmnXrp3x9/d3284111xT5uXAycnJJiEhodyxFxYWmpkzZ5pmzZqZunXrmvj4eDNt2jRz+vTpUturyOXXv/Xee++ZpKQkExoa6nov27dvb3JycspsP2fOHHPJJZeYwMBA07NnT7Nly5ZSlyYbY0xBQYGZPXu2ad++vQkMDDRhYWGmS5cuZubMmW7blmTGjx9f5mvprMuvjanY/n3hhRfM1VdfbRo1amQCAwNNYmKiue+++845pt86c8nz2ZeOn+vy64oeQ2VxOp3Gz8/PhISEmKKiItfy1157zUgyd9xxR5n95s2bZ9q0aWPq1q1roqOjzbhx48yxY8dK1XuuS9CPHj1q7rjjDmO3203Dhg3NHXfcYb755hu3un/55Rczfvx406ZNGxMcHGwaNmxounXrZpYuXeq2reLiYhMbG2v+9re/lTte4Gw2Y6pgRiKAcpWUlCgyMlJDhw4t8+sTKxszZoxeeeUVvfTSSxozZoyvy/GJPn36KC4uTv/61798XUqNt3LlSt12221KS0tTbGysr8uBxTBHBqgGp0+fLnUFypIlS5SdnV3qZ/lrgxdeeEG///3vNW7cONdv2FxsHn/8cb311lteXdp+sZk9e7YmTJhAiIFXOCMDVIP169fr3nvv1R//+Ec1atRI27Zt0yuvvKK2bdtq69atteJmggDgC0z2BapB06ZNFR8fr2effVbZ2dkKDw/XnXfeqSeeeIIQAwAXgDMyAADAspgjAwAALIsgAwAALKvWz5EpKSnR4cOHFRISws3IAACwCGOMcnNzFRcX53an9rPV+iBz+PDhUjeXAwAA1nDgwAG3X6c+W60PMmd+SvzAgQOy2+0+rgYAAFSE0+lUfHx8ubcEqfVB5szXSXa7nSADAIDFlDcthMm+AADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsggyAADAsvx9XYCVORwOOZ1Or/ra7XZFRkZWckUAAFxcCDJecjgcGjFqjLJzT3rVPzwkSK+lvEyYAQDgAhBkvOR0OpWde1KRPYYpODzao74nsrPk2LRMTqeTIAMAwAUgyFyg4PBo2aMae9zPUQW1AABwsWGyLwAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyfBplZs2bpyiuvVEhIiKKiojRkyBClpqa6tTl9+rTGjx+vRo0aqUGDBho2bJiysrJ8VDEAAKhJfBpkPv30U40fP15ffvmlPvnkExUWFqpv3746ceKEq829996r//znP3r77bf16aef6vDhwxo6dKgPqwYAADWFvy9ffNWqVW7PFy9erKioKG3dulVXX321cnJy9Morr+jf//63rrvuOklSSkqK2rZtqy+//FLdu3f3RdkAAKCGqFFzZHJyciRJ4eHhkqStW7eqsLBQSUlJrjZt2rRRkyZNtGnTJp/UCAAAag6fnpH5rZKSEk2aNEk9e/ZUhw4dJEmZmZkKCAhQaGioW9vo6GhlZmaWuZ38/Hzl5+e7njudziqrGQAA+FaNOSMzfvx47dq1S2+++eYFbWfWrFlq2LCh6xEfH19JFQIAgJqmRgSZCRMm6P3339e6devUuHFj1/KYmBgVFBTo+PHjbu2zsrIUExNT5ramTZumnJwc1+PAgQNVWToAAPAhnwYZY4wmTJigFStWaO3atWrWrJnb+i5duqhu3bpas2aNa1lqaqr279+vHj16lLnNwMBA2e12twcAAKidfDpHZvz48fr3v/+td999VyEhIa55Lw0bNlT9+vXVsGFDjR49WpMnT1Z4eLjsdrvuuece9ejRgyuWAACAb4PMggULJEm9e/d2W56SkqKRI0dKkv75z3+qTp06GjZsmPLz89WvXz89//zz1VwpAACoiXwaZIwx5bapV6+e5s+fr/nz51dDRQAAwEpqxGRfAAAAbxBkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZRFkAACAZfk0yHz22WcaNGiQ4uLiZLPZtHLlSrf1I0eOlM1mc3v079/fN8UCAIAax6dB5sSJE+rcubPmz59/zjb9+/dXRkaG6/HGG29UY4UAAKAm8/fliw8YMEADBgw4b5vAwEDFxMRUU0UAAMBKavwcmfXr1ysqKkqtW7fWuHHjdPToUV+XBAAAagifnpEpT//+/TV06FA1a9ZMaWlpevDBBzVgwABt2rRJfn5+ZfbJz89Xfn6+67nT6ayucgEAQDWr0UHm1ltvdf27Y8eO6tSpkxITE7V+/Xr16dOnzD6zZs3S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2aMae9Qn72hmFVWDsrCPAKB8TPYFAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWxU0jAViaw+GQ0+n0qm9BQYECAgK86mu32xUZGelVXwCVhyADwLIcDodGjBqj7NyTHvctLCjQof3papzQTP51Pf9TGB4SpNdSXibMAD5GkAFgWU6nU9m5JxXZY5iCw6M96nskbZd+3rdIYV0Hq1Fcgkd9T2RnybFpmZxOJ0EG8DGCDADLCw6Plj2qsUd98o5mSpKCwiI97itJDo97AKgKTPYFAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWRZABAACWxU0jAfhcYUGB0tPTPe6Xnp6uosKiKqiodvL2fZYku93Onb5rMYfDIafT6VVfXx8bBBkAPpWfl6N9e3/WpAdnKDAw0KO+p0+d1MFDGWpSWFhF1dUeF/I+S1J4SJBeS3mZMFMLORwOjRg1Rtm5J73q7+tjgyADwKcK80+pxOaviO5D1SguwaO+R9J2Kf3AIhUXEWTKcyHv84nsLDk2LZPT6STI1EJOp1PZuScV2WOYgsOjPepbE44NggyAGiEoLFL2qMYe9ck7mllF1dRe3rzPkuSoglpQswSHR1vy2GCyLwAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCyCDAAAsCxLBJn58+eradOmqlevnrp166avvvrK1yUBAIAaoMYHmbfeekuTJ0/W9OnTtW3bNnXu3Fn9+vXTkSNHfF0aAADwsRofZObOnauxY8dq1KhRateunRYuXKigoCAtWrTI16UBAAAfq9FBpqCgQFu3blVSUpJrWZ06dZSUlKRNmzb5sDIAAFAT1OibRv7yyy8qLi5WdLT73Tijo6P1448/ltknPz9f+fn5ruc5OTmSfr27Z2XKzc1VcVGRjmfsU+Fpz2597jxyUKakRM7MA/K3ef7aF9KfvvSl74X3PXHsiPJPndL333+v3NxczzpfgAMHDqjg9Olq/7vjq/GielzIcXXi2BEVFxUpNze30j9nz2zPGHP+hqYGO3TokJFkvvjiC7fl9913n+natWuZfaZPn24k8eDBgwcP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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "queries['length_words'].plot(kind='hist', bins=30, edgecolor='black', alpha=0.7)\n",
    "plt.xlabel('Length')\n",
    "plt.ylabel('Frequency')\n",
    "plt.title('Length of Queries (in words)')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Topic</th>\n",
       "      <th>Count</th>\n",
       "      <th>Name</th>\n",
       "      <th>Representation</th>\n",
       "      <th>Representative_Docs</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-1</td>\n",
       "      <td>389</td>\n",
       "      <td>-1_literature_on_with_an</td>\n",
       "      <td>[literature, on, with, an, be, scientific, sub...</td>\n",
       "      <td>[Library Optimum Sir,-In his recent article B....</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>259</td>\n",
       "      <td>0_libraries_library_university_academic</td>\n",
       "      <td>[libraries, library, university, academic, pub...</td>\n",
       "      <td>[Cooperation Between Types of Libraries This b...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "      <td>88</td>\n",
       "      <td>1_chemical_compounds_notation_search</td>\n",
       "      <td>[chemical, compounds, notation, search, ca, ti...</td>\n",
       "      <td>[Experiences of IIT Research Institute in Oper...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2</td>\n",
       "      <td>82</td>\n",
       "      <td>2_information_science_theory_needs</td>\n",
       "      <td>[information, science, theory, needs, flow, in...</td>\n",
       "      <td>[Science and Information Theory A new scientif...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>3</td>\n",
       "      <td>63</td>\n",
       "      <td>3_automatic_indexing_index_terms</td>\n",
       "      <td>[automatic, indexing, index, terms, document, ...</td>\n",
       "      <td>[What Makes An Automatic Keyword Classificatio...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>4</td>\n",
       "      <td>61</td>\n",
       "      <td>4_social_psychology_sociology_science</td>\n",
       "      <td>[social, psychology, sociology, science, behav...</td>\n",
       "      <td>[Is a Scientific Revolution Taking Place in Ps...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>5</td>\n",
       "      <td>45</td>\n",
       "      <td>5_relevance_answer_relevant_retrieval</td>\n",
       "      <td>[relevance, answer, relevant, retrieval, docum...</td>\n",
       "      <td>[On Relevance, Probabilistic Indexing and Info...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>6</td>\n",
       "      <td>39</td>\n",
       "      <td>6_bases_data_bibliographic_line</td>\n",
       "      <td>[bases, data, bibliographic, line, readable, s...</td>\n",
       "      <td>[Survey of Commercially Available Computer-Rea...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>7</td>\n",
       "      <td>37</td>\n",
       "      <td>7_citation_citations_papers_citing</td>\n",
       "      <td>[citation, citations, papers, citing, cross, s...</td>\n",
       "      <td>[Improvement of the Selectivity of Citation In...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>8</td>\n",
       "      <td>32</td>\n",
       "      <td>8_catalog_catalogs_card_cataloging</td>\n",
       "      <td>[catalog, catalogs, card, cataloging, divided,...</td>\n",
       "      <td>[The Recording of Library of Congress Bibliogr...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>9</td>\n",
       "      <td>29</td>\n",
       "      <td>9_communication_informal_scientists_social</td>\n",
       "      <td>[communication, informal, scientists, social, ...</td>\n",
       "      <td>[Research Studies in Patterns of Scientific Co...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>10</td>\n",
       "      <td>28</td>\n",
       "      <td>10_journals_coverage_journal_articles</td>\n",
       "      <td>[journals, coverage, journal, articles, period...</td>\n",
       "      <td>[Citation Patterns fo the Cardiovascular Seria...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>11</td>\n",
       "      <td>26</td>\n",
       "      <td>11_language_linguistics_linguistic_text</td>\n",
       "      <td>[language, linguistics, linguistic, text, sema...</td>\n",
       "      <td>[Functional Approach The present book sums up ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>12</td>\n",
       "      <td>25</td>\n",
       "      <td>12_medical_health_hospital_manpower</td>\n",
       "      <td>[medical, health, hospital, manpower, hospital...</td>\n",
       "      <td>[Library Practice in Hospitals According to a ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>13</td>\n",
       "      <td>24</td>\n",
       "      <td>13_retrieval_user_interactive_system</td>\n",
       "      <td>[retrieval, user, interactive, system, systems...</td>\n",
       "      <td>[Human Factors in the Design of an Interactive...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>14</td>\n",
       "      <td>21</td>\n",
       "      <td>14_classification_decimal_dewey_schemes</td>\n",
       "      <td>[classification, decimal, dewey, schemes, udc,...</td>\n",
       "      <td>[Adopting the Library of Congress Classificati...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>15</td>\n",
       "      <td>21</td>\n",
       "      <td>15_automation_telefacsimile_processing_automated</td>\n",
       "      <td>[automation, telefacsimile, processing, automa...</td>\n",
       "      <td>[Application of Computer Technology to Library...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>16</td>\n",
       "      <td>18</td>\n",
       "      <td>16_fuzzy_sets_classification_hedge</td>\n",
       "      <td>[fuzzy, sets, classification, hedge, membershi...</td>\n",
       "      <td>[Prospects for a New General Classification In...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>17</td>\n",
       "      <td>17</td>\n",
       "      <td>17_bradford_law_references_zipf</td>\n",
       "      <td>[bradford, law, references, zipf, distribution...</td>\n",
       "      <td>[Progress in Documentation Empirical Hyperboli...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>18</td>\n",
       "      <td>17</td>\n",
       "      <td>18_evaluation_costs_cost_scale</td>\n",
       "      <td>[evaluation, costs, cost, scale, appraisal, sy...</td>\n",
       "      <td>[Standard Costing for Information Systems: Bac...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>19</td>\n",
       "      <td>16</td>\n",
       "      <td>19_centers_services_annual_systems</td>\n",
       "      <td>[centers, services, annual, systems, informati...</td>\n",
       "      <td>[Annual Review of Information Science and Tech...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>20</td>\n",
       "      <td>16</td>\n",
       "      <td>20_serials_isbd_international_entry</td>\n",
       "      <td>[serials, isbd, international, entry, rules, s...</td>\n",
       "      <td>[No Special Rules for Entry of Serials One of ...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>21</td>\n",
       "      <td>15</td>\n",
       "      <td>21_thesaurus_thesauri_construction_vocabulary</td>\n",
       "      <td>[thesaurus, thesauri, construction, vocabulary...</td>\n",
       "      <td>[Automatic Construction of Thesauri and of Con...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>22</td>\n",
       "      <td>15</td>\n",
       "      <td>22_microfiche_microforms_microform_microfilm</td>\n",
       "      <td>[microfiche, microforms, microform, microfilm,...</td>\n",
       "      <td>[The Microform Revolution Librarians have trie...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>23</td>\n",
       "      <td>14</td>\n",
       "      <td>23_medlars_medline_twx_medicus</td>\n",
       "      <td>[medlars, medline, twx, medicus, medicine, nlm...</td>\n",
       "      <td>[MEDLARS: A Summary Review and Evaluation of T...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>24</td>\n",
       "      <td>14</td>\n",
       "      <td>24_network_networks_cable_television</td>\n",
       "      <td>[network, networks, cable, television, implies...</td>\n",
       "      <td>[State of the Nation in Networking There is li...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>25</td>\n",
       "      <td>14</td>\n",
       "      <td>25_compression_length_coding_grams</td>\n",
       "      <td>[compression, length, coding, grams, character...</td>\n",
       "      <td>[An Information-Theoretic Approach to Text Sea...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>26</td>\n",
       "      <td>13</td>\n",
       "      <td>26_organizations_organizational_business_enter...</td>\n",
       "      <td>[organizations, organizational, business, ente...</td>\n",
       "      <td>[Principles of Operations Research with Applic...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>27</td>\n",
       "      <td>11</td>\n",
       "      <td>27_physics_viniti_journal_museum</td>\n",
       "      <td>[physics, viniti, journal, museum, abstract, m...</td>\n",
       "      <td>[Tests on Abstracts Journals The amount of sci...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>28</td>\n",
       "      <td>11</td>\n",
       "      <td>28_marc_records_pilot_cobol</td>\n",
       "      <td>[marc, records, pilot, cobol, ii, readable, re...</td>\n",
       "      <td>[The Marc II Format:                        A ...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Topic  Count                                               Name  \\\n",
       "0      -1    389                           -1_literature_on_with_an   \n",
       "1       0    259            0_libraries_library_university_academic   \n",
       "2       1     88               1_chemical_compounds_notation_search   \n",
       "3       2     82                 2_information_science_theory_needs   \n",
       "4       3     63                   3_automatic_indexing_index_terms   \n",
       "5       4     61              4_social_psychology_sociology_science   \n",
       "6       5     45              5_relevance_answer_relevant_retrieval   \n",
       "7       6     39                    6_bases_data_bibliographic_line   \n",
       "8       7     37                 7_citation_citations_papers_citing   \n",
       "9       8     32                 8_catalog_catalogs_card_cataloging   \n",
       "10      9     29         9_communication_informal_scientists_social   \n",
       "11     10     28              10_journals_coverage_journal_articles   \n",
       "12     11     26            11_language_linguistics_linguistic_text   \n",
       "13     12     25                12_medical_health_hospital_manpower   \n",
       "14     13     24               13_retrieval_user_interactive_system   \n",
       "15     14     21            14_classification_decimal_dewey_schemes   \n",
       "16     15     21   15_automation_telefacsimile_processing_automated   \n",
       "17     16     18                 16_fuzzy_sets_classification_hedge   \n",
       "18     17     17                    17_bradford_law_references_zipf   \n",
       "19     18     17                     18_evaluation_costs_cost_scale   \n",
       "20     19     16                 19_centers_services_annual_systems   \n",
       "21     20     16                20_serials_isbd_international_entry   \n",
       "22     21     15      21_thesaurus_thesauri_construction_vocabulary   \n",
       "23     22     15       22_microfiche_microforms_microform_microfilm   \n",
       "24     23     14                     23_medlars_medline_twx_medicus   \n",
       "25     24     14               24_network_networks_cable_television   \n",
       "26     25     14                 25_compression_length_coding_grams   \n",
       "27     26     13  26_organizations_organizational_business_enter...   \n",
       "28     27     11                   27_physics_viniti_journal_museum   \n",
       "29     28     11                        28_marc_records_pilot_cobol   \n",
       "\n",
       "                                       Representation  \\\n",
       "0   [literature, on, with, an, be, scientific, sub...   \n",
       "1   [libraries, library, university, academic, pub...   \n",
       "2   [chemical, compounds, notation, search, ca, ti...   \n",
       "3   [information, science, theory, needs, flow, in...   \n",
       "4   [automatic, indexing, index, terms, document, ...   \n",
       "5   [social, psychology, sociology, science, behav...   \n",
       "6   [relevance, answer, relevant, retrieval, docum...   \n",
       "7   [bases, data, bibliographic, line, readable, s...   \n",
       "8   [citation, citations, papers, citing, cross, s...   \n",
       "9   [catalog, catalogs, card, cataloging, divided,...   \n",
       "10  [communication, informal, scientists, social, ...   \n",
       "11  [journals, coverage, journal, articles, period...   \n",
       "12  [language, linguistics, linguistic, text, sema...   \n",
       "13  [medical, health, hospital, manpower, hospital...   \n",
       "14  [retrieval, user, interactive, system, systems...   \n",
       "15  [classification, decimal, dewey, schemes, udc,...   \n",
       "16  [automation, telefacsimile, processing, automa...   \n",
       "17  [fuzzy, sets, classification, hedge, membershi...   \n",
       "18  [bradford, law, references, zipf, distribution...   \n",
       "19  [evaluation, costs, cost, scale, appraisal, sy...   \n",
       "20  [centers, services, annual, systems, informati...   \n",
       "21  [serials, isbd, international, entry, rules, s...   \n",
       "22  [thesaurus, thesauri, construction, vocabulary...   \n",
       "23  [microfiche, microforms, microform, microfilm,...   \n",
       "24  [medlars, medline, twx, medicus, medicine, nlm...   \n",
       "25  [network, networks, cable, television, implies...   \n",
       "26  [compression, length, coding, grams, character...   \n",
       "27  [organizations, organizational, business, ente...   \n",
       "28  [physics, viniti, journal, museum, abstract, m...   \n",
       "29  [marc, records, pilot, cobol, ii, readable, re...   \n",
       "\n",
       "                                  Representative_Docs  \n",
       "0   [Library Optimum Sir,-In his recent article B....  \n",
       "1   [Cooperation Between Types of Libraries This b...  \n",
       "2   [Experiences of IIT Research Institute in Oper...  \n",
       "3   [Science and Information Theory A new scientif...  \n",
       "4   [What Makes An Automatic Keyword Classificatio...  \n",
       "5   [Is a Scientific Revolution Taking Place in Ps...  \n",
       "6   [On Relevance, Probabilistic Indexing and Info...  \n",
       "7   [Survey of Commercially Available Computer-Rea...  \n",
       "8   [Improvement of the Selectivity of Citation In...  \n",
       "9   [The Recording of Library of Congress Bibliogr...  \n",
       "10  [Research Studies in Patterns of Scientific Co...  \n",
       "11  [Citation Patterns fo the Cardiovascular Seria...  \n",
       "12  [Functional Approach The present book sums up ...  \n",
       "13  [Library Practice in Hospitals According to a ...  \n",
       "14  [Human Factors in the Design of an Interactive...  \n",
       "15  [Adopting the Library of Congress Classificati...  \n",
       "16  [Application of Computer Technology to Library...  \n",
       "17  [Prospects for a New General Classification In...  \n",
       "18  [Progress in Documentation Empirical Hyperboli...  \n",
       "19  [Standard Costing for Information Systems: Bac...  \n",
       "20  [Annual Review of Information Science and Tech...  \n",
       "21  [No Special Rules for Entry of Serials One of ...  \n",
       "22  [Automatic Construction of Thesauri and of Con...  \n",
       "23  [The Microform Revolution Librarians have trie...  \n",
       "24  [MEDLARS: A Summary Review and Evaluation of T...  \n",
       "25  [State of the Nation in Networking There is li...  \n",
       "26  [An Information-Theoretic Approach to Text Sea...  \n",
       "27  [Principles of Operations Research with Applic...  \n",
       "28  [Tests on Abstracts Journals The amount of sci...  \n",
       "29  [The Marc II Format:                        A ...  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "docs_for_analysis = docs[\"text\"]\n",
    "\n",
    "# topic_model = BERTopic(embedding_model=model_name, ctfidf_model=ClassTfidfTransformer(reduce_frequent_words=True), nr_topics=\"auto\", calculate_probabilities=True)\n",
    "# topic_model = BERTopic(embedding_model=model_name, ctfidf_model=ClassTfidfTransformer(reduce_frequent_words=True), calculate_probabilities=True)\n",
    "topic_model = BERTopic(embedding_model=model_name, ctfidf_model=ClassTfidfTransformer(reduce_frequent_words=True))\n",
    "topic_model.fit(docs_for_analysis)\n",
    "topic_info = topic_model.get_topic_info()\n",
    "topic_info\n",
    "\n",
    "# Topic \"-1\": When using HDBSCAN, DBSCAN, or OPTICS, a number of outlier documents might be created\n",
    "# that do not fall within any of the created topics. These are labeled as -1."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.plotly.v1+json": {
       "config": {
        "plotlyServerURL": "https://plot.ly"
       },
       "data": [
        {
         "coloraxis": "coloraxis",
         "hovertemplate": "x: %{x}<br>y: %{y}<br>Similarity Score: %{z}<extra></extra>",
         "name": "0",
         "type": "heatmap",
         "x": [
          "0_libraries_library_univers...",
          "1_chemical_compounds_notation",
          "2_information_science_theory",
          "3_automatic_indexing_index",
          "4_social_psychology_sociology",
          "5_relevance_answer_relevant",
          "6_bases_data_bibliographic",
          "7_citation_citations_papers",
          "8_catalog_catalogs_card",
          "9_communication_informal_sc...",
          "10_journals_coverage_journal",
          "11_language_linguistics_lin...",
          "12_medical_health_hospital",
          "13_retrieval_user_interactive",
          "14_classification_decimal_d...",
          "15_automation_telefacsimile...",
          "16_fuzzy_sets_classification",
          "17_bradford_law_references",
          "18_evaluation_costs_cost",
          "19_centers_services_annual",
          "20_serials_isbd_international",
          "21_thesaurus_thesauri_const...",
          "22_microfiche_microforms_mi...",
          "23_medlars_medline_twx",
          "24_network_networks_cable",
          "25_compression_length_coding",
          "26_organizations_organizati...",
          "27_physics_viniti_journal",
          "28_marc_records_pilot"
         ],
         "xaxis": "x",
         "y": [
          "0_libraries_library_univers...",
          "1_chemical_compounds_notation",
          "2_information_science_theory",
          "3_automatic_indexing_index",
          "4_social_psychology_sociology",
          "5_relevance_answer_relevant",
          "6_bases_data_bibliographic",
          "7_citation_citations_papers",
          "8_catalog_catalogs_card",
          "9_communication_informal_sc...",
          "10_journals_coverage_journal",
          "11_language_linguistics_lin...",
          "12_medical_health_hospital",
          "13_retrieval_user_interactive",
          "14_classification_decimal_d...",
          "15_automation_telefacsimile...",
          "16_fuzzy_sets_classification",
          "17_bradford_law_references",
          "18_evaluation_costs_cost",
          "19_centers_services_annual",
          "20_serials_isbd_international",
          "21_thesaurus_thesauri_const...",
          "22_microfiche_microforms_mi...",
          "23_medlars_medline_twx",
          "24_network_networks_cable",
          "25_compression_length_coding",
          "26_organizations_organizati...",
          "27_physics_viniti_journal",
          "28_marc_records_pilot"
         ],
         "yaxis": "y",
         "z": [
          [
           1,
           0.32666999101638794,
           0.4869450628757477,
           0.3665448725223541,
           0.42433327436447144,
           0.44375643134117126,
           0.6907793283462524,
           0.5039362907409668,
           0.7190819382667542,
           0.407442182302475,
           0.5825252532958984,
           0.264842689037323,
           0.780087947845459,
           0.5123202204704285,
           0.6962786912918091,
           0.7724934220314026,
           0.16009075939655304,
           0.5454391837120056,
           0.46579509973526,
           0.6647471189498901,
           0.4859533905982971,
           0.3213660418987274,
           0.5801035761833191,
           0.4600299596786499,
           0.6126845479011536,
           0.31949400901794434,
           0.3454984128475189,
           0.5179004669189453,
           0.601757824420929
          ],
          [
           0.32666999101638794,
           1.0000001192092896,
           0.4808499813079834,
           0.6821379661560059,
           0.14306548237800598,
           0.6096744537353516,
           0.6788442134857178,
           0.5145554542541504,
           0.5480311512947083,
           0.2988084554672241,
           0.4969031810760498,
           0.4109286963939667,
           0.3315742015838623,
           0.6151208281517029,
           0.5268439650535583,
           0.44448450207710266,
           0.4459976553916931,
           0.3640647530555725,
           0.4059246778488159,
           0.48379915952682495,
           0.4948916733264923,
           0.5384268164634705,
           0.4405169188976288,
           0.5732780694961548,
           0.38101643323898315,
           0.6500089764595032,
           0.12779511511325836,
           0.5266450643539429,
           0.5768140554428101
          ],
          [
           0.4869450628757477,
           0.4808499813079834,
           0.9999997615814209,
           0.4709702134132385,
           0.5332375168800354,
           0.5937291383743286,
           0.6257171034812927,
           0.5465813279151917,
           0.4676480293273926,
           0.7655487656593323,
           0.4530123472213745,
           0.5153947472572327,
           0.37513208389282227,
           0.6438735127449036,
           0.493108868598938,
           0.5101791620254517,
           0.464409738779068,
           0.47803547978401184,
           0.7094599604606628,
           0.7604990601539612,
           0.3964885473251343,
           0.47464171051979065,
           0.4089500904083252,
           0.4371412694454193,
           0.5600941777229309,
           0.4011305868625641,
           0.4173075258731842,
           0.6383822560310364,
           0.4191518723964691
          ],
          [
           0.3665448725223541,
           0.6821379661560059,
           0.4709702134132385,
           1.0000003576278687,
           0.16050265729427338,
           0.8013572692871094,
           0.6394741535186768,
           0.5953236222267151,
           0.5366408824920654,
           0.2632567882537842,
           0.47150325775146484,
           0.5477594137191772,
           0.30301353335380554,
           0.7237895131111145,
           0.6303850412368774,
           0.4487031400203705,
           0.5259124040603638,
           0.4426112473011017,
           0.43282249569892883,
           0.48391374945640564,
           0.48176899552345276,
           0.7214059829711914,
           0.35228481888771057,
           0.5441791415214539,
           0.3156748116016388,
           0.703843355178833,
           0.12561683356761932,
           0.4334876239299774,
           0.5132316946983337
          ],
          [
           0.42433327436447144,
           0.14306548237800598,
           0.5332375168800354,
           0.16050265729427338,
           1.0000004768371582,
           0.21987202763557434,
           0.2843267023563385,
           0.5127263069152832,
           0.2774016261100769,
           0.7173872590065002,
           0.40031445026397705,
           0.32431235909461975,
           0.28359782695770264,
           0.18127897381782532,
           0.3380293846130371,
           0.26238080859184265,
           0.29123449325561523,
           0.40741634368896484,
           0.21149218082427979,
           0.28673067688941956,
           0.19751210510730743,
           0.22732007503509521,
           0.2043216973543167,
           0.2374611645936966,
           0.2846197783946991,
           0.011603796854615211,
           0.5323345065116882,
           0.512387752532959,
           0.2014160454273224
          ],
          [
           0.44375643134117126,
           0.6096744537353516,
           0.5937291383743286,
           0.8013572692871094,
           0.21987202763557434,
           1.000000238418579,
           0.6509302258491516,
           0.5537909865379333,
           0.5332594513893127,
           0.3273804187774658,
           0.4686620533466339,
           0.4943982660770416,
           0.3252916932106018,
           0.8035279512405396,
           0.5849902033805847,
           0.4314064383506775,
           0.5023263096809387,
           0.4709468483924866,
           0.5072644352912903,
           0.5030626654624939,
           0.4467049539089203,
           0.5982650518417358,
           0.3566688597202301,
           0.5393038392066956,
           0.3207283914089203,
           0.5765545964241028,
           0.15856945514678955,
           0.4680105745792389,
           0.4734441041946411
          ],
          [
           0.6907793283462524,
           0.6788442134857178,
           0.6257171034812927,
           0.6394741535186768,
           0.2843267023563385,
           0.6509302258491516,
           1.000000238418579,
           0.6573249101638794,
           0.715074896812439,
           0.45878469944000244,
           0.6006381511688232,
           0.3481522500514984,
           0.5825737118721008,
           0.7843406796455383,
           0.6356508135795593,
           0.7284486293792725,
           0.30154332518577576,
           0.5315589308738708,
           0.6312822103500366,
           0.7910773754119873,
           0.5966969728469849,
           0.5047165751457214,
           0.6133990287780762,
           0.665797233581543,
           0.6172369122505188,
           0.6361223459243774,
           0.2504993677139282,
           0.6073734760284424,
           0.7702684998512268
          ],
          [
           0.5039362907409668,
           0.5145554542541504,
           0.5465813279151917,
           0.5953236222267151,
           0.5127263069152832,
           0.5537909865379333,
           0.6573249101638794,
           0.9999998211860657,
           0.480895459651947,
           0.5663712620735168,
           0.7620363831520081,
           0.3513656258583069,
           0.445541650056839,
           0.41896718740463257,
           0.5344904065132141,
           0.38951680064201355,
           0.3248389959335327,
           0.6870846748352051,
           0.3506940007209778,
           0.4700528681278229,
           0.44369715452194214,
           0.4061499834060669,
           0.43878209590911865,
           0.5301366448402405,
           0.4503916800022125,
           0.3917107880115509,
           0.19470623135566711,
           0.7455843091011047,
           0.4982333481311798
          ],
          [
           0.7190819382667542,
           0.5480311512947083,
           0.4676480293273926,
           0.5366408824920654,
           0.2774016261100769,
           0.5332594513893127,
           0.715074896812439,
           0.480895459651947,
           0.9999997615814209,
           0.3056805729866028,
           0.556000292301178,
           0.31986236572265625,
           0.5661015510559082,
           0.5893541574478149,
           0.7665104269981384,
           0.6807854771614075,
           0.34138283133506775,
           0.5204916596412659,
           0.45162075757980347,
           0.5986390709877014,
           0.6982650756835938,
           0.49238479137420654,
           0.6185477375984192,
           0.506739616394043,
           0.47557705640792847,
           0.4793750047683716,
           0.2431187480688095,
           0.5164980888366699,
           0.7207087874412537
          ],
          [
           0.407442182302475,
           0.2988084554672241,
           0.7655487656593323,
           0.2632567882537842,
           0.7173872590065002,
           0.3273804187774658,
           0.45878469944000244,
           0.5663712620735168,
           0.3056805729866028,
           0.9999999403953552,
           0.47826912999153137,
           0.38302528858184814,
           0.33218809962272644,
           0.3390390872955322,
           0.33111196756362915,
           0.3417498469352722,
           0.2701106369495392,
           0.44717055559158325,
           0.4107925593852997,
           0.5349986553192139,
           0.2829767167568207,
           0.2873861491680145,
           0.3471759557723999,
           0.384666383266449,
           0.5435906052589417,
           0.17419765889644623,
           0.36971431970596313,
           0.6634758710861206,
           0.3188733756542206
          ],
          [
           0.5825252532958984,
           0.4969031810760498,
           0.4530123472213745,
           0.47150325775146484,
           0.40031445026397705,
           0.4686620533466339,
           0.6006381511688232,
           0.7620363831520081,
           0.556000292301178,
           0.47826912999153137,
           0.999999463558197,
           0.261245995759964,
           0.7068846225738525,
           0.3554992973804474,
           0.567395806312561,
           0.3825688064098358,
           0.1829172968864441,
           0.6380084753036499,
           0.3099691867828369,
           0.44534608721733093,
           0.5074808597564697,
           0.32283860445022583,
           0.5465129017829895,
           0.664476215839386,
           0.42472654581069946,
           0.3304610848426819,
           0.15248964726924896,
           0.7856336832046509,
           0.4799654483795166
          ],
          [
           0.264842689037323,
           0.4109286963939667,
           0.5153947472572327,
           0.5477594137191772,
           0.32431235909461975,
           0.4943982660770416,
           0.3481522500514984,
           0.3513656258583069,
           0.31986236572265625,
           0.38302528858184814,
           0.261245995759964,
           0.9999998211860657,
           0.20305554568767548,
           0.42737817764282227,
           0.44585955142974854,
           0.34356924891471863,
           0.5757694244384766,
           0.3067765533924103,
           0.3044542074203491,
           0.3787672519683838,
           0.32560330629348755,
           0.6716551780700684,
           0.1873178631067276,
           0.2778730094432831,
           0.25928065180778503,
           0.447827011346817,
           0.2012946903705597,
           0.3675667345523834,
           0.3426460921764374
          ],
          [
           0.780087947845459,
           0.3315742015838623,
           0.37513208389282227,
           0.30301353335380554,
           0.28359782695770264,
           0.3252916932106018,
           0.5825737118721008,
           0.445541650056839,
           0.5661015510559082,
           0.33218809962272644,
           0.7068846225738525,
           0.20305554568767548,
           1.0000005960464478,
           0.36803537607192993,
           0.5935381054878235,
           0.5900580883026123,
           0.11693933606147766,
           0.4114462435245514,
           0.31961187720298767,
           0.5149164795875549,
           0.3992270529270172,
           0.24458743631839752,
           0.5133451819419861,
           0.6396361589431763,
           0.5499785542488098,
           0.257185161113739,
           0.19611456990242004,
           0.48193642497062683,
           0.47983744740486145
          ],
          [
           0.5123202204704285,
           0.6151208281517029,
           0.6438735127449036,
           0.7237895131111145,
           0.18127897381782532,
           0.8035279512405396,
           0.7843406796455383,
           0.41896718740463257,
           0.5893541574478149,
           0.3390390872955322,
           0.3554992973804474,
           0.42737817764282227,
           0.36803537607192993,
           0.9999997019767761,
           0.5425456166267395,
           0.6553784012794495,
           0.3970632553100586,
           0.35048922896385193,
           0.6896361112594604,
           0.7129610180854797,
           0.4161604642868042,
           0.5729182958602905,
           0.44342342019081116,
           0.5488120913505554,
           0.4745330810546875,
           0.6112532615661621,
           0.2326623797416687,
           0.43351513147354126,
           0.5690170526504517
          ],
          [
           0.6962786912918091,
           0.5268439650535583,
           0.493108868598938,
           0.6303850412368774,
           0.3380293846130371,
           0.5849902033805847,
           0.6356508135795593,
           0.5344904065132141,
           0.7665104269981384,
           0.33111196756362915,
           0.567395806312561,
           0.44585955142974854,
           0.5935381054878235,
           0.5425456166267395,
           1,
           0.5972938537597656,
           0.5475121140480042,
           0.5430302619934082,
           0.3837525248527527,
           0.5752511620521545,
           0.6597582101821899,
           0.5781320929527283,
           0.5277068018913269,
           0.48944762349128723,
           0.46849411725997925,
           0.4965769052505493,
           0.22755120694637299,
           0.5174821615219116,
           0.6348517537117004
          ],
          [
           0.7724934220314026,
           0.44448450207710266,
           0.5101791620254517,
           0.4487031400203705,
           0.26238080859184265,
           0.4314064383506775,
           0.7284486293792725,
           0.38951680064201355,
           0.6807854771614075,
           0.3417498469352722,
           0.3825688064098358,
           0.34356924891471863,
           0.5900580883026123,
           0.6553784012794495,
           0.5972938537597656,
           0.9999995827674866,
           0.22452981770038605,
           0.38402894139289856,
           0.57470703125,
           0.7481255531311035,
           0.49575918912887573,
           0.3710801899433136,
           0.5661441683769226,
           0.479623019695282,
           0.6172865033149719,
           0.44173964858055115,
           0.2895088493824005,
           0.45847445726394653,
           0.701738715171814
          ],
          [
           0.16009075939655304,
           0.4459976553916931,
           0.464409738779068,
           0.5259124040603638,
           0.29123449325561523,
           0.5023263096809387,
           0.30154332518577576,
           0.3248389959335327,
           0.34138283133506775,
           0.2701106369495392,
           0.1829172968864441,
           0.5757694244384766,
           0.11693933606147766,
           0.3970632553100586,
           0.5475121140480042,
           0.22452981770038605,
           0.9999996423721313,
           0.2756603956222534,
           0.2739267647266388,
           0.301395982503891,
           0.3095504343509674,
           0.5979945063591003,
           0.0945306196808815,
           0.19346128404140472,
           0.25156038999557495,
           0.40975475311279297,
           0.27178776264190674,
           0.24501389265060425,
           0.2734578847885132
          ],
          [
           0.5454391837120056,
           0.3640647530555725,
           0.47803547978401184,
           0.4426112473011017,
           0.40741634368896484,
           0.4709468483924866,
           0.5315589308738708,
           0.6870846748352051,
           0.5204916596412659,
           0.44717055559158325,
           0.6380084753036499,
           0.3067765533924103,
           0.4114462435245514,
           0.35048922896385193,
           0.5430302619934082,
           0.38402894139289856,
           0.2756603956222534,
           1.000000238418579,
           0.2906114161014557,
           0.41968342661857605,
           0.46200236678123474,
           0.3352690041065216,
           0.42180103063583374,
           0.33992546796798706,
           0.38590604066848755,
           0.3715161085128784,
           0.19526897370815277,
           0.640178918838501,
           0.43629124760627747
          ],
          [
           0.46579509973526,
           0.4059246778488159,
           0.7094599604606628,
           0.43282249569892883,
           0.21149218082427979,
           0.5072644352912903,
           0.6312822103500366,
           0.3506940007209778,
           0.45162075757980347,
           0.4107925593852997,
           0.3099691867828369,
           0.3044542074203491,
           0.31961187720298767,
           0.6896361112594604,
           0.3837525248527527,
           0.57470703125,
           0.2739267647266388,
           0.2906114161014557,
           0.9999998211860657,
           0.7593415975570679,
           0.3617699146270752,
           0.4159215986728668,
           0.3857450783252716,
           0.40776076912879944,
           0.48156213760375977,
           0.38406315445899963,
           0.4507569968700409,
           0.39460843801498413,
           0.4332655072212219
          ],
          [
           0.6647471189498901,
           0.48379915952682495,
           0.7604990601539612,
           0.48391374945640564,
           0.28673067688941956,
           0.5030626654624939,
           0.7910773754119873,
           0.4700528681278229,
           0.5986390709877014,
           0.5349986553192139,
           0.44534608721733093,
           0.3787672519683838,
           0.5149164795875549,
           0.7129610180854797,
           0.5752511620521545,
           0.7481255531311035,
           0.301395982503891,
           0.41968342661857605,
           0.7593415975570679,
           1.000000238418579,
           0.5102816224098206,
           0.481174111366272,
           0.5973252654075623,
           0.5053600072860718,
           0.7182367444038391,
           0.4815911650657654,
           0.3770318329334259,
           0.5549424290657043,
           0.6067115664482117
          ],
          [
           0.4859533905982971,
           0.4948916733264923,
           0.3964885473251343,
           0.48176899552345276,
           0.19751210510730743,
           0.4467049539089203,
           0.5966969728469849,
           0.44369715452194214,
           0.6982650756835938,
           0.2829767167568207,
           0.5074808597564697,
           0.32560330629348755,
           0.3992270529270172,
           0.4161604642868042,
           0.6597582101821899,
           0.49575918912887573,
           0.3095504343509674,
           0.46200236678123474,
           0.3617699146270752,
           0.5102816224098206,
           0.9999997615814209,
           0.4424283802509308,
           0.5172606706619263,
           0.4614444077014923,
           0.38016098737716675,
           0.5066508650779724,
           0.24105387926101685,
           0.46022748947143555,
           0.6836757659912109
          ],
          [
           0.3213660418987274,
           0.5384268164634705,
           0.47464171051979065,
           0.7214059829711914,
           0.22732007503509521,
           0.5982650518417358,
           0.5047165751457214,
           0.4061499834060669,
           0.49238479137420654,
           0.2873861491680145,
           0.32283860445022583,
           0.6716551780700684,
           0.24458743631839752,
           0.5729182958602905,
           0.5781320929527283,
           0.3710801899433136,
           0.5979945063591003,
           0.3352690041065216,
           0.4159215986728668,
           0.481174111366272,
           0.4424283802509308,
           0.9999996423721313,
           0.28842973709106445,
           0.4072701036930084,
           0.2924222946166992,
           0.5321410298347473,
           0.23966963589191437,
           0.3374651074409485,
           0.42194244265556335
          ],
          [
           0.5801035761833191,
           0.4405169188976288,
           0.4089500904083252,
           0.35228481888771057,
           0.2043216973543167,
           0.3566688597202301,
           0.6133990287780762,
           0.43878209590911865,
           0.6185477375984192,
           0.3471759557723999,
           0.5465129017829895,
           0.1873178631067276,
           0.5133451819419861,
           0.44342342019081116,
           0.5277068018913269,
           0.5661441683769226,
           0.0945306196808815,
           0.42180103063583374,
           0.3857450783252716,
           0.5973252654075623,
           0.5172606706619263,
           0.28842973709106445,
           0.9999999403953552,
           0.5002884268760681,
           0.4474589228630066,
           0.410129576921463,
           0.14490985870361328,
           0.5587202906608582,
           0.5919551253318787
          ],
          [
           0.4600299596786499,
           0.5732780694961548,
           0.4371412694454193,
           0.5441791415214539,
           0.2374611645936966,
           0.5393038392066956,
           0.665797233581543,
           0.5301366448402405,
           0.506739616394043,
           0.384666383266449,
           0.664476215839386,
           0.2778730094432831,
           0.6396361589431763,
           0.5488120913505554,
           0.48944762349128723,
           0.479623019695282,
           0.19346128404140472,
           0.33992546796798706,
           0.40776076912879944,
           0.5053600072860718,
           0.4614444077014923,
           0.4072701036930084,
           0.5002884268760681,
           1.0000001192092896,
           0.4493337869644165,
           0.390693336725235,
           0.14043812453746796,
           0.5104014277458191,
           0.5311428904533386
          ],
          [
           0.6126845479011536,
           0.38101643323898315,
           0.5600941777229309,
           0.3156748116016388,
           0.2846197783946991,
           0.3207283914089203,
           0.6172369122505188,
           0.4503916800022125,
           0.47557705640792847,
           0.5435906052589417,
           0.42472654581069946,
           0.25928065180778503,
           0.5499785542488098,
           0.4745330810546875,
           0.46849411725997925,
           0.6172865033149719,
           0.25156038999557495,
           0.38590604066848755,
           0.48156213760375977,
           0.7182367444038391,
           0.38016098737716675,
           0.2924222946166992,
           0.4474589228630066,
           0.4493337869644165,
           0.9999995231628418,
           0.3441801369190216,
           0.2865138053894043,
           0.48598143458366394,
           0.522725522518158
          ],
          [
           0.31949400901794434,
           0.6500089764595032,
           0.4011305868625641,
           0.703843355178833,
           0.011603796854615211,
           0.5765545964241028,
           0.6361223459243774,
           0.3917107880115509,
           0.4793750047683716,
           0.17419765889644623,
           0.3304610848426819,
           0.447827011346817,
           0.257185161113739,
           0.6112532615661621,
           0.4965769052505493,
           0.44173964858055115,
           0.40975475311279297,
           0.3715161085128784,
           0.38406315445899963,
           0.4815911650657654,
           0.5066508650779724,
           0.5321410298347473,
           0.410129576921463,
           0.390693336725235,
           0.3441801369190216,
           0.9999998807907104,
           0.042668648064136505,
           0.3205097019672394,
           0.5997856259346008
          ],
          [
           0.3454984128475189,
           0.12779511511325836,
           0.4173075258731842,
           0.12561683356761932,
           0.5323345065116882,
           0.15856945514678955,
           0.2504993677139282,
           0.19470623135566711,
           0.2431187480688095,
           0.36971431970596313,
           0.15248964726924896,
           0.2012946903705597,
           0.19611456990242004,
           0.2326623797416687,
           0.22755120694637299,
           0.2895088493824005,
           0.27178776264190674,
           0.19526897370815277,
           0.4507569968700409,
           0.3770318329334259,
           0.24105387926101685,
           0.23966963589191437,
           0.14490985870361328,
           0.14043812453746796,
           0.2865138053894043,
           0.042668648064136505,
           0.9999999403953552,
           0.2140374481678009,
           0.19057883322238922
          ],
          [
           0.5179004669189453,
           0.5266450643539429,
           0.6383822560310364,
           0.4334876239299774,
           0.512387752532959,
           0.4680105745792389,
           0.6073734760284424,
           0.7455843091011047,
           0.5164980888366699,
           0.6634758710861206,
           0.7856336832046509,
           0.3675667345523834,
           0.48193642497062683,
           0.43351513147354126,
           0.5174821615219116,
           0.45847445726394653,
           0.24501389265060425,
           0.640178918838501,
           0.39460843801498413,
           0.5549424290657043,
           0.46022748947143555,
           0.3374651074409485,
           0.5587202906608582,
           0.5104014277458191,
           0.48598143458366394,
           0.3205097019672394,
           0.2140374481678009,
           0.9999998211860657,
           0.5146251916885376
          ],
          [
           0.601757824420929,
           0.5768140554428101,
           0.4191518723964691,
           0.5132316946983337,
           0.2014160454273224,
           0.4734441041946411,
           0.7702684998512268,
           0.4982333481311798,
           0.7207087874412537,
           0.3188733756542206,
           0.4799654483795166,
           0.3426460921764374,
           0.47983744740486145,
           0.5690170526504517,
           0.6348517537117004,
           0.701738715171814,
           0.2734578847885132,
           0.43629124760627747,
           0.4332655072212219,
           0.6067115664482117,
           0.6836757659912109,
           0.42194244265556335,
           0.5919551253318787,
           0.5311428904533386,
           0.522725522518158,
           0.5997856259346008,
           0.19057883322238922,
           0.5146251916885376,
           1.0000003576278687
          ]
         ]
        }
       ],
       "layout": {
        "coloraxis": {
         "colorbar": {
          "title": {
           "text": "Similarity Score"
          }
         },
         "colorscale": [
          [
           0,
           "rgb(247,252,240)"
          ],
          [
           0.125,
           "rgb(224,243,219)"
          ],
          [
           0.25,
           "rgb(204,235,197)"
          ],
          [
           0.375,
           "rgb(168,221,181)"
          ],
          [
           0.5,
           "rgb(123,204,196)"
          ],
          [
           0.625,
           "rgb(78,179,211)"
          ],
          [
           0.75,
           "rgb(43,140,190)"
          ],
          [
           0.875,
           "rgb(8,104,172)"
          ],
          [
           1,
           "rgb(8,64,129)"
          ]
         ]
        },
        "height": 800,
        "hoverlabel": {
         "bgcolor": "white",
         "font": {
          "family": "Rockwell",
          "size": 16
         }
        },
        "legend": {
         "title": {
          "text": "Trend"
         }
        },
        "margin": {
         "t": 60
        },
        "showlegend": true,
        "template": {
         "data": {
          "bar": [
           {
            "error_x": {
             "color": "#2a3f5f"
            },
            "error_y": {
             "color": "#2a3f5f"
            },
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             },
             "pattern": {
              "fillmode": "overlay",
              "size": 10,
              "solidity": 0.2
             }
            },
            "type": "bar"
           }
          ],
          "barpolar": [
           {
            "marker": {
             "line": {
              "color": "#E5ECF6",
              "width": 0.5
             },
             "pattern": {
              "fillmode": "overlay",
              "size": 10,
              "solidity": 0.2
             }
            },
            "type": "barpolar"
           }
          ],
          "carpet": [
           {
            "aaxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "baxis": {
             "endlinecolor": "#2a3f5f",
             "gridcolor": "white",
             "linecolor": "white",
             "minorgridcolor": "white",
             "startlinecolor": "#2a3f5f"
            },
            "type": "carpet"
           }
          ],
          "choropleth": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "choropleth"
           }
          ],
          "contour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "contour"
           }
          ],
          "contourcarpet": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "contourcarpet"
           }
          ],
          "heatmap": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmap"
           }
          ],
          "heatmapgl": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "heatmapgl"
           }
          ],
          "histogram": [
           {
            "marker": {
             "pattern": {
              "fillmode": "overlay",
              "size": 10,
              "solidity": 0.2
             }
            },
            "type": "histogram"
           }
          ],
          "histogram2d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2d"
           }
          ],
          "histogram2dcontour": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "histogram2dcontour"
           }
          ],
          "mesh3d": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "type": "mesh3d"
           }
          ],
          "parcoords": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "parcoords"
           }
          ],
          "pie": [
           {
            "automargin": true,
            "type": "pie"
           }
          ],
          "scatter": [
           {
            "fillpattern": {
             "fillmode": "overlay",
             "size": 10,
             "solidity": 0.2
            },
            "type": "scatter"
           }
          ],
          "scatter3d": [
           {
            "line": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatter3d"
           }
          ],
          "scattercarpet": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattercarpet"
           }
          ],
          "scattergeo": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergeo"
           }
          ],
          "scattergl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattergl"
           }
          ],
          "scattermapbox": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scattermapbox"
           }
          ],
          "scatterpolar": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolar"
           }
          ],
          "scatterpolargl": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterpolargl"
           }
          ],
          "scatterternary": [
           {
            "marker": {
             "colorbar": {
              "outlinewidth": 0,
              "ticks": ""
             }
            },
            "type": "scatterternary"
           }
          ],
          "surface": [
           {
            "colorbar": {
             "outlinewidth": 0,
             "ticks": ""
            },
            "colorscale": [
             [
              0,
              "#0d0887"
             ],
             [
              0.1111111111111111,
              "#46039f"
             ],
             [
              0.2222222222222222,
              "#7201a8"
             ],
             [
              0.3333333333333333,
              "#9c179e"
             ],
             [
              0.4444444444444444,
              "#bd3786"
             ],
             [
              0.5555555555555556,
              "#d8576b"
             ],
             [
              0.6666666666666666,
              "#ed7953"
             ],
             [
              0.7777777777777778,
              "#fb9f3a"
             ],
             [
              0.8888888888888888,
              "#fdca26"
             ],
             [
              1,
              "#f0f921"
             ]
            ],
            "type": "surface"
           }
          ],
          "table": [
           {
            "cells": {
             "fill": {
              "color": "#EBF0F8"
             },
             "line": {
              "color": "white"
             }
            },
            "header": {
             "fill": {
              "color": "#C8D4E3"
             },
             "line": {
              "color": "white"
             }
            },
            "type": "table"
           }
          ]
         },
         "layout": {
          "annotationdefaults": {
           "arrowcolor": "#2a3f5f",
           "arrowhead": 0,
           "arrowwidth": 1
          },
          "autotypenumbers": "strict",
          "coloraxis": {
           "colorbar": {
            "outlinewidth": 0,
            "ticks": ""
           }
          },
          "colorscale": {
           "diverging": [
            [
             0,
             "#8e0152"
            ],
            [
             0.1,
             "#c51b7d"
            ],
            [
             0.2,
             "#de77ae"
            ],
            [
             0.3,
             "#f1b6da"
            ],
            [
             0.4,
             "#fde0ef"
            ],
            [
             0.5,
             "#f7f7f7"
            ],
            [
             0.6,
             "#e6f5d0"
            ],
            [
             0.7,
             "#b8e186"
            ],
            [
             0.8,
             "#7fbc41"
            ],
            [
             0.9,
             "#4d9221"
            ],
            [
             1,
             "#276419"
            ]
           ],
           "sequential": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ],
           "sequentialminus": [
            [
             0,
             "#0d0887"
            ],
            [
             0.1111111111111111,
             "#46039f"
            ],
            [
             0.2222222222222222,
             "#7201a8"
            ],
            [
             0.3333333333333333,
             "#9c179e"
            ],
            [
             0.4444444444444444,
             "#bd3786"
            ],
            [
             0.5555555555555556,
             "#d8576b"
            ],
            [
             0.6666666666666666,
             "#ed7953"
            ],
            [
             0.7777777777777778,
             "#fb9f3a"
            ],
            [
             0.8888888888888888,
             "#fdca26"
            ],
            [
             1,
             "#f0f921"
            ]
           ]
          },
          "colorway": [
           "#636efa",
           "#EF553B",
           "#00cc96",
           "#ab63fa",
           "#FFA15A",
           "#19d3f3",
           "#FF6692",
           "#B6E880",
           "#FF97FF",
           "#FECB52"
          ],
          "font": {
           "color": "#2a3f5f"
          },
          "geo": {
           "bgcolor": "white",
           "lakecolor": "white",
           "landcolor": "#E5ECF6",
           "showlakes": true,
           "showland": true,
           "subunitcolor": "white"
          },
          "hoverlabel": {
           "align": "left"
          },
          "hovermode": "closest",
          "mapbox": {
           "style": "light"
          },
          "paper_bgcolor": "white",
          "plot_bgcolor": "#E5ECF6",
          "polar": {
           "angularaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "radialaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "scene": {
           "xaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "yaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           },
           "zaxis": {
            "backgroundcolor": "#E5ECF6",
            "gridcolor": "white",
            "gridwidth": 2,
            "linecolor": "white",
            "showbackground": true,
            "ticks": "",
            "zerolinecolor": "white"
           }
          },
          "shapedefaults": {
           "line": {
            "color": "#2a3f5f"
           }
          },
          "ternary": {
           "aaxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "baxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           },
           "bgcolor": "#E5ECF6",
           "caxis": {
            "gridcolor": "white",
            "linecolor": "white",
            "ticks": ""
           }
          },
          "title": {
           "x": 0.05
          },
          "xaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          },
          "yaxis": {
           "automargin": true,
           "gridcolor": "white",
           "linecolor": "white",
           "ticks": "",
           "title": {
            "standoff": 15
           },
           "zerolinecolor": "white",
           "zerolinewidth": 2
          }
         }
        },
        "title": {
         "font": {
          "color": "Black",
          "size": 22
         },
         "text": "<b>Similarity Matrix</b>",
         "x": 0.55,
         "xanchor": "center",
         "y": 0.95,
         "yanchor": "top"
        },
        "width": 800,
        "xaxis": {
         "anchor": "y",
         "constrain": "domain",
         "domain": [
          0,
          1
         ],
         "scaleanchor": "y"
        },
        "yaxis": {
         "anchor": "x",
         "autorange": "reversed",
         "constrain": "domain",
         "domain": [
          0,
          1
         ]
        }
       }
      }
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "topic_model.visualize_heatmap()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "What problems and concerns are there in making up descriptive titles? What difficulties are involved in automatically retrieving articles from approximate titles? What is the usual relevance of the content of articles to their titles?\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([-1], array([0.]))"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# returns: Topic predictions for each documents probabilities: The topic probability distribution \n",
    "# which is returned by default. If calculate_probabilities in BERTopic is set to False, then the \n",
    "# probabilities are not calculated to speed up computation and decrease memory usage.\n",
    "print(queries.iloc[0][\"text\"])\n",
    "topic_model.transform(queries.iloc[0][\"text\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([-1,\n",
       "  6,\n",
       "  2,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  23,\n",
       "  6,\n",
       "  13,\n",
       "  -1,\n",
       "  1,\n",
       "  -1,\n",
       "  -1,\n",
       "  2,\n",
       "  -1,\n",
       "  15,\n",
       "  2,\n",
       "  19,\n",
       "  18,\n",
       "  3,\n",
       "  1,\n",
       "  -1,\n",
       "  -1,\n",
       "  2,\n",
       "  -1,\n",
       "  13,\n",
       "  -1,\n",
       "  19,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  13,\n",
       "  -1,\n",
       "  -1,\n",
       "  13,\n",
       "  13,\n",
       "  -1,\n",
       "  15,\n",
       "  15,\n",
       "  -1,\n",
       "  13,\n",
       "  13,\n",
       "  -1,\n",
       "  -1,\n",
       "  23,\n",
       "  23,\n",
       "  15,\n",
       "  23,\n",
       "  -1,\n",
       "  -1,\n",
       "  24,\n",
       "  5,\n",
       "  5,\n",
       "  5,\n",
       "  -1,\n",
       "  13,\n",
       "  2,\n",
       "  -1,\n",
       "  24,\n",
       "  -1,\n",
       "  -1,\n",
       "  21,\n",
       "  18,\n",
       "  -1,\n",
       "  5,\n",
       "  25,\n",
       "  24,\n",
       "  11,\n",
       "  -1,\n",
       "  -1,\n",
       "  11,\n",
       "  25,\n",
       "  17,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  5,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  0,\n",
       "  -1,\n",
       "  7,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  5,\n",
       "  5,\n",
       "  5,\n",
       "  13,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  3,\n",
       "  -1,\n",
       "  -1,\n",
       "  3,\n",
       "  -1,\n",
       "  3,\n",
       "  6,\n",
       "  -1,\n",
       "  -1,\n",
       "  -1,\n",
       "  3],\n",
       " array([0.        , 0.99014559, 1.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.        , 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.70978273, 1.        ,\n",
       "        1.        , 0.        , 0.50214361, 0.        , 0.        ,\n",
       "        0.89330545, 0.        , 0.75838699, 0.88150771, 0.89719769,\n",
       "        0.98151705, 0.8019127 , 0.39128054, 0.        , 0.        ,\n",
       "        0.83138753, 0.        , 1.        , 0.        , 0.89556598,\n",
       "        0.        , 0.        , 0.        , 0.97160578, 0.        ,\n",
       "        0.        , 1.        , 0.8553521 , 0.        , 1.        ,\n",
       "        0.93709397, 0.        , 0.96472697, 1.        , 0.        ,\n",
       "        0.        , 0.54859745, 0.32511822, 0.85615953, 0.92204904,\n",
       "        0.        , 0.        , 0.86990035, 0.50261834, 0.77983412,\n",
       "        0.77491146, 0.        , 0.9493261 , 1.        , 0.        ,\n",
       "        0.9821218 , 0.        , 0.        , 0.78804419, 0.44879896,\n",
       "        0.        , 0.69746855, 0.90628964, 0.57861926, 0.80843619,\n",
       "        0.        , 0.        , 0.82284085, 0.91885856, 0.96898165,\n",
       "        0.        , 0.        , 0.        , 0.58760933, 0.        ,\n",
       "        0.        , 0.        , 0.        , 0.73926762, 0.        ,\n",
       "        0.83435261, 0.        , 0.        , 0.        , 0.66787187,\n",
       "        0.7418057 , 0.77786368, 0.90647409, 0.        , 0.        ,\n",
       "        0.        , 0.81630941, 0.        , 0.        , 0.90813486,\n",
       "        0.        , 0.75429479, 0.86396501, 0.        , 0.        ,\n",
       "        0.        , 0.74939692]))"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_query_topics = topic_model.transform(queries[\"text\"])\n",
    "all_query_topics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "([-1, 20, 5, 3, 14],\n",
       " [0.42508858, 0.40581542, 0.40525758, 0.39575997, 0.39218175])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "topic_model.find_topics(queries.iloc[0][\"text\"], top_n=5)\n",
    "# topics, similarity = topic_model.find_topics(queries.iloc[0][\"text\"], top_n=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Query Topics: {1: -1, 2: 6, 3: 2, 4: 25, 5: 13, 6: 11, 7: -1, 8: 3, 9: 3, 10: 5, 11: -1, 12: 27, 13: 5, 14: 23, 15: 6, 16: 13, 17: 13, 18: 1, 19: 25, 20: 18, 21: 2, 22: 23, 23: 15, 24: 2, 25: 19, 26: 18, 27: 3, 28: 1, 29: 3, 30: 27, 31: 2, 32: 3, 33: 13, 34: 25, 35: 19, 36: 11, 37: 3, 38: 3, 39: 13, 40: 11, 41: 3, 42: 13, 43: 13, 44: 27, 45: 15, 46: 15, 47: -1, 48: 13, 49: 13, 50: 14, 51: 3, 52: 23, 53: 23, 54: 15, 55: 23, 56: 8, 57: 20, 58: 24, 59: 5, 60: 5, 61: 5, 62: 5, 63: 13, 64: 2, 65: 3, 66: 24, 67: 1, 68: 3, 69: 21, 70: 18, 71: 3, 72: 5, 73: 25, 74: 24, 75: 11, 76: 24, 77: 3, 78: 11, 79: 25, 80: 17, 81: 21, 82: 5, 83: 19, 84: 5, 85: 11, 86: 25, 87: 6, 88: 13, 89: 0, 90: 7, 91: 7, 92: 6, 93: 3, 94: 13, 95: 5, 96: 5, 97: 5, 98: 13, 99: 13, 100: 13, 101: 13, 102: 3, 103: 6, 104: 5, 105: 3, 106: 3, 107: 3, 108: 6, 109: 7, 110: -1, 111: 3, 112: 3}\n"
     ]
    }
   ],
   "source": [
    "# transform queries to topics\n",
    "query_topics = {}\n",
    "query_topics_with_probs = {}\n",
    "\n",
    "for index, row in queries.iterrows():\n",
    "    query_id = row[0]\n",
    "    topics, probs = topic_model.find_topics(row[\"text\"], top_n=5)\n",
    "    query_topics[query_id] = topics[0]\n",
    "    query_topics_with_probs[query_id] = topic_model.find_topics(row[\"text\"], top_n=5)\n",
    "print(\"Query Topics:\", query_topics)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "-1 5\n",
      "0 1\n",
      "1 3\n",
      "2 5\n",
      "3 20\n",
      "4 0\n",
      "5 13\n",
      "6 6\n",
      "7 3\n"
     ]
    }
   ],
   "source": [
    "print(\"-1\", list(query_topics.values()).count(-1))\n",
    "print(\"0\", list(query_topics.values()).count(0))\n",
    "print(\"1\", list(query_topics.values()).count(1))\n",
    "print(\"2\", list(query_topics.values()).count(2))\n",
    "print(\"3\", list(query_topics.values()).count(3))\n",
    "print(\"4\", list(query_topics.values()).count(4))\n",
    "print(\"5\", list(query_topics.values()).count(5))\n",
    "print(\"6\", list(query_topics.values()).count(6))\n",
    "print(\"7\", list(query_topics.values()).count(7))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Document</th>\n",
       "      <th>Topic</th>\n",
       "      <th>Name</th>\n",
       "      <th>Representation</th>\n",
       "      <th>Representative_Docs</th>\n",
       "      <th>Top_n_words</th>\n",
       "      <th>Probability</th>\n",
       "      <th>Representative_document</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>18 Editions of the Dewey Decimal Classificatio...</td>\n",
       "      <td>14</td>\n",
       "      <td>14_classification_decimal_dewey_schemes</td>\n",
       "      <td>[classification, decimal, dewey, schemes, udc,...</td>\n",
       "      <td>[Adopting the Library of Congress Classificati...</td>\n",
       "      <td>classification - decimal - dewey - schemes - u...</td>\n",
       "      <td>0.741910</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Use Made of Technical Libraries This report is...</td>\n",
       "      <td>-1</td>\n",
       "      <td>-1_literature_on_with_an</td>\n",
       "      <td>[literature, on, with, an, be, scientific, sub...</td>\n",
       "      <td>[Library Optimum Sir,-In his recent article B....</td>\n",
       "      <td>literature - on - with - an - be - scientific ...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Two Kinds of Power An Essay on Bibliographic C...</td>\n",
       "      <td>-1</td>\n",
       "      <td>-1_literature_on_with_an</td>\n",
       "      <td>[literature, on, with, an, be, scientific, sub...</td>\n",
       "      <td>[Library Optimum Sir,-In his recent article B....</td>\n",
       "      <td>literature - on - with - an - be - scientific ...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Systems Analysis of a University Library; fina...</td>\n",
       "      <td>0</td>\n",
       "      <td>0_libraries_library_university_academic</td>\n",
       "      <td>[libraries, library, university, academic, pub...</td>\n",
       "      <td>[Cooperation Between Types of Libraries This b...</td>\n",
       "      <td>libraries - library - university - academic - ...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A Library Management Game: a report on a resea...</td>\n",
       "      <td>15</td>\n",
       "      <td>15_automation_telefacsimile_processing_automated</td>\n",
       "      <td>[automation, telefacsimile, processing, automa...</td>\n",
       "      <td>[Application of Computer Technology to Library...</td>\n",
       "      <td>automation - telefacsimile - processing - auto...</td>\n",
       "      <td>0.487765</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1455</th>\n",
       "      <td>World Dynamics Over the last several decades i...</td>\n",
       "      <td>4</td>\n",
       "      <td>4_social_psychology_sociology_science</td>\n",
       "      <td>[social, psychology, sociology, science, behav...</td>\n",
       "      <td>[Is a Scientific Revolution Taking Place in Ps...</td>\n",
       "      <td>social - psychology - sociology - science - be...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1456</th>\n",
       "      <td>World Trends in Library Education One of the m...</td>\n",
       "      <td>0</td>\n",
       "      <td>0_libraries_library_university_academic</td>\n",
       "      <td>[libraries, library, university, academic, pub...</td>\n",
       "      <td>[Cooperation Between Types of Libraries This b...</td>\n",
       "      <td>libraries - library - university - academic - ...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1457</th>\n",
       "      <td>Legal Restrictions on Exploitation of the Pate...</td>\n",
       "      <td>-1</td>\n",
       "      <td>-1_literature_on_with_an</td>\n",
       "      <td>[literature, on, with, an, be, scientific, sub...</td>\n",
       "      <td>[Library Optimum Sir,-In his recent article B....</td>\n",
       "      <td>literature - on - with - an - be - scientific ...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1458</th>\n",
       "      <td>Language and Thought This book considers the b...</td>\n",
       "      <td>11</td>\n",
       "      <td>11_language_linguistics_linguistic_text</td>\n",
       "      <td>[language, linguistics, linguistic, text, sema...</td>\n",
       "      <td>[Functional Approach The present book sums up ...</td>\n",
       "      <td>language - linguistics - linguistic - text - s...</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1459</th>\n",
       "      <td>Modern Integral Information Systems for Chemis...</td>\n",
       "      <td>1</td>\n",
       "      <td>1_chemical_compounds_notation_search</td>\n",
       "      <td>[chemical, compounds, notation, search, ca, ti...</td>\n",
       "      <td>[Experiences of IIT Research Institute in Oper...</td>\n",
       "      <td>chemical - compounds - notation - search - ca ...</td>\n",
       "      <td>0.271702</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>1460 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                               Document  Topic  \\\n",
       "0     18 Editions of the Dewey Decimal Classificatio...     14   \n",
       "1     Use Made of Technical Libraries This report is...     -1   \n",
       "2     Two Kinds of Power An Essay on Bibliographic C...     -1   \n",
       "3     Systems Analysis of a University Library; fina...      0   \n",
       "4     A Library Management Game: a report on a resea...     15   \n",
       "...                                                 ...    ...   \n",
       "1455  World Dynamics Over the last several decades i...      4   \n",
       "1456  World Trends in Library Education One of the m...      0   \n",
       "1457  Legal Restrictions on Exploitation of the Pate...     -1   \n",
       "1458  Language and Thought This book considers the b...     11   \n",
       "1459  Modern Integral Information Systems for Chemis...      1   \n",
       "\n",
       "                                                  Name  \\\n",
       "0              14_classification_decimal_dewey_schemes   \n",
       "1                             -1_literature_on_with_an   \n",
       "2                             -1_literature_on_with_an   \n",
       "3              0_libraries_library_university_academic   \n",
       "4     15_automation_telefacsimile_processing_automated   \n",
       "...                                                ...   \n",
       "1455             4_social_psychology_sociology_science   \n",
       "1456           0_libraries_library_university_academic   \n",
       "1457                          -1_literature_on_with_an   \n",
       "1458           11_language_linguistics_linguistic_text   \n",
       "1459              1_chemical_compounds_notation_search   \n",
       "\n",
       "                                         Representation  \\\n",
       "0     [classification, decimal, dewey, schemes, udc,...   \n",
       "1     [literature, on, with, an, be, scientific, sub...   \n",
       "2     [literature, on, with, an, be, scientific, sub...   \n",
       "3     [libraries, library, university, academic, pub...   \n",
       "4     [automation, telefacsimile, processing, automa...   \n",
       "...                                                 ...   \n",
       "1455  [social, psychology, sociology, science, behav...   \n",
       "1456  [libraries, library, university, academic, pub...   \n",
       "1457  [literature, on, with, an, be, scientific, sub...   \n",
       "1458  [language, linguistics, linguistic, text, sema...   \n",
       "1459  [chemical, compounds, notation, search, ca, ti...   \n",
       "\n",
       "                                    Representative_Docs  \\\n",
       "0     [Adopting the Library of Congress Classificati...   \n",
       "1     [Library Optimum Sir,-In his recent article B....   \n",
       "2     [Library Optimum Sir,-In his recent article B....   \n",
       "3     [Cooperation Between Types of Libraries This b...   \n",
       "4     [Application of Computer Technology to Library...   \n",
       "...                                                 ...   \n",
       "1455  [Is a Scientific Revolution Taking Place in Ps...   \n",
       "1456  [Cooperation Between Types of Libraries This b...   \n",
       "1457  [Library Optimum Sir,-In his recent article B....   \n",
       "1458  [Functional Approach The present book sums up ...   \n",
       "1459  [Experiences of IIT Research Institute in Oper...   \n",
       "\n",
       "                                            Top_n_words  Probability  \\\n",
       "0     classification - decimal - dewey - schemes - u...     0.741910   \n",
       "1     literature - on - with - an - be - scientific ...     0.000000   \n",
       "2     literature - on - with - an - be - scientific ...     0.000000   \n",
       "3     libraries - library - university - academic - ...     1.000000   \n",
       "4     automation - telefacsimile - processing - auto...     0.487765   \n",
       "...                                                 ...          ...   \n",
       "1455  social - psychology - sociology - science - be...     1.000000   \n",
       "1456  libraries - library - university - academic - ...     1.000000   \n",
       "1457  literature - on - with - an - be - scientific ...     0.000000   \n",
       "1458  language - linguistics - linguistic - text - s...     1.000000   \n",
       "1459  chemical - compounds - notation - search - ca ...     0.271702   \n",
       "\n",
       "      Representative_document  \n",
       "0                       False  \n",
       "1                       False  \n",
       "2                       False  \n",
       "3                       False  \n",
       "4                       False  \n",
       "...                       ...  \n",
       "1455                    False  \n",
       "1456                    False  \n",
       "1457                    False  \n",
       "1458                    False  \n",
       "1459                    False  \n",
       "\n",
       "[1460 rows x 8 columns]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "doc_info = topic_model.get_document_info(docs[\"text\"])\n",
    "doc_info"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1: ([-1, 20, 5, 3, 14], [0.42508858, 0.40581542, 0.40525758, 0.39575997, 0.39218175]), 2: ([6, 5, -1, 13, 2], [0.5578636, 0.54351616, 0.5202661, 0.47465622, 0.46867073]), 3: ([2, 19, 18, 9, -1], [0.7133019, 0.564875, 0.54921937, 0.45864588, 0.43095225]), 4: ([25, 1, 22, 15, 28], [0.39171955, 0.36059082, 0.35910475, 0.3572228, 0.34390008]), 5: ([13, 6, -1, 19, 2], [0.64703333, 0.5929646, 0.59010124, 0.58086085, 0.57909113]), 6: ([11, 9, 21, 2, 13], [0.44849384, 0.4383688, 0.34508163, 0.32840043, 0.27865595]), 7: ([-1, 6, 19, 13, 27], [0.58543944, 0.55294424, 0.5477898, 0.5403626, 0.5302058]), 8: ([3, -1, 5, 13, 11], [0.7271405, 0.67743355, 0.67520845, 0.60538036, 0.60110706]), 9: ([3, 5, -1, 11, 21], [0.64982533, 0.6252445, 0.57588446, 0.57279235, 0.55609095]), 10: ([5, -1, 16, 13, 2], [0.5014358, 0.47784606, 0.4759782, 0.45857334, 0.4403532]), 11: ([-1, 2, 5, 7, 6], [0.59934133, 0.56825256, 0.5672239, 0.5394591, 0.5232169]), 12: ([27, 10, 7, -1, 22], [0.66234237, 0.5415038, 0.51516885, 0.5111377, 0.46366423]), 13: ([5, 13, -1, 19, 18], [0.6804598, 0.66106427, 0.6306013, 0.59457284, 0.58618534]), 14: ([23, 12, -1, 10, 27], [0.394485, 0.28473017, 0.28226718, 0.27444452, 0.258744]), 15: ([6, -1, 15, 0, 19], [0.65373707, 0.6073693, 0.60587513, 0.605869, 0.55832195]), 16: ([13, 6, 19, -1, 15], [0.66722643, 0.6369458, 0.59328675, 0.5707141, 0.5344864]), 17: ([13, 5, 6, -1, 18], [0.65762126, 0.6139238, 0.60728157, 0.58866525, 0.54790837]), 18: ([1, 25, 16, 11, 28], [0.50468534, 0.3250762, 0.30392936, 0.24357203, 0.23400743]), 19: ([25, 1, 3, 13, 6], [0.55194914, 0.48832184, 0.45208088, 0.44120616, 0.4190611]), 20: ([18, 19, 15, 13, 2], [0.557827, 0.43977207, 0.43789688, 0.43548745, 0.35338974]), 21: ([2, 19, 18, -1, 6], [0.6691359, 0.60644364, 0.5490931, 0.50098073, 0.49998498]), 22: ([23, -1, 2, 3, 12], [0.57611, 0.45073602, 0.4504422, 0.41900182, 0.41770333]), 23: ([15, 0, 19, -1, 6], [0.7930567, 0.7465304, 0.679661, 0.6681056, 0.6579131]), 24: ([2, 19, 18, 13, 24], [0.60151064, 0.55189604, 0.5194111, 0.44959784, 0.42051235]), 25: ([19, 2, -1, 24, 18], [0.5265802, 0.4686581, 0.44991255, 0.43844196, 0.43669844]), 26: ([18, 13, 15, 2, 19], [0.69062257, 0.5640918, 0.50924456, 0.4998741, 0.49338037]), 27: ([3, 13, 5, 6, -1], [0.7216635, 0.7042624, 0.6044115, 0.59886986, 0.5840592]), 28: ([1, 6, -1, 19, 2], [0.6556672, 0.5127008, 0.4916587, 0.49149424, 0.48611024]), 29: ([3, 13, 6, -1, 5], [0.6038191, 0.5734424, 0.5320734, 0.5162424, 0.5033302]), 30: ([27, -1, 10, 2, 19], [0.6936959, 0.61174935, 0.601683, 0.566511, 0.5466056]), 31: ([2, 19, 18, 9, 27], [0.5819382, 0.54143655, 0.49397776, 0.48814607, 0.48383033]), 32: ([3, -1, 6, 1, 28], [0.65872884, 0.635707, 0.608444, 0.5829582, 0.5752769]), 33: ([13, 5, 6, 3, 25], [0.7292961, 0.60775256, 0.5884522, 0.5407063, 0.53832656]), 34: ([25, 3, 1, 13, -1], [0.637954, 0.5884554, 0.49361923, 0.46198586, 0.41789788]), 35: ([19, 6, 24, 2, -1], [0.57167906, 0.47881758, 0.47715357, 0.47672853, 0.46109694]), 36: ([11, 21, -1, 19, 3], [0.5342965, 0.3540604, 0.31396708, 0.30614287, 0.28725663]), 37: ([3, 21, 14, 1, -1], [0.66179967, 0.6216998, 0.5244014, 0.52273166, 0.5224961]), 38: ([3, 21, 13, -1, 5], [0.64652365, 0.64499676, 0.63917685, 0.6109181, 0.5972434]), 39: ([13, 19, 6, 15, -1], [0.6811728, 0.6171901, 0.5795578, 0.57925373, 0.5643325]), 40: ([11, 15, 28, 19, -1], [0.4830264, 0.4367027, 0.43307197, 0.42501056, 0.42436323]), 41: ([3, -1, 14, 8, 1], [0.50050914, 0.4963848, 0.49332908, 0.4827861, 0.47361302]), 42: ([13, 5, -1, 19, 6], [0.7165978, 0.6552596, 0.63915944, 0.61551917, 0.6041337]), 43: ([13, -1, 5, 3, 18], [0.7352257, 0.6764289, 0.6328855, 0.60559034, 0.58686656]), 44: ([27, 10, -1, 7, 17], [0.6888843, 0.62323713, 0.5650345, 0.5245141, 0.47283512]), 45: ([15, 0, 19, -1, 12], [0.65599155, 0.4443518, 0.34762046, 0.3418584, 0.3243569]), 46: ([15, 6, 0, 28, 19], [0.75873804, 0.53309697, 0.5304099, 0.5202215, 0.5133062]), 47: ([-1, 6, 19, 13, 5], [0.5350419, 0.50903296, 0.50136626, 0.49770844, 0.4896045]), 48: ([13, 5, 6, -1, 19], [0.57852226, 0.5445132, 0.5434073, 0.5272524, 0.50155413]), 49: ([13, -1, 5, 6, 2], [0.66542816, 0.63717955, 0.6197554, 0.6055248, 0.5629763]), 50: ([14, 13, 5, 3, 16], [0.5940044, 0.5292071, 0.52515036, 0.5050933, 0.49033603]), 51: ([3, 5, 13, 1, 25], [0.5697411, 0.4871588, 0.48252225, 0.47071904, 0.45116085]), 52: ([23, 10, 12, -1, 7], [0.79661906, 0.5908638, 0.54812264, 0.5466073, 0.48742852]), 53: ([23, 15, -1, 6, 19], [0.5235566, 0.49062318, 0.4245513, 0.423828, 0.4199304]), 54: ([15, 0, 19, -1, 6], [0.7263851, 0.577638, 0.5167371, 0.51661485, 0.47870922]), 55: ([23, -1, 10, 5, 3], [0.7851007, 0.54155165, 0.50885713, 0.48478395, 0.46920654]), 56: ([8, 14, 1, 3, -1], [0.692508, 0.6453519, 0.5852873, 0.5707865, 0.55951554]), 57: ([20, 14, 8, 3, 28], [0.5258478, 0.5169902, 0.50255233, 0.49264035, 0.47976863]), 58: ([24, 15, 19, 0, 6], [0.7765574, 0.6140851, 0.5888598, 0.55736446, 0.53679776]), 59: ([5, 3, 13, -1, 6], [0.7858389, 0.7399318, 0.6759767, 0.6443262, 0.5526908]), 60: ([5, 7, 3, -1, 6], [0.68206596, 0.6210891, 0.6093588, 0.55330384, 0.5320042]), 61: ([5, 13, 3, -1, 6], [0.71731764, 0.6623226, 0.6215801, 0.58288157, 0.57490253]), 62: ([5, 3, 16, 13, -1], [0.59848094, 0.558551, 0.5418923, 0.5328593, 0.44477707]), 63: ([13, 3, 6, 5, -1], [0.7733216, 0.6852923, 0.67714024, 0.6762121, 0.63050437]), 64: ([2, 18, -1, 19, 5], [0.6221134, 0.46013168, 0.4596297, 0.45897162, 0.43903035]), 65: ([3, 5, 13, -1, 6], [0.65923905, 0.6097661, 0.57920605, 0.5002142, 0.49116856]), 66: ([24, 19, 6, 0, 15], [0.84010744, 0.6925629, 0.6767347, 0.6234027, 0.62311643]), 67: ([1, 3, 21, -1, 5], [0.6935794, 0.68932253, 0.6536973, 0.59040225, 0.5753021]), 68: ([3, 5, 25, -1, 7], [0.7354659, 0.6835431, 0.5855718, 0.58312124, 0.5477498]), 69: ([21, 3, -1, 1, 13], [0.76007116, 0.59630394, 0.56643784, 0.5219722, 0.50971353]), 70: ([18, 2, 13, 19, -1], [0.59311163, 0.519495, 0.51878923, 0.5115966, 0.45841444]), 71: ([3, -1, 21, 5, 1], [0.71684957, 0.6713434, 0.6336597, 0.60011536, 0.5873736]), 72: ([5, 3, -1, 13, 6], [0.7219941, 0.58950275, 0.56725645, 0.5431076, 0.52340853]), 73: ([25, 3, 1, 5, 6], [0.70677423, 0.5736163, 0.51880807, 0.498132, 0.49795717]), 74: ([24, 0, 19, 6, 15], [0.7587775, 0.59496886, 0.55387163, 0.5441983, 0.5205356]), 75: ([11, 21, 16, -1, 5], [0.6377183, 0.35087854, 0.3437996, 0.31165475, 0.29002064]), 76: ([24, 0, 19, 15, 6], [0.7386719, 0.69045925, 0.5792686, 0.56098914, 0.54014987]), 77: ([3, 5, 25, 1, 21], [0.659086, 0.60165024, 0.57904446, 0.5477652, 0.53125393]), 78: ([11, 21, 16, 3, -1], [0.6086948, 0.41993862, 0.40980315, 0.2869692, 0.28065425]), 79: ([25, 3, 5, 13, 1], [0.6384877, 0.5772792, 0.52260494, 0.47974944, 0.4618316]), 80: ([17, 10, 7, 27, -1], [0.6607008, 0.46085802, 0.44260493, 0.42012513, 0.40370655]), 81: ([21, 13, 25, 11, 3], [0.5969976, 0.5061964, 0.49686044, 0.4905312, 0.4867716]), 82: ([5, 13, 6, 3, -1], [0.58330023, 0.5655685, 0.53061336, 0.49870867, 0.48886782]), 83: ([19, 15, 13, 6, 28], [0.59379804, 0.5576351, 0.50826627, 0.5056901, 0.47991803]), 84: ([5, 3, 13, -1, 6], [0.81649184, 0.7189138, 0.67844373, 0.5948365, 0.53950953]), 85: ([11, 21, 3, 16, 13], [0.60725665, 0.49742848, 0.44739795, 0.42205644, 0.40310383]), 86: ([25, 3, 1, 5, 21], [0.5579259, 0.48615286, 0.43963972, 0.40077454, 0.37448668]), 87: ([6, 22, 28, 8, -1], [0.6848248, 0.6714087, 0.5774374, 0.5734037, 0.5719103]), 88: ([13, 11, 5, 6, 3], [0.5971294, 0.524037, 0.51919204, 0.48642057, 0.4809844]), 89: ([0, 6, -1, 18, 19], [0.68423676, 0.6241167, 0.5730027, 0.5361933, 0.5286046]), 90: ([7, -1, 11, 16, 5], [0.62654305, 0.5201823, 0.45111668, 0.4399878, 0.43930742]), 91: ([7, -1, 17, 10, 6], [0.6455877, 0.5784802, 0.53981113, 0.50081, 0.4972272]), 92: ([6, 10, -1, 7, 23], [0.54935217, 0.47624493, 0.46047568, 0.4275682, 0.42179346]), 93: ([3, 5, 25, 13, 21], [0.68364143, 0.6335913, 0.5721427, 0.56449735, 0.5362524]), 94: ([13, 6, 15, 5, -1], [0.654279, 0.6488178, 0.5932056, 0.58846515, 0.5776601]), 95: ([5, 3, 13, -1, 16], [0.64904284, 0.5616013, 0.5369834, 0.5023572, 0.499998]), 96: ([5, 3, 13, -1, 16], [0.6559278, 0.57432604, 0.54575133, 0.46943372, 0.46132255]), 97: ([5, 13, 3, 25, 6], [0.6956768, 0.642449, 0.62465465, 0.49174324, 0.4749214]), 98: ([13, 6, 5, -1, 3], [0.7661036, 0.65524805, 0.6301204, 0.6186588, 0.5668917]), 99: ([13, 6, 5, 3, -1], [0.8071288, 0.71757805, 0.701682, 0.68321455, 0.66584325]), 100: ([13, 3, 5, 6, 22], [0.6334363, 0.61054826, 0.5863518, 0.5740575, 0.5719327]), 101: ([13, 3, 5, 25, 6], [0.6283176, 0.57015043, 0.56985795, 0.55417484, 0.5221219]), 102: ([3, 5, -1, 21, 13], [0.8247145, 0.7191614, 0.6067312, 0.56410027, 0.54289997]), 103: ([6, 19, 13, 15, 28], [0.55669475, 0.5566424, 0.5294384, 0.52737856, 0.51921844]), 104: ([5, 3, 13, -1, 21], [0.70998865, 0.6981659, 0.59811026, 0.48538405, 0.47510195]), 105: ([3, 5, -1, 13, 6], [0.6857774, 0.6194889, 0.5255419, 0.5245912, 0.47831774]), 106: ([3, 5, 13, -1, 25], [0.69759953, 0.67195874, 0.6058873, 0.56095135, 0.5485104]), 107: ([3, 5, 13, -1, 21], [0.7235756, 0.70292735, 0.6856854, 0.66497403, 0.644892]), 108: ([6, 13, -1, 1, 28], [0.80061454, 0.719189, 0.66364586, 0.6288589, 0.61534774]), 109: ([7, -1, 9, 4, 10], [0.65451354, 0.5201517, 0.52002954, 0.5019696, 0.46231374]), 110: ([-1, 19, 18, 21, 26], [0.52580774, 0.49323654, 0.47214228, 0.45704564, 0.43273914]), 111: ([3, 25, -1, 5, 6], [0.6579413, 0.5295661, 0.51791054, 0.49622053, 0.4748402]), 112: ([3, 25, 5, 14, 16], [0.7041523, 0.57188284, 0.5666177, 0.53845775, 0.52973])}\n"
     ]
    }
   ],
   "source": [
    "print(query_topics_with_probs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Query 1 has topic -1\n",
      "Relevant doc topics: \n",
      "5,-1,-1,-1,5,1,-1,10,1,1,12,-1,10,10,12,0,-1,11,-1,-1,1,18,-1,-1,25,20,-1,1,1,-1,1,-1,1,1,1,-1,1,-1,1,1,3,-1,1,5,-1,-1,\n",
      "PCTG:  0.391304347826087\n",
      "Query 2 has topic 6\n",
      "Relevant doc topics: \n",
      "2,5,23,-1,24,-1,5,-1,-1,-1,5,1,1,1,1,1,1,1,1,1,-1,-1,1,1,1,-1,\n",
      "PCTG:  0.0\n",
      "Query 3 has topic 2\n",
      "Relevant doc topics: \n",
      "2,2,13,6,19,2,1,19,19,19,2,0,2,2,-1,5,13,13,-1,2,-1,2,2,-1,2,0,2,3,2,2,5,13,2,-1,0,0,11,-1,2,2,2,2,-1,-1,\n",
      "PCTG:  0.4090909090909091\n",
      "Query 4 has topic 25\n",
      "Relevant doc topics: \n",
      "6,-1,25,25,-1,-1,28,-1,\n",
      "PCTG:  0.25\n",
      "Query 5 has topic 13\n",
      "Relevant doc topics: \n",
      "-1,22,-1,13,13,2,12,12,23,2,0,0,-1,13,2,13,-1,6,-1,13,1,-1,0,6,\n",
      "PCTG:  0.20833333333333334\n",
      "Query 6 has topic 11\n",
      "Relevant doc topics: \n",
      "-1,\n",
      "PCTG:  0.0\n",
      "Query 7 has topic -1\n",
      "Relevant doc topics: \n",
      "6,11,-1,19,19,6,22,-1,\n",
      "PCTG:  0.25\n",
      "Query 8 has topic 3\n",
      "Relevant doc topics: \n",
      "-1,-1,-1,6,6,1,-1,21,28,-1,-1,2,11,11,-1,-1,11,21,\n",
      "PCTG:  0.0\n",
      "Query 9 has topic 3\n",
      "Relevant doc topics: \n",
      "-1,-1,-1,-1,21,11,-1,25,3,11,3,-1,2,-1,11,-1,-1,11,2,-1,1,-1,11,2,-1,11,11,-1,-1,11,-1,-1,-1,11,\n",
      "PCTG:  0.058823529411764705\n",
      "Query 10 has topic 5\n",
      "Relevant doc topics: \n",
      "16,-1,2,2,-1,0,11,13,2,2,2,-1,13,5,24,2,-1,2,16,16,-1,16,11,2,-1,-1,\n",
      "PCTG:  0.038461538461538464\n",
      "Query 11 has topic -1\n",
      "Relevant doc topics: \n",
      "-1,9,-1,-1,-1,7,-1,13,12,-1,9,-1,7,1,-1,0,2,2,-1,-1,-1,4,-1,2,12,12,0,-1,1,1,0,-1,-1,2,6,-1,4,-1,27,2,-1,19,9,-1,10,9,12,9,9,2,2,9,2,9,23,-1,9,-1,2,-1,-1,3,1,-1,-1,-1,6,-1,1,-1,1,1,-1,-1,2,-1,-1,10,-1,2,0,0,2,0,-1,-1,-1,-1,-1,1,2,2,18,-1,2,2,2,2,27,-1,2,9,-1,2,2,2,-1,-1,-1,4,0,-1,27,0,-1,0,0,9,9,-1,23,2,9,-1,0,0,-1,\n",
      "PCTG:  0.3858267716535433\n",
      "Query 12 has topic 27\n",
      "Relevant doc topics: \n",
      "3,1,19,-1,18,19,2,2,-1,-1,27,9,-1,\n",
      "PCTG:  0.07692307692307693\n",
      "Query 13 has topic 5\n",
      "Relevant doc topics: \n",
      "18,5,-1,-1,-1,1,3,-1,5,13,3,5,23,3,5,13,-1,18,18,2,2,3,0,-1,0,-1,3,10,10,0,0,0,6,-1,9,2,3,18,3,13,-1,13,5,3,6,6,3,-1,5,5,-1,-1,13,3,5,3,3,5,18,2,2,3,1,1,1,-1,6,-1,5,5,5,5,-1,5,18,5,-1,5,25,5,-1,5,3,3,5,5,-1,19,3,5,5,\n",
      "PCTG:  0.24175824175824176\n",
      "Query 14 has topic 23\n",
      "Relevant doc topics: \n",
      "3,-1,1,\n",
      "PCTG:  0.0\n",
      "Query 15 has topic 6\n",
      "Relevant doc topics: \n",
      "-1,18,-1,-1,22,-1,13,18,-1,19,18,-1,0,-1,24,0,0,0,15,0,0,8,6,8,-1,19,0,0,0,0,-1,2,19,3,13,-1,1,18,18,-1,1,18,6,1,6,13,6,-1,18,18,1,-1,-1,22,1,6,-1,13,18,-1,0,8,15,-1,8,8,2,2,-1,-1,0,-1,-1,-1,6,22,6,-1,6,6,6,15,\n",
      "PCTG:  0.12195121951219512\n",
      "Query 16 has topic 13\n",
      "Relevant doc topics: \n",
      "6,19,-1,23,19,-1,18,6,6,6,-1,6,24,24,-1,-1,24,24,21,-1,24,-1,15,24,2,-1,\n",
      "PCTG:  0.0\n",
      "Query 17 has topic 13\n",
      "Relevant doc topics: \n",
      "3,3,1,22,19,19,-1,-1,18,-1,6,6,-1,1,-1,-1,22,22,-1,22,22,22,22,22,22,-1,\n",
      "PCTG:  0.0\n",
      "Query 18 has topic 1\n",
      "Relevant doc topics: \n",
      "13,8,-1,1,1,1,1,1,1,1,1,\n",
      "PCTG:  0.7272727272727273\n",
      "Query 19 has topic 25\n",
      "Relevant doc topics: \n",
      "3,-1,7,5,-1,3,3,-1,6,-1,-1,-1,11,-1,-1,3,-1,25,3,-1,5,3,21,6,25,5,1,25,13,3,3,3,5,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,21,-1,-1,-1,25,6,25,28,25,25,1,1,-1,-1,-1,-1,1,-1,3,-1,5,-1,-1,1,25,-1,25,-1,-1,2,-1,\n",
      "PCTG:  0.1111111111111111\n",
      "Query 20 has topic 18\n",
      "Relevant doc topics: \n",
      "18,3,5,23,3,-1,18,18,1,-1,23,23,-1,-1,0,15,15,19,23,3,3,-1,3,25,13,6,-1,1,-1,7,-1,3,-1,13,-1,5,5,3,5,3,6,-1,21,-1,5,23,-1,13,23,-1,3,3,-1,7,23,5,3,3,1,-1,5,5,18,1,1,1,-1,6,1,5,-1,10,5,5,-1,1,5,1,-1,1,18,-1,-1,3,5,-1,5,25,0,25,28,3,28,-1,-1,-1,-1,28,28,-1,-1,-1,3,5,-1,23,23,5,1,1,2,-1,18,18,3,3,5,-1,5,19,-1,1,-1,-1,-1,2,-1,3,-1,-1,5,-1,5,-1,-1,-1,19,6,6,15,-1,3,3,-1,\n",
      "PCTG:  0.04861111111111111\n",
      "Query 21 has topic 2\n",
      "Relevant doc topics: \n",
      "-1,0,0,2,0,12,12,0,0,0,-1,2,0,12,0,0,0,12,0,-1,0,12,0,12,6,\n",
      "PCTG:  0.08\n",
      "Query 22 has topic 23\n",
      "Relevant doc topics: \n",
      "1,-1,-1,3,23,1,23,23,23,-1,10,23,-1,2,24,-1,24,24,0,0,-1,1,19,23,-1,10,12,12,-1,23,1,-1,9,-1,23,23,1,23,10,10,1,-1,12,3,3,5,-1,-1,23,1,23,23,23,\n",
      "PCTG:  0.2641509433962264\n",
      "Query 23 has topic 15\n",
      "Relevant doc topics: \n",
      "-1,0,15,0,0,-1,0,0,-1,-1,10,10,2,10,-1,-1,10,0,0,14,0,0,0,-1,15,0,0,0,22,0,15,0,-1,12,-1,2,0,15,0,0,0,0,0,-1,-1,0,8,0,\n",
      "PCTG:  0.08333333333333333\n",
      "Query 24 has topic 2\n",
      "Relevant doc topics: \n",
      "-1,0,0,0,19,15,0,0,12,23,0,-1,0,15,0,0,0,0,0,0,0,0,2,-1,2,2,6,0,0,28,-1,12,0,0,0,0,0,0,-1,12,-1,12,0,-1,0,-1,0,6,0,0,11,0,\n",
      "PCTG:  0.057692307692307696\n",
      "Query 25 has topic 19\n",
      "Relevant doc topics: \n",
      "0,-1,-1,-1,19,-1,14,-1,-1,19,19,-1,23,18,6,-1,-1,20,20,20,2,-1,-1,-1,0,27,23,-1,-1,-1,-1,20,0,\n",
      "PCTG:  0.09090909090909091\n",
      "Query 26 has topic 18\n",
      "Relevant doc topics: \n",
      "-1,18,-1,13,18,-1,19,18,-1,-1,24,24,6,19,0,0,2,19,3,13,-1,-1,-1,18,-1,1,6,18,-1,6,5,-1,0,13,13,-1,18,1,1,-1,1,13,1,18,8,15,0,-1,15,2,-1,-1,6,-1,6,6,\n",
      "PCTG:  0.125\n",
      "Query 27 has topic 3\n",
      "Relevant doc topics: \n",
      "18,3,3,1,3,-1,5,3,3,3,-1,3,13,-1,6,19,3,1,-1,-1,-1,3,-1,12,23,23,21,2,14,-1,-1,-1,-1,-1,5,25,-1,2,25,7,13,3,3,-1,3,3,-1,3,3,-1,-1,-1,-1,3,3,3,3,3,13,3,3,3,3,-1,-1,7,-1,3,1,1,1,-1,7,1,1,1,1,1,1,1,3,16,-1,3,-1,10,7,3,-1,7,-1,-1,3,-1,3,1,3,1,-1,3,3,5,-1,-1,-1,3,-1,3,3,7,-1,11,-1,3,3,\n",
      "PCTG:  0.33043478260869563\n",
      "Query 28 has topic 1\n",
      "Relevant doc topics: \n",
      "1,1,1,-1,-1,10,-1,1,2,19,1,-1,1,1,1,1,7,1,1,1,-1,1,1,7,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,1,-1,1,-1,1,1,6,1,1,1,1,1,1,-1,3,-1,1,1,1,1,-1,1,\n",
      "PCTG:  0.7\n",
      "Query 29 has topic 3\n",
      "Relevant doc topics: \n",
      "3,-1,5,3,3,3,-1,3,-1,-1,-1,-1,-1,3,10,10,21,14,-1,7,3,3,-1,-1,3,3,3,3,3,1,5,3,1,1,1,-1,1,1,1,1,7,3,1,3,3,3,3,3,\n",
      "PCTG:  0.4166666666666667\n",
      "Query 30 has topic 27\n",
      "Relevant doc topics: \n",
      "-1,0,9,-1,-1,10,3,12,7,-1,4,-1,-1,-1,19,-1,0,-1,12,12,10,0,10,9,-1,-1,-1,17,0,10,0,10,-1,6,10,10,7,7,10,7,7,-1,2,27,27,10,22,22,-1,1,-1,-1,17,-1,17,10,-1,17,-1,17,10,-1,27,7,-1,17,17,-1,2,17,-1,-1,17,-1,-1,7,7,-1,10,0,-1,10,10,17,17,-1,-1,27,-1,2,27,-1,2,-1,2,2,17,2,-1,-1,17,2,-1,17,2,-1,-1,-1,0,-1,27,0,7,17,7,7,9,7,7,7,9,27,7,7,7,9,-1,-1,-1,0,-1,10,7,0,\n",
      "PCTG:  0.05223880597014925\n",
      "Query 31 has topic 2\n",
      "Relevant doc topics: \n",
      "9,1,2,1,6,1,-1,19,17,1,-1,7,18,-1,-1,19,1,-1,10,7,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,1,1,6,-1,-1,-1,7,-1,-1,-1,2,-1,3,3,1,2,2,27,-1,1,27,23,-1,20,1,\n",
      "PCTG:  0.06557377049180328\n",
      "Query 32 has topic 3\n",
      "Relevant doc topics: \n",
      "15,-1,-1,-1,22,-1,15,-1,10,10,12,-1,10,21,12,-1,0,-1,24,0,14,-1,-1,14,0,0,0,15,-1,-1,0,8,6,-1,-1,-1,8,8,-1,19,0,15,19,14,15,15,15,12,0,13,6,5,13,1,22,1,6,6,6,8,15,-1,24,8,-1,-1,-1,8,-1,-1,28,28,24,8,8,15,15,-1,8,0,20,-1,24,-1,8,15,-1,-1,8,19,28,28,28,15,-1,-1,24,22,-1,-1,8,-1,3,-1,-1,-1,19,6,22,6,6,6,6,15,-1,0,8,\n",
      "PCTG:  0.008547008547008548\n",
      "Query 33 has topic 13\n",
      "Relevant doc topics: \n",
      "19,6,-1,19,19,24,24,-1,-1,-1,24,24,-1,24,-1,24,23,19,6,15,\n",
      "PCTG:  0.0\n",
      "Query 34 has topic 25\n",
      "Relevant doc topics: \n",
      "3,3,3,3,5,8,-1,6,-1,11,7,-1,3,3,3,3,-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,3,3,\n",
      "PCTG:  0.0\n",
      "Query 35 has topic 19\n",
      "Relevant doc topics: \n",
      "0,-1,-1,23,-1,24,19,-1,-1,2,15,12,22,-1,19,-1,0,0,14,15,23,1,6,-1,3,2,23,1,1,1,1,1,2,0,-1,19,-1,24,2,2,-1,-1,0,\n",
      "PCTG:  0.06976744186046512\n",
      "Query 37 has topic 3\n",
      "Relevant doc topics: \n",
      "14,14,21,3,-1,3,3,1,3,-1,3,23,3,21,10,21,1,-1,1,1,-1,7,21,21,-1,-1,21,1,21,3,-1,21,3,21,-1,-1,-1,21,21,-1,\n",
      "PCTG:  0.2\n",
      "Query 39 has topic 13\n",
      "Relevant doc topics: \n",
      "-1,0,0,4,13,15,0,-1,27,0,2,0,0,0,-1,-1,2,-1,\n",
      "PCTG:  0.05555555555555555\n",
      "Query 41 has topic 3\n",
      "Relevant doc topics: \n",
      "3,1,14,3,1,1,-1,-1,-1,14,-1,\n",
      "PCTG:  0.18181818181818182\n",
      "Query 42 has topic 13\n",
      "Relevant doc topics: \n",
      "2,2,2,-1,13,6,19,2,-1,-1,-1,0,6,2,0,-1,2,-1,-1,-1,13,-1,6,1,13,-1,2,2,19,2,-1,2,2,2,22,2,-1,15,11,-1,-1,2,2,2,2,-1,-1,2,13,-1,\n",
      "PCTG:  0.08\n",
      "Query 43 has topic 13\n",
      "Relevant doc topics: \n",
      "13,-1,18,19,-1,-1,-1,-1,25,-1,1,25,25,\n",
      "PCTG:  0.07692307692307693\n",
      "Query 44 has topic 27\n",
      "Relevant doc topics: \n",
      "-1,0,-1,-1,3,-1,-1,7,-1,-1,12,-1,9,7,0,1,-1,-1,15,-1,10,-1,2,10,-1,-1,24,12,12,10,0,0,1,-1,-1,18,-1,27,19,19,19,-1,10,12,2,-1,-1,18,-1,1,0,3,1,6,19,-1,10,1,10,-1,19,1,10,10,7,1,10,-1,-1,1,-1,3,1,-1,-1,22,-1,6,-1,10,-1,-1,27,-1,-1,7,-1,17,7,10,0,0,20,-1,10,-1,15,-1,0,0,0,10,0,0,-1,0,22,1,-1,-1,-1,1,-1,2,-1,2,-1,-1,2,0,0,2,-1,0,0,27,0,6,0,0,7,9,7,27,9,1,-1,27,9,0,-1,0,10,-1,-1,-1,0,3,-1,-1,10,0,-1,0,1,\n",
      "PCTG:  0.03225806451612903\n",
      "Query 45 has topic 15\n",
      "Relevant doc topics: \n",
      "0,15,15,0,-1,0,-1,0,22,-1,18,-1,0,19,15,0,15,15,0,-1,0,0,19,5,13,22,-1,22,-1,6,-1,1,0,0,8,-1,0,8,20,0,15,0,0,8,15,0,0,0,0,20,20,0,0,-1,-1,8,0,0,19,28,0,0,0,-1,0,0,-1,0,0,6,0,19,6,-1,0,14,0,\n",
      "PCTG:  0.09090909090909091\n",
      "Query 46 has topic 15\n",
      "Relevant doc topics: \n",
      "15,0,-1,0,0,0,-1,0,-1,18,-1,0,19,15,15,23,-1,8,0,-1,15,0,8,15,-1,8,-1,19,2,15,22,15,15,15,-1,0,21,23,-1,13,6,-1,-1,0,0,22,22,6,0,-1,6,0,8,15,-1,28,24,8,-1,-1,0,-1,-1,-1,28,-1,8,-1,-1,-1,28,0,-1,28,8,8,22,8,15,15,-1,8,0,-1,8,15,-1,-1,-1,8,19,28,28,28,15,22,-1,-1,0,8,-1,3,-1,-1,-1,19,6,6,6,6,0,15,-1,0,8,8,\n",
      "PCTG:  0.12931034482758622\n",
      "Query 49 has topic 13\n",
      "Relevant doc topics: \n",
      "-1,8,9,-1,6,21,2,14,6,19,-1,9,2,6,18,2,-1,1,1,-1,-1,-1,-1,-1,-1,2,0,16,9,9,6,-1,0,19,\n",
      "PCTG:  0.0\n",
      "Query 50 has topic 14\n",
      "Relevant doc topics: \n",
      "14,14,3,8,14,8,14,-1,-1,14,14,14,14,8,8,-1,16,-1,14,14,14,14,-1,3,3,3,3,3,-1,3,3,1,1,16,3,14,1,-1,-1,-1,3,16,3,1,1,28,14,8,0,-1,-1,-1,-1,20,7,14,1,-1,-1,2,16,16,16,1,16,-1,-1,-1,14,-1,8,8,3,7,-1,-1,17,14,-1,14,8,-1,3,3,-1,-1,14,-1,-1,\n",
      "PCTG:  0.21348314606741572\n",
      "Query 52 has topic 23\n",
      "Relevant doc topics: \n",
      "-1,-1,3,23,23,23,10,23,23,23,-1,-1,23,23,23,\n",
      "PCTG:  0.6\n",
      "Query 54 has topic 15\n",
      "Relevant doc topics: \n",
      "-1,15,0,0,0,-1,13,15,12,0,15,0,0,-1,0,27,0,0,0,-1,2,19,0,0,15,28,-1,0,0,0,15,0,0,0,0,0,0,0,-1,0,-1,24,0,0,0,-1,6,19,0,0,0,\n",
      "PCTG:  0.09803921568627451\n",
      "Query 55 has topic 23\n",
      "Relevant doc topics: \n",
      "-1,3,23,23,23,10,23,23,23,-1,3,1,5,-1,-1,23,23,23,\n",
      "PCTG:  0.5\n",
      "Query 56 has topic 8\n",
      "Relevant doc topics: \n",
      "14,0,14,-1,0,-1,1,-1,14,-1,14,-1,3,3,14,-1,3,16,28,14,-1,-1,16,16,16,1,16,-1,-1,14,-1,8,8,3,-1,-1,14,-1,14,8,-1,3,14,-1,-1,\n",
      "PCTG:  0.06666666666666667\n",
      "Query 57 has topic 20\n",
      "Relevant doc topics: \n",
      "14,-1,1,15,14,14,-1,3,3,-1,3,16,28,8,8,-1,-1,-1,\n",
      "PCTG:  0.0\n",
      "Query 58 has topic 24\n",
      "Relevant doc topics: \n",
      "0,15,0,8,-1,9,9,24,19,19,19,19,15,-1,24,24,24,0,19,19,-1,6,6,24,0,-1,28,24,24,8,-1,24,-1,24,24,28,24,0,-1,24,8,6,23,-1,0,19,\n",
      "PCTG:  0.2608695652173913\n",
      "Query 61 has topic 5\n",
      "Relevant doc topics: \n",
      "2,-1,5,5,-1,-1,-1,-1,13,11,2,\n",
      "PCTG:  0.18181818181818182\n",
      "Query 62 has topic 5\n",
      "Relevant doc topics: \n",
      "-1,3,5,16,16,5,5,5,16,16,16,2,\n",
      "PCTG:  0.3333333333333333\n",
      "Query 65 has topic 3\n",
      "Relevant doc topics: \n",
      "3,3,3,3,3,-1,-1,-1,3,3,7,7,5,\n",
      "PCTG:  0.5384615384615384\n",
      "Query 66 has topic 24\n",
      "Relevant doc topics: \n",
      "0,0,8,-1,24,19,19,19,6,-1,4,24,24,24,0,19,19,-1,6,6,24,24,24,-1,-1,24,28,-1,24,-1,24,8,23,-1,19,\n",
      "PCTG:  0.2857142857142857\n",
      "Query 67 has topic 1\n",
      "Relevant doc topics: \n",
      "-1,-1,3,3,-1,1,1,6,1,-1,-1,-1,-1,25,20,-1,1,-1,3,3,3,1,1,-1,1,1,1,3,1,1,-1,1,\n",
      "PCTG:  0.375\n",
      "Query 69 has topic 21\n",
      "Relevant doc topics: \n",
      "21,-1,3,3,21,-1,21,-1,21,21,21,-1,1,1,21,\n",
      "PCTG:  0.4666666666666667\n",
      "Query 71 has topic 3\n",
      "Relevant doc topics: \n",
      "11,21,3,-1,3,1,3,-1,3,1,-1,-1,25,-1,3,-1,-1,3,3,-1,-1,-1,3,3,3,-1,-1,\n",
      "PCTG:  0.37037037037037035\n",
      "Query 76 has topic 24\n",
      "Relevant doc topics: \n",
      "0,15,0,8,-1,9,9,24,19,19,15,10,24,12,24,0,0,27,19,0,0,-1,0,0,-1,0,24,10,0,-1,24,24,8,-1,0,0,0,0,-1,24,24,-1,0,-1,24,24,24,0,-1,24,0,0,8,6,23,0,-1,19,0,0,\n",
      "PCTG:  0.2\n",
      "Query 79 has topic 25\n",
      "Relevant doc topics: \n",
      "5,1,-1,25,13,3,-1,1,1,1,25,\n",
      "PCTG:  0.18181818181818182\n",
      "Query 81 has topic 21\n",
      "Relevant doc topics: \n",
      "-1,5,3,19,-1,25,25,21,3,11,-1,\n",
      "PCTG:  0.09090909090909091\n",
      "Query 82 has topic 5\n",
      "Relevant doc topics: \n",
      "16,5,16,4,-1,21,2,2,-1,-1,\n",
      "PCTG:  0.1\n",
      "Query 84 has topic 5\n",
      "Relevant doc topics: \n",
      "5,-1,3,5,5,5,5,-1,13,2,5,\n",
      "PCTG:  0.5454545454545454\n",
      "Query 90 has topic 7\n",
      "Relevant doc topics: \n",
      "-1,7,7,-1,7,7,10,7,9,9,-1,9,0,4,-1,9,4,9,-1,-1,-1,4,4,-1,9,9,-1,9,-1,9,-1,9,10,7,7,-1,7,7,-1,-1,4,-1,4,-1,10,7,9,4,-1,4,-1,7,7,7,7,7,9,4,7,-1,7,-1,7,-1,7,9,-1,-1,17,7,\n",
      "PCTG:  0.2857142857142857\n",
      "Query 92 has topic 6\n",
      "Relevant doc topics: \n",
      "-1,-1,-1,6,6,6,6,2,1,6,6,6,19,25,-1,6,1,6,6,-1,13,1,1,18,-1,-1,-1,-1,-1,-1,18,2,6,-1,6,6,6,6,\n",
      "PCTG:  0.39473684210526316\n",
      "Query 95 has topic 5\n",
      "Relevant doc topics: \n",
      "-1,5,16,16,5,5,5,16,16,16,-1,\n",
      "PCTG:  0.36363636363636365\n",
      "Query 96 has topic 5\n",
      "Relevant doc topics: \n",
      "5,16,16,5,5,5,16,16,16,\n",
      "PCTG:  0.4444444444444444\n",
      "Query 97 has topic 5\n",
      "Relevant doc topics: \n",
      "-1,3,3,-1,3,5,\n",
      "PCTG:  0.16666666666666666\n",
      "Query 98 has topic 13\n",
      "Relevant doc topics: \n",
      "-1,13,13,4,13,2,13,1,6,1,6,6,-1,13,13,6,13,6,6,-1,-1,13,-1,-1,-1,28,-1,6,6,\n",
      "PCTG:  0.27586206896551724\n",
      "Query 99 has topic 13\n",
      "Relevant doc topics: \n",
      "18,-1,18,-1,13,18,2,2,2,13,4,13,13,6,1,6,6,-1,13,13,6,13,6,6,-1,13,2,13,-1,-1,28,-1,6,6,\n",
      "PCTG:  0.2647058823529412\n",
      "Query 100 has topic 13\n",
      "Relevant doc topics: \n",
      "22,0,19,-1,22,19,-1,1,-1,-1,28,22,22,22,22,22,22,22,\n",
      "PCTG:  0.0\n",
      "Query 101 has topic 13\n",
      "Relevant doc topics: \n",
      "-1,\n",
      "PCTG:  0.0\n",
      "Query 102 has topic 3\n",
      "Relevant doc topics: \n",
      "11,3,3,-1,3,3,3,3,-1,3,3,3,3,3,3,-1,3,3,5,1,3,-1,3,3,\n",
      "PCTG:  0.7083333333333334\n",
      "Query 104 has topic 5\n",
      "Relevant doc topics: \n",
      "11,3,5,3,3,3,-1,3,2,3,5,\n",
      "PCTG:  0.18181818181818182\n",
      "Query 109 has topic 7\n",
      "Relevant doc topics: \n",
      "-1,7,7,-1,7,7,13,10,-1,7,9,9,-1,4,-1,-1,9,4,4,9,-1,-1,7,-1,-1,4,4,-1,9,9,-1,9,-1,9,-1,9,10,7,7,-1,7,-1,-1,4,-1,4,7,9,4,-1,4,-1,7,7,7,7,7,9,4,7,-1,7,-1,7,-1,7,9,-1,-1,17,7,\n",
      "PCTG:  0.28169014084507044\n",
      "Query 111 has topic 3\n",
      "Relevant doc topics: \n",
      "3,3,3,-1,-1,3,\n",
      "PCTG:  0.6666666666666666\n",
      "avg_pctg:  0.14244139328771147\n",
      "min_pctg:  0.0\n",
      "max_pctg:  0.7272727272727273\n"
     ]
    }
   ],
   "source": [
    "# analyse if queries and relevant documents have similar topics\n",
    "rels = pd.read_csv(\"data/cisi-csv/rels.csv\")\n",
    "\n",
    "doc_topics = doc_info[\"Topic\"].tolist()\n",
    "avg_pctg = 0\n",
    "max_pctg = 0\n",
    "min_pctg = 10000\n",
    "\n",
    "for index, row in queries.iterrows():\n",
    "  queryID = row[\"id\"]\n",
    "  truths = rels.loc[rels['queryID'] == queryID]\n",
    "  true_docs = truths['docID'].tolist()\n",
    "  if len(true_docs) == 0:\n",
    "    continue\n",
    "  q_topic = query_topics_with_probs[queryID][0][0]\n",
    "  print(\"Query \" + str(queryID) + \" has topic \" + str(q_topic))\n",
    "  print(\"Relevant doc topics: \")\n",
    "  same_topic = 0\n",
    "  for d in true_docs:\n",
    "    print(doc_topics[d-1], end=\",\")\n",
    "    if doc_topics[d-1] == q_topic:\n",
    "      same_topic += 1\n",
    "  pctg = same_topic / len(true_docs)\n",
    "  print(\"\")\n",
    "  print(\"PCTG: \", pctg)\n",
    "  avg_pctg += pctg\n",
    "  if pctg < min_pctg:\n",
    "    min_pctg = pctg\n",
    "  if pctg > max_pctg:\n",
    "    max_pctg = pctg\n",
    "\n",
    "print(\"avg_pctg: \", avg_pctg/len(queries))\n",
    "print(\"min_pctg: \", min_pctg)\n",
    "print(\"max_pctg: \", max_pctg)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Check how many relevant documents there are per query"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAACWAAAAJwCAYAAAANnFoPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB+f0lEQVR4nOz9eZzWdb0//j8GBoEUBsdkS1RccsEFl1TCDBUP4gaJC4mKRKKlkmKmmLhwLHA9iLmkmaCi/nJNNFEDlWMibnk8JankhtmAHQQEE1nm+0c/59OEGPN2LmdG7vfb7brduF6v1/v5el5zXX8+eL3KqqurqwMAAAAAAAAAAECdNWvoBgAAAAAAAAAAAJoqASwAAAAAAAAAAICCBLAAAAAAAAAAAAAKEsACAAAAAAAAAAAoSAALAAAAAAAAAACgIAEsAAAAAAAAAACAggSwAAAAAAAAAAAAChLAAgAAAAAAAAAAKEgACwAAAAAAAAAAoCABLAAAAIAm6rHHHktZWVnuvPPOhm5ljcydOzeHHXZYNthgg5SVlWXcuHF1ev6NN95IWVlZJkyYUJL+AAAAAKAIASwAAACATzFhwoSUlZWlVatW+ctf/rLKfK9evbLddts1QGdNz2mnnZaHHnooI0eOzM0335z999+/oVuq5ZMCbR9//x+/WrVqlc6dO6dPnz4ZP3583n///QbsmH913HHHZb311qs11qtXr5rvr1mzZmnbtm222mqrHHPMMXnkkUcaqFMAAADgi6S8oRsAAAAAaAqWLl2asWPH5sorr2zoVpqsadOmpV+/fvnhD3/Y0K3U2ejRo9O1a9csW7YsVVVVeeyxx3Lqqafm8ssvz3333ZcddtihoVvkU2y00UYZM2ZMkmTJkiWZPXt27r777txyyy054ogjcsstt6RFixYN3CUAAADQVAlgAQAAAKyB7t275/rrr8/IkSPTuXPnhm7nc7VkyZKsu+66n7nOvHnz0q5du8/eUAPo27dvdt1115r3I0eOzLRp03LQQQflkEMOyaxZs9K6desG7HDNVFdX58MPP2wSvSb199urqKjI0UcfXWts7NixGT58eK6++upsuummueiiiz7zPgAAAMDayRWEAAAAAGvg7LPPzooVKzJ27NhPXffGG2+krKwsEyZMWGWurKws559/fs37888/P2VlZXnllVdy9NFHp6KiIhtuuGFGjRqV6urqzJkzJ/369Uvbtm3TsWPHXHbZZZ+454oVK3L22WenY8eOWXfddXPIIYdkzpw5q6ybOXNm9t9//1RUVORLX/pSvvnNb+Z3v/tdrTUf9/TSSy/lqKOOyvrrr58999zzUz/za6+9lsMPPzyVlZX50pe+lD322CMPPPBAzfzH1/hVV1fnqquuqrkO7tMsWLAgxx13XCoqKtKuXbsMHjw4CxYs+MS106ZNyze+8Y2su+66adeuXfr165dZs2atsu4vf/lLhg4dms6dO6dly5bp2rVrvve97+Wjjz761F5WZ5999smoUaPy5ptv5pZbbqkZr6qqypAhQ7LRRhulZcuW6dSpU/r165c33njjU+t9fH3ea6+9lj59+mTddddN586dM3r06FRXV9dau3LlyowbNy7dunVLq1at0qFDh5xwwgl57733aq3bdNNNc9BBB+Whhx7KrrvumtatW+fnP//5p/Zx3XXXZfPNN0/r1q2z22675b//+7/Tq1ev9OrVq2bNx9/pv36mj69xfOyxx2qNf5bf3o033piysrL8/ve/X6XXn/70p2nevPknXg/67zRv3jzjx4/Ptttum5/97GdZuHBhnWsAAAAAJAJYAAAAAGuka9euOfbYY3P99dfnnXfeqdfaRx55ZFauXJmxY8dm9913z4UXXphx48Zlv/32y1e+8pVcdNFF2WKLLfLDH/4w06dPX+X5n/zkJ3nggQdy5plnZvjw4XnkkUfSu3fv/P3vf69ZM23atOy1115ZtGhRzjvvvPz0pz/NggULss8+++Tpp59epebhhx+eDz74ID/96U9z/PHHr7b3uXPn5utf/3oeeuihfP/7389PfvKTfPjhhznkkENyzz33JEn22muv3HzzzUmS/fbbLzfffHPN+09SXV2dfv365eabb87RRx+dCy+8MG+//XYGDx68ytrf/va36dOnT+bNm5fzzz8/I0aMyJNPPpmePXvWCge988472W233XL77bfnyCOPzPjx43PMMcfk8ccfzwcffLDaXv6dY445Jkny8MMP14wNGDAg99xzT4YMGZKrr746w4cPz/vvv5+33nrr39ZbsWJF9t9//3To0CEXX3xxdtlll5x33nk577zzaq074YQTcsYZZ6Rnz5654oorMmTIkEyaNCl9+vTJsmXLaq19+eWX8+1vfzv77bdfrrjiinTv3n21+99www054YQT0rFjx1x88cXp2bPnagN9a+qz/vYOO+ywtG7dOpMmTVpl7aRJk9KrV6985StfKdRb8+bN8+1vfzsffPBBnnjiiUI1AAAAAFxBCAAAALCGfvzjH+emm27KRRddlCuuuKLe6u622241pxINGzYsm266aU4//fSMGTMmZ555ZpLk29/+djp37pxf/vKX2WuvvWo9P3/+/MyaNStt2rRJkuy888454ogjcv3112f48OGprq7OiSeemL333jsPPvhgzelTJ5xwQrp165ZzzjmnVoAoSXbcccfceuut/7b3sWPHZu7cufnv//7vmpOyjj/++Oywww4ZMWJE+vXrl8022yybbbZZjjnmmHz1q19d5Sq4f3Xfffdl+vTpufjii3PGGWckSb73ve9l7733XmXtGWeckcrKysyYMSOVlZVJkv79+2ennXbKeeedl4kTJyb5x5WBVVVVmTlzZq2rBD/pdKm62GijjVJRUZE///nPSf5xcteTTz6ZSy65JD/84Q9r1o0cOXKN6n344YfZf//9M378+CTJ97///Rx88MG56KKLMnz48Hz5y1/OE088kV/84heZNGlSjjrqqJpn99577+y///654447ao3Pnj07U6ZMSZ8+fT5172XLluXss89O9+7d8+ijj2adddZJkmy77bYZNmxYunTpsmZ/lH9SX7+9/v3757bbbsvFF1+cZs3+8X9Kf//73+ell16q+Y0Utd122yVJzXcIAAAAUFdOwAIAAABYQx+HiK677rr89a9/rbe63/3ud2v+3bx58+y6666prq7O0KFDa8bbtWuXrbbaKq+99toqzx977LE14askOeyww9KpU6f85je/SZK88MILefXVV3PUUUfl//7v//K3v/0tf/vb37JkyZLsu+++mT59elauXFmr5oknnrhGvf/mN7/JbrvtVuuawvXWWy/Dhg3LG2+8kZdeemnN/gj/UrO8vDzf+973asaaN2+eU045pda6v/71r3nhhRdy3HHH1YSvkmSHHXbIfvvtV/P5V65cmXvvvTcHH3xwrfDVx/7ddYj/znrrrZf3338/SdK6deuss846eeyxx1a5DnBNnXzyybV6O/nkk/PRRx/lt7/9bZLkjjvuSEVFRfbbb7+a7/Jvf/tbdtlll6y33np59NFHa9Xr2rXrvw1fJcmzzz6befPm5cQTT6wJXyWpuQqyiPr67R177LF55513an22SZMmpXXr1hkwYECh3j623nrrJUnNdwgAAABQVwJYAAAAAHVwzjnnZPny5Rk7dmy91dx4441rva+oqEirVq3y5S9/eZXxTwr1bLnllrXel5WVZYsttqi5gu/VV19NkgwePDgbbrhhrdcvfvGLLF26NAsXLqxVo2vXrmvU+5tvvpmtttpqlfFtttmmZr6u3nzzzXTq1KkmGPOxf93n49qr2//joM+7776bRYsW1Zx0VN8WL15cE4Br2bJlLrroojz44IPp0KFD9tprr1x88cWpqqpao1rNmjXLZpttVmvsq1/9apLU+j4XLlyY9u3br/J9Ll68OPPmzav1fF2+y2TV31OLFi1W6WlN1ddvb7/99kunTp1qriFcuXJlbrvttvTr169W+LCIxYsXJ8lnrgMAAACsvVxBCAAAAFAHm222WY4++uhcd911Oeuss1aZX91pSitWrFhtzebNm6/RWJJC1+V9fMLQJZdcku7du3/imn8NO7Vu3brO+6yN3n777SxcuDBbbLFFzdipp56agw8+OPfee28eeuihjBo1KmPGjMm0adOy0047feY9V65cmfbt29eEkf7VhhtuWOt9Kb7LNf2d19dvr3nz5jnqqKNy/fXX5+qrr87vfve7vPPOO//2Oss18Yc//CFJan2HAAAAAHUhgAUAAABQR+ecc05uueWWXHTRRavMrb/++kmSBQsW1BovchLUmvr4lKGPVVdXZ/bs2dlhhx2SJJtvvnmSpG3btundu3e97r3JJpvk5ZdfXmX8T3/6U818kZpTp07N4sWLa4Vz/nWfj2uvbv8vf/nLWXfdddO6deu0bdu2JmhTn26++eYkWeWKv8033zynn356Tj/99Lz66qvp3r17Lrvsstxyyy2fWm/lypV57bXXak69SpJXXnklSbLpppvW1P7tb3+bnj171mu46uO/56uvvpp99tmnZnzZsmV5/fXXs+OOO9aMrenvvD5/e8cee2wuu+yyTJ48OQ8++GA23HDDNbpa8dOsWLEit956a770pS/VukYTAAAAoC5cQQgAAABQR5tvvnmOPvro/PznP1/larm2bdvmy1/+cqZPn15r/Oqrry5ZPzfddFPef//9mvd33nln/vrXv6Zv375Jkl122SWbb755Lr300prr1v7Zu+++W3jvAw44IE8//XRmzJhRM7ZkyZJcd9112XTTTbPtttsWqrl8+fJcc801NWMrVqzIlVdeWWtdp06d0r1790ycOLFWEOgPf/hDHn744RxwwAFJ/nGtX//+/TN58uQ8++yzq+xX5FSxJJk2bVr+8z//M127ds2gQYOSJB988EE+/PDDWus233zztGnTJkuXLl2juj/72c9q9fazn/0sLVq0yL777pskOeKII7JixYr853/+5yrPLl++fJVQ1Jradddds+GGG+baa6/NRx99VDM+YcKEVWp+HKz659/5ihUrct1119VaV5+/vR122CE77LBDfvGLX+Suu+7KwIEDU15e/P+XrlixIsOHD8+sWbMyfPjwtG3btnAtAAAAYO3mBCwAAACAAn784x/n5ptvzssvv5xu3brVmvvud7+bsWPH5rvf/W523XXXTJ8+veYUo1KorKzMnnvumSFDhmTu3LkZN25ctthiixx//PFJ/hFA+sUvfpG+ffumW7duGTJkSL7yla/kL3/5Sx599NG0bds2kydPLrT3WWedldtuuy19+/bN8OHDU1lZmYkTJ+b111/PXXfdlWbN6v7//w4++OD07NkzZ511Vt54441su+22ufvuu7Nw4cJV1l5yySXp27dvevTokaFDh+bvf/97rrzyylRUVOT888+vWffTn/40Dz/8cL75zW9m2LBh2WabbfLXv/41d9xxR5544om0a9fuU3t68MEH86c//SnLly/P3LlzM23atDzyyCPZZJNNct9996VVq1ZJ/nFa1b777psjjjgi2267bcrLy3PPPfdk7ty5GThw4L/97K1atcqUKVMyePDg7L777nnwwQfzwAMP5Oyzz665WvCb3/xmTjjhhIwZMyYvvPBC/uM//iMtWrTIq6++mjvuuCNXXHFFDjvssDX/g///tWjRIhdeeGFOOOGE7LPPPjnyyCPz+uuv58Ybb8xmm21Wa223bt2yxx57ZOTIkZk/f34qKytz++23Z/ny5bXW1fdv79hjj80Pf/jDJKnT9YMLFy6sOX3sgw8+yOzZs3P33Xfnz3/+cwYOHPiJYTYAAACANSWABQAAAFDAFltskaOPPjoTJ05cZe7cc8/Nu+++mzvvvDO/+tWv0rdv3zz44INp3759SXo5++yz8+KLL2bMmDF5//33s+++++bqq6/Ol770pZo1vXr1yowZM/Kf//mf+dnPfpbFixenY8eO2X333XPCCScU3rtDhw558sknc+aZZ+bKK6/Mhx9+mB122CGTJ0/OgQceWKhms2bNct999+XUU0/NLbfckrKyshxyyCG57LLLstNOO9Va27t370yZMiXnnXdezj333LRo0SLf/OY3c9FFF6Vr1641677yla9k5syZGTVqVCZNmpRFixblK1/5Svr27Vvr77Q65557bpJknXXWSWVlZbbffvuMGzcuQ4YMSZs2bWrWdenSJd/+9rczderU3HzzzSkvL8/WW2+dX/3qVxkwYMC/3ad58+aZMmVKvve97+WMM85ImzZtaj7bP7v22muzyy675Oc//3nOPvvslJeXZ9NNN83RRx+dnj17/tt9VmfYsGFZsWJFLrnkkpxxxhnZfvvtc99992XUqFGrrJ00aVJOOOGEjB07Nu3atcvQoUOz9957Z7/99qu1rj5/e4MGDcqZZ56ZzTffPLvtttsaP/f222/nmGOOSZKst9566dSpU3r06JFrrrlmlX4BAAAA6qqsuugZ6wAAAABAvTnuuONy5513fuJVfQ2tV69eSZLHHnusQfv429/+lk6dOuXcc8/9xFAYAAAAQEOo+xnwAAAAAAANYMKECVmxYkXNaVYAAAAAjYErCAEAAACARm3atGl56aWX8pOf/CT9+/fPpptu2tAtAQAAANQQwAIAAAAAGrXRo0fnySefTM+ePXPllVc2dDsAAAAAtZRVV1dXN3QTAAAAAAAAAAAATVGzhm4AAAAAAAAAAACgqRLAAgAAAAAAAAAAKKi8oRtoDFauXJl33nknbdq0SVlZWUO3AwAAAAAAAAAANLDq6uq8//776dy5c5o1W/05VwJYSd5555106dKlodsAAAAAAAAAAAAamTlz5mSjjTZa7bwAVpI2bdok+ccfq23btg3cDQAAAAAAAAAA0NAWLVqULl261GSLVkcAK6m5drBt27YCWAAAAAAAAAAAQI2Ps0Wrs/rLCQEAAAAAAAAAAPhUAlgAAAAAAAAAAAAFNWgAa/r06Tn44IPTuXPnlJWV5d57711lzaxZs3LIIYekoqIi6667br72ta/lrbfeqpn/8MMPc9JJJ2WDDTbIeuutlwEDBmTu3Lmf46cAAAAAAAAAAADWVg0awFqyZEl23HHHXHXVVZ84/+c//zl77rlntt566zz22GN58cUXM2rUqLRq1apmzWmnnZbJ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R49e7ZrKysrceuutddoXAAAAAAAAAACgPtQ5gJUkhx122CpjgwcP/szNAAAAAAAAAAAANCV1CmCtXLkyEyZMyN1335033ngjZWVl6dq1aw477LAcc8wxKSsrK1WfAAAAAAAAAAAAjU6zNV1YXV2dQw45JN/97nfzl7/8Jdtvv326deuWN998M8cdd1y+9a1vlbJPAAAAAAAAAACARmeNT8CaMGFCpk+fnqlTp2bvvfeuNTdt2rT0798/N910U4499th6bxIAAAAAAAAAAKAxWuMTsG677bacffbZq4SvkmSfffbJWWedlUmTJtVrcwAAAAAAAAAAAI3ZGgewXnzxxey///6rne/bt2/+53/+p16aAgAAAAAAAAAAaArWOIA1f/78dOjQYbXzHTp0yHvvvVcvTQEAAAAAAAAAADQFaxzAWrFiRcrLy1c737x58yxfvrxemgIAAAAAAAAAAGgKVp+o+hfV1dU57rjj0rJly0+cX7p0ab01BQAAAAAAAAAA0BSscQBr8ODB/3bNscce+5maAQAAAAAAAAAAaErWOIB14403lrIPAAAAAAAAAACAJqdZQzcAAAAAAAAAAADQVK3xCViHHnroGq27++67CzcDAAAAAAAAAADQlKxxAKuioqKUfQAAAAAAAAAAADQ5axzAuvHGG0vZBwAAAAAAAAAAQJPTrK4PLFy4MPPnz19lfP78+Vm0aFG9NAUAAAAAAAAAANAU1DmANXDgwNx+++2rjP/qV7/KwIED66UpAAAAAAAAAACApqDOAayZM2dm7733XmW8V69emTlzZr00BQAAAAAAAAAA0BTUOYC1dOnSLF++fJXxZcuW5e9//3u9NAUAAAAAAAAAANAU1DmAtdtuu+W6665bZfzaa6/NLrvsUi9NAQAAAAAAAAAANAXldX3gwgsvTO/evfM///M/2XfffZMkU6dOzTPPPJOHH3643hsEAAAAAAAAAABorOp8AlbPnj0zY8aMbLTRRvnVr36VyZMnZ4sttsiLL76Yb3zjG6XoEQAAAAAAAAAAoFGq8wlYSdK9e/fceuut9d0LABQ29RcHlrT+vt99oKT1AQAAAAAAAGiaCgWwVqxYkXvvvTezZs1KknTr1i2HHHJImjdvXq/NAQAAAAAAAAAANGZ1DmDNnj07Bx54YN5+++1stdVWSZIxY8akS5cueeCBB7L55pvXe5MAAAAAAAAAAACNUbO6PjB8+PBsttlmmTNnTp5//vk8//zzeeutt9K1a9cMHz68FD0CAAAAAAAAAAA0SnU+Aevxxx/PU089lcrKypqxDTbYIGPHjk3Pnj3rtTkAAAAAAAAAAIDGrM4nYLVs2TLvv//+KuOLFy/OOuusUy9NAQAAAAAAAAAANAV1DmAddNBBGTZsWGbOnJnq6upUV1fnqaeeyoknnphDDjmkFD0CAAAAAAAAAAA0SnW+gnD8+PEZPHhwevTokRYtWiRJli9fnkMOOSRXXHFFvTcIAAAAAED963/nb0ta/97Depe0PgAAADQWdQ5gtWvXLr/+9a/z6quv5k9/+lOSZJtttskWW2xR780BAAAAAAAAAAA0ZnUOYH1syy23zJZbblmfvQAAAAAAAAAAADQpaxTAGjFixBoXvPzyyws3AwAAAAAAAAAA0JSsUQDr97//fa33zz//fJYvX56tttoqSfLKK6+kefPm2WWXXeq/QwAAAAAAAAAAgEZqjQJYjz76aM2/L7/88rRp0yYTJ07M+uuvnyR57733MmTIkHzjG98oTZcAAAAAAAAAAACNULO6PnDZZZdlzJgxNeGrJFl//fVz4YUX5rLLLqvX5gAAAAAAAAAAABqzOgewFi1alHfffXeV8XfffTfvv/9+vTQFAAAAAAAAAADQFNQ5gPWtb30rQ4YMyd1335233347b7/9du66664MHTo0hx56aCl6BAAAAAAAAAAAaJTK6/rAtddemx/+8Ic56qijsmzZsn8UKS/P0KFDc8kll9R7gwAAAAAAAAAAAI1VnQNYX/rSl3L11VfnkksuyZ///Ockyeabb55111233psDAAAAAAAAAABozOocwPrYuuuumx122KE+ewEAAAAAAAAAAGhSmjV0AwAAAAAAAAAAAE2VABYAAAAAAAAAAEBBAlgAAAAAAAAAAAAFrVEAa+edd857772XJBk9enQ++OCDkjYFAAAAAAAAAADQFKxRAGvWrFlZsmRJkuSCCy7I4sWLS9oUAAAAAAAAAABAU1C+Jou6d++eIUOGZM8990x1dXUuvfTSrLfeep+49txzz63XBgEAAAAAAAAAABqrNQpgTZgwIeedd17uv//+lJWV5cEHH0x5+aqPlpWVCWABAAAAAAAAAABrjTUKYG211Va5/fbbkyTNmjXL1KlT0759+5I2BgAAAAAAAAAA0NitUQDrn61cubIUfQAAAAAAAAAAADQ5dQ5gJcmf//znjBs3LrNmzUqSbLvttvnBD36QzTffvF6bAwAAAAAAAAAAaMya1fWBhx56KNtuu22efvrp7LDDDtlhhx0yc+bMdOvWLY888kgpegQAAAAAAAAAAGiU6nwC1llnnZXTTjstY8eOXWX8zDPPzH777VdvzQEAqzf5l31LvsfB33mw5HsAAAAAAAAANGV1PgFr1qxZGTp06Crj3/nOd/LSSy/VS1MAAAAAAAAAAABNQZ0DWBtuuGFeeOGFVcZfeOGFtG/fvj56AgAAAAAAAAAAaBLqfAXh8ccfn2HDhuW1117L17/+9STJ7373u1x00UUZMWJEvTa3YsWKnH/++bnllltSVVWVzp0757jjjss555yTsrKyJEl1dXXOO++8XH/99VmwYEF69uyZa665JltuuWW99gIA0BB+OfE/Sr7HdwY/XPI9AAAAAAAA4IuqzgGsUaNGpU2bNrnssssycuTIJEnnzp1z/vnnZ/jw4fXa3EUXXZRrrrkmEydOTLdu3fLss89myJAhqaioqNnr4osvzvjx4zNx4sR07do1o0aNSp8+ffLSSy+lVatW9doPAAAAAAAAAADAP6tzAKusrCynnXZaTjvttLz//vtJkjZt2tR7Y0ny5JNPpl+/fjnwwAOTJJtuumluu+22PP3000n+cfrVuHHjcs4556Rfv35JkptuuikdOnTIvffem4EDB5akLwAAAAAAAAAAgCRp9lkebtOmTcnCV0ny9a9/PVOnTs0rr7ySJPmf//mfPPHEE+nbt2+S5PXXX09VVVV69+5d80xFRUV23333zJgxY7V1ly5dmkWLFtV6AQAAAAAAAAAA1FWdT8D6PJ111llZtGhRtt566zRv3jwrVqzIT37ykwwaNChJUlVVlSTp0KFDrec6dOhQM/dJxowZkwsuuKB0jQMAAAAAAAAAAGuFz3QCVqn96le/yqRJk3Lrrbfm+eefz8SJE3PppZdm4sSJn6nuyJEjs3DhwprXnDlz6qljAAAAAAAAAABgbdKoT8A644wzctZZZ2XgwIFJku233z5vvvlmxowZk8GDB6djx45Jkrlz56ZTp041z82dOzfdu3dfbd2WLVumZcuWJe0dAAAAAAAAAAD44qvTCVjLli3Lvvvum1dffbVU/dTywQcfpFmz2i02b948K1euTJJ07do1HTt2zNSpU2vmFy1alJkzZ6ZHjx6fS48AAAAAAAAAAMDaq04nYLVo0SIvvvhiqXpZxcEHH5yf/OQn2XjjjdOtW7f8/ve/z+WXX57vfOc7SZKysrKceuqpufDCC7Pllluma9euGTVqVDp37pz+/ft/bn0CAAAAAAAAAABrpzpfQXj00UfnhhtuyNixY0vRTy1XXnllRo0ale9///uZN29eOnfunBNOOCHnnntuzZof/ehHWbJkSYYNG5YFCxZkzz33zJQpU9KqVauS9wcAAAAAAAAAAKzd6hzAWr58eX75y1/mt7/9bXbZZZesu+66teYvv/zyemuuTZs2GTduXMaNG7faNWVlZRk9enRGjx5db/sCAAAAAAAAAACsiToHsP7whz9k5513TpK88sortebKysrqpysAAAAAAAAAAIAmoM4BrEcffbQUfQAAAAAAAAAAADQ5zYo+OHv27Dz00EP5+9//niSprq6ut6YAAAAAAAAAAACagjqfgPV///d/OeKII/Loo4+mrKwsr776ajbbbLMMHTo066+/fi677LJS9AkAAAAAfMEdfOe9Jd9j8mH9S74HAAAAsHap8wlYp512Wlq0aJG33norX/rSl2rGjzzyyEyZMqVemwMAAAAAAAAAAGjM6nwC1sMPP5yHHnooG220Ua3xLbfcMm+++Wa9NQYAAAAAAAAAANDY1fkErCVLltQ6+epj8+fPT8uWLeulKQAAAAAAAAAAgKagzgGsb3zjG7nppptq3peVlWXlypW5+OKLs/fee9drcwAAAAAAAAAAAI1Zna8gvPjii7Pvvvvm2WefzUcffZQf/ehH+eMf/5j58+fnd7/7XSl6BAAAAAAAAAAAaJTqfALWdtttl1deeSV77rln+vXrlyVLluTQQw/N73//+2y++eal6BEAAAAAAAAAAKBRqvMJWElSUVGRH//4x/XdCwAAAAAAAAAAQJNSKID13nvv5YYbbsisWbOSJNtuu22GDBmSysrKem0OAAAAAAAAAACgMavzFYTTp0/PpptumvHjx+e9997Le++9l/Hjx6dr166ZPn16KXoEAAAAAAAAAABolOp8AtZJJ52UI488Mtdcc02aN2+eJFmxYkW+//3v56STTsr//u//1nuTAAAAAAAAAAAAjVGdT8CaPXt2Tj/99JrwVZI0b948I0aMyOzZs+u1OQAAAAAAAAAAgMaszgGsnXfeObNmzVplfNasWdlxxx3rpSkAAAAAAAAAAICmYI2uIHzxxRdr/j18+PD84Ac/yOzZs7PHHnskSZ566qlcddVVGTt2bGm6BAAAAAAAAAAAaITWKIDVvXv3lJWVpbq6umbsRz/60SrrjjrqqBx55JH11x0AAAAAAAAAAEAjtkYBrNdff73UfQAAAAAAAAAAADQ5axTA2mSTTUrdBwAAAAAAAAAAQJOzRgGsf/XOO+/kiSeeyLx587Jy5cpac8OHD6+XxgAAAAAAAAAAABq7OgewJkyYkBNOOCHrrLNONthgg5SVldXMlZWVCWABAAAAAAAAAABrjToHsEaNGpVzzz03I0eOTLNmzUrREwAAAAAAAAAAQJNQ5wDWBx98kIEDBwpfAQAAAAAAAADAWmreVb8uaf32J/Uraf36VOcU1dChQ3PHHXeUohcAAAAAAAAAAIAmpc4nYI0ZMyYHHXRQpkyZku233z4tWrSoNX/55ZfXW3MAAAAAAAAAAACNWaEA1kMPPZStttoqSVJWVlYz98//BgAAAAAAAIDG7M/jq0q+x+bDO5Z8DwAaVp0DWJdddll++ctf5rjjjitBOwAAAAAAAAAAAE1Hs7o+0LJly/Ts2bMUvQAAAAAAAAAAADQpdQ5g/eAHP8iVV15Zil4AAAAAAAAAAACalDpfQfj0009n2rRpuf/++9OtW7e0aNGi1vzdd99db80BAAAAAAAAAAA0ZnUOYLVr1y6HHnpoKXoBAAAAAAAAAABoUuocwLrxxhtL0QcAAAAAAAAAAECT06yhGwAAAAAAAAAAAGiq6nwCVteuXVNWVrba+ddee+0zNQQAAAAAAAAAANBU1DmAdeqpp9Z6v2zZsvz+97/PlClTcsYZZ9RXXwAAAAAAAAAAAI1enQNYP/jBDz5x/Kqrrsqzzz77mRsCAAAAAAAAAABoKprVV6G+ffvmrrvuqq9yAAAAAAAAAAAAjV69BbDuvPPOVFZW1lc5AAAAAAAAAACARq/OVxDutNNOKSsrq3lfXV2dqqqqvPvuu7n66qvrtTkAAAAAAAAAAIDGrM4BrP79+9d636xZs2y44Ybp1atXtt566/rqCwAAAAAAAAAAoNGrcwDrvPPOK0UfAAAAAAAAAAAATU6zhm4AAAAAAAAAAACgqVrjE7CaNWuWsrKyT11TVlaW5cuXf+amAAAAAAAAAAAAmoI1DmDdc889q52bMWNGxo8fn5UrV9ZLUwAAAAAAAAAAAE3BGgew+vXrt8rYyy+/nLPOOiuTJ0/OoEGDMnr06HptDgAAAAAAAAAAoDFrVuShd955J8cff3y23377LF++PC+88EImTpyYTTbZpL77AwAAAAAAAAAAaLTqFMBauHBhzjzzzGyxxRb54x//mKlTp2by5MnZbrvtStUfAAAAAAAAAABAo7XGVxBefPHFueiii9KxY8fcdtttn3glIQAAAAAAAAAAwNpkjQNYZ511Vlq3bp0tttgiEydOzMSJEz9x3d13311vzQEAAAAAAAAAADRmaxzAOvbYY1NWVlbKXgAAAAAAAAAAAJqUNQ5gTZgwoYRtAAAAAAAAAAAAND3NGroBAAAAAAAAAACApkoACwAAAAAAAAAAoCABLAAAAAAAAAAAgIIafQDrL3/5S44++uhssMEGad26dbbffvs8++yzNfPV1dU599xz06lTp7Ru3Tq9e/fOq6++2oAdAwAAAAAAAAAAa4vyhm7g07z33nvp2bNn9t577zz44IPZcMMN8+qrr2b99devWXPxxRdn/PjxmThxYrp27ZpRo0alT58+eemll9KqVasG7B4AAIC11QH3XFDS+r/51nklrQ8AAAAAwJpr1AGsiy66KF26dMmNN95YM9a1a9eaf1dXV2fcuHE555xz0q9fvyTJTTfdlA4dOuTee+/NwIEDP/eeAQAAAAAAAACAtUejvoLwvvvuy6677prDDz887du3z0477ZTrr7++Zv71119PVVVVevfuXTNWUVGR3XffPTNmzFht3aVLl2bRokW1XgAAAAAAAAAAAHXVqE/Aeu2113LNNddkxIgROfvss/PMM89k+PDhWWeddTJ48OBUVVUlSTp06FDruQ4dOtTMfZIxY8bkggtKex0EAABAY9L318eUtP6D/W4uaX0AAADWTtNufbfke+xz1IYl3wMA+GJr1CdgrVy5MjvvvHN++tOfZqeddsqwYcNy/PHH59prr/1MdUeOHJmFCxfWvObMmVNPHQMAAAAAAAAAAGuTRh3A6tSpU7bddttaY9tss03eeuutJEnHjh2TJHPnzq21Zu7cuTVzn6Rly5Zp27ZtrRcAAAAAAAAAAEBdNeoAVs+ePfPyyy/XGnvllVeyySabJEm6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3t44ffp0g7efPn0arVu3tvt3fH194evb8CU9Q0NDm/R1BAcHm/7g9HSbY2b7Ru16st0cx+zJNsfM9o3a9WS7OY7Zk22OuXm0m+OYPdnmmNm+UbuebDfHMXuyzTGzfaN2PdnmmNm+UbuebDfHMXuyzTGzfaN2PdlujmP2ZJtjZvtG7XqyzTG7JiQkRPNjvNz6zNcRq9WKnj17YuPGjba31dbWYuPGjQ1+JSEREREREREREREREREREREREZHRfvOvgAUA06dPx7hx49CrVy/06dMHb775Jq5cuYIJEyZ4+ksjIiIiIiIiIiIiIiIiIiIiIqIb2A1xA9b999+Ps2fP4plnnkFJSQluu+02ZGVlISoqSnnb19cXc+bMueZXGprBU22O2VzNsc0xm6s5tjlmczXHNsdsrubY5pjNxTE3jzbHbK7m2OaYzdUc2xyzuZpjm2M2F8fcPNocs7maY5tjNldzbHPM5mqObY7ZXM2xzTGb60Yfs0VERGmBiIiIiIiIiIiIiIiIiIiIiIjoBuXl6S+AiIiIiIiIiIiIiIiIiIiIiIjot4o3YBEREREREREREREREREREREREbmJN2ARERERERERERERERERERERERG5iTdgERERERERERERERERERERERERuYk3YLlp27ZtGDp0KKKjo2GxWPDFF1+Y0n3ppZfQu3dv3HTTTYiMjMS9996LAwcOmNJ+7733cOuttyI4OBjBwcFISkrC2rVrTWnXN2/ePFgsFjz22GPKW88++ywsFkuDPwkJCcq7dU6ePIkHHngArVq1gr+/P7p3747c3Fylzfbt218zZovFgvT0dKVdAKipqcHs2bPRoUMH+Pv74+abb8YLL7wAEVHevnz5Mh577DHExcXB398f/fr1w86dOw3vaM0dIoJnnnkGbdq0gb+/P5KTk1FYWGhKe+XKlUhJSUGrVq1gsViwZ88e5d3q6mrMmDED3bt3R2BgIKKjo/Hggw/i1KlTytvAr8d4QkICAgMD0bJlSyQnJyMnJ8eUdn1TpkyBxWLBm2++qbw7fvz4a47v1NTUJnf1tAGgoKAAw4YNQ0hICAIDA9G7d2/8/PPPSrv25jSLxYJXXnmlSV097bKyMkydOhUxMTHw9/fH7373OyxatEh59/Tp0xg/fjyio6MREBCA1NRUw+YSPdciFRUVSE9PR6tWrRAUFIT7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broJQUFBCAoKQlhYGCoqKnDo0CHbx3Xv3v2azzl58mSsWLECFRUVqKqqwj//+U9MnDjR9cHYUTe+upvCiIiIiIiIiIjot4WvgEVERERERERERNeljh07wmKxoKCgAMOHD7/m/QUFBYiIiEBoaCiAX29ganyzVnV1te2/y8rK0LNnTyxfvvyazxUREWH778DAwGveP3ToUPj6+mLVqlWwWq2orq7Gf/7nf7o7tGvGAQAdOnQw5PMREREREREREZG5eAMWERERERERERFdl1q1aoVBgwbh3Xffxd/+9jf4+/vb3ldSUoLly5cjPT3d9raIiAgUFxfb/r+wsBDl5eW2/+/RowcyMzMRGRmJ4OBgl76WFi1aYNy4ccjIyIDVasUf//jHBl+Pu2pra/H222+jQ4cOuP3225v8+YiIiIiIiIiIyHz8FYRERERERERERHTdWrhwISorKzF48GBs27YNx48fR1ZWFgYNGoTOnTvjmWeesX3s3XffjYULFyIvLw+5ubmYMmUKfHx8bO8fM2YMwsPDkZaWhu+++w5HjhzBli1b8Oijj+LEiROaX8uf//xnbNq0CVlZWW7/+sFz586hpKQEhw8fxurVq5GcnIwdO3Zg6dKl8Pb2dutzEhERERERERGRZ/EGLCIiIiIiIiIium516tQJO3fuRHx8PEaNGoW4uDgMGTIEnTt3xvbt2xEUFGT72Ndeew3t2rXDH/7wB4wePRqPP/44AgICbO8PCAjAtm3bEBsbixEjRqBr166YNGkSKioqdL0iVqdOndCvXz8kJCSgb9++bo0nOTkZbdq0Qffu3TFz5kx07doV+fn5+Ld/+ze3Ph8REREREREREXmeRUTE018EERERERERERGRXnPmzMHrr7+O9evX4/e//71pXRFBp06d8Mgjj2D69OmmdYmIiIiIiIiI6PrWwtNfABERERERERERkSuee+45tG/fHj/88AP69OkDLy/1L/J+9uxZfPrppygpKcGECROU94iIiIiIiIiI6LeDr4BFRERERERERESkwWKxIDw8HG+99RZGjx7t6S+HiIiIiIiIiIiuI3wFLCIiIiIiIiIiIg38GUYiIiIiIiIiInJE/euzExERERERERERERERERERERER3aB4AxYREREREREREREREREREREREZGbeAMWERERERERERERERERERERERGRm3gDFhERERERERERERERERERERERkZt4AxYREREREREREREREREREREREZGbeAMWERERERERERERERERERERERGRm3gDFhERERERERERERERERERERERkZt4AxYREREREREREREREREREREREZGb/h9HETvxevFzNAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 3000x700 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import plotly\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "df = pd.read_csv('data/cisi-csv/rels.csv')\n",
    "\n",
    "# Count the number of docID's for each queryID\n",
    "query_doc_count = df.groupby('queryID').size()\n",
    "\n",
    "# Reset index to convert the series to a dataframe for plotting\n",
    "query_doc_count = query_doc_count.reset_index(name='doc_count')\n",
    "\n",
    "# Plot the number of docID's for each queryID\n",
    "plt.figure(figsize=(30, 7))\n",
    "sns.barplot(data=query_doc_count, x='queryID', y='doc_count', )\n",
    "plt.title('Number of docIDs per queryID')\n",
    "plt.xlabel('Query ID')\n",
    "plt.ylabel('Number of docIDs')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count     76.000000\n",
       "mean      40.973684\n",
       "std       36.171434\n",
       "min        1.000000\n",
       "25%       13.000000\n",
       "50%       30.500000\n",
       "75%       52.250000\n",
       "max      155.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "query_doc_count = df.groupby('queryID').size()\n",
    "query_doc_count.describe()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.11.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}