Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save vi3k6i5/61fd49b17d093805d21b603b416410b8 to your computer and use it in GitHub Desktop.
Save vi3k6i5/61fd49b17d093805d21b603b416410b8 to your computer and use it in GitHub Desktop.
Find and replace FlashText and regex comparison
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# pip install flashtext"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from flashtext.keyword import KeywordProcessor\n",
"import random\n",
"import string\n",
"import re\n",
"import time"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def get_word_of_length(str_length):\n",
" \"\"\"\n",
" generate a radom word of given length\n",
" \"\"\"\n",
" return ''.join(random.choice(string.ascii_lowercase) for _ in range(str_length))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'jfyzq'"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"get_word_of_length(5)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# generate a list of 100K words\n",
"all_words = [get_word_of_length(random.choice([3,4,5,6,7,8])) for i in range(100000)]"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"1000\n",
"2000\n",
"3000\n",
"4000\n",
"5000\n",
"6000\n",
"7000\n",
"8000\n",
"9000\n",
"10000\n",
"11000\n",
"12000\n",
"13000\n",
"14000\n",
"15000\n",
"16000\n",
"17000\n",
"18000\n",
"19000\n",
"20000\n",
"21000\n",
"22000\n",
"23000\n",
"24000\n",
"25000\n",
"26000\n",
"27000\n",
"28000\n",
"29000\n",
"30000\n",
"31000\n",
"32000\n",
"33000\n",
"34000\n",
"35000\n",
"36000\n",
"37000\n",
"38000\n",
"39000\n",
"40000\n",
"41000\n",
"42000\n",
"43000\n",
"44000\n",
"45000\n",
"46000\n",
"47000\n",
"48000\n",
"49000\n"
]
}
],
"source": [
"string_length_to_time_map = []\n",
"\n",
"for keywords_length in range(0, 50000, 1000):\n",
" print(keywords_length, flush=True)\n",
" # randomly generate words with different lengths from list [3,4,5,6,7,8]\n",
" # no of words generated = keywords_length\n",
" all_words_chosen = random.sample(all_words, 1000)\n",
" story = ' '.join(all_words_chosen)\n",
" \n",
" # get unique keywords from the list of words generated.\n",
" unique_keywords_sublist = list(set(random.sample(all_words, keywords_length)))\n",
" \n",
" # compile regex\n",
" # compiled_re = re.compile('|'.join([r'\\b' + keyword + r'\\b' for keyword in unique_keywords_sublist]))\n",
"\n",
" # add keywords to flashtext\n",
" keyword_processor = KeywordProcessor()\n",
" for keyword in unique_keywords_sublist:\n",
" keyword_processor.add_keyword(keyword, 'keyword')\n",
" \n",
" # time the modules now\n",
" start = time.time()\n",
" _ = keyword_processor.replace_keywords(story)\n",
" mid = time.time()\n",
" for keyword in unique_keywords_sublist:\n",
" story = re.sub(r'\\b' + keyword + r'\\b', 'keyword', story)\n",
" end = time.time()\n",
" \n",
" # add results to dictionary\n",
" string_length_to_time_map.append((len(unique_keywords_sublist), mid - start, end - mid))"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# string length list\n",
"counts = [v[0] for v in string_length_to_time_map]\n",
"# time taken for flashtext\n",
"time_flash_text = [v[1] for v in string_length_to_time_map]\n",
"# time taken by regex\n",
"time_regex = [v[2] for v in string_length_to_time_map]"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x1088817b8>"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAEICAYAAABBBrPDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXd4XPWV//8+U6UpajNykWRZcgNXZGwMNuBASAgteBdY\naiCdJYEN+SXfzYZkN1uyJFmSPEkgJKaETVg6GGdpCYQllARTbGMbG3BXtSSrzow0febz++PeO7oa\nzdy5UzW2z+t5/Fi6c8tnRtI997T3ISEEGIZhGCYdhuleAMMwDFPesKFgGIZhNGFDwTAMw2jChoJh\nGIbRhA0FwzAMowkbCoZhGEYTNhRMySGiSiJ6log8RPRkitf/jYgemo61FQIi+i0R/ed0r0OBiPYQ\n0TklutYSItpKRFSk8/+UiL5SjHMz6WFDwQAAiKidiI4SkV217UtE9GoRLncFgJkAXEKIvyvC+U9Y\nUhkpIcRSIcSrJVrC9wH8RBSvQesnAL5DRJYinZ9JARsKRo0RwK0luM5cAPuEENESXKtoEJFputdQ\nThDRbADnAvh9sa4hhOgF8BGAS4t1DWYqbCgYNT8G8P+IqCbVi0S0jojelUNG7xLRunQnIqLFRPQq\nEY3KoY9L5e3/DuB7AK4iojEi+qLWgojITESPEtEmIrIQkYGIvk1EB4loiIieIKI6ed/niegfko7f\nRUR/S0T/TkR3qc45TkQ/lr+vJKKg6jyXymseld/DYtX52onon4hoF4BxIjIR0Uoi2k5EPiJ6HECF\nan83ET0nn2uYiN4goil/d0T0ayL6SdK2/yWib8hf/xMR9cjX2EtE56U4x40ArgPwLfmzfVa15k/I\nX/8bET1JRA/J53qfiBYR0W2yR9lFROerzllNRL8hol75+v9JRMY0P65PAtguhAiqjk+5bq2fo/z6\nWUT0pvy5dRHR51TXeRXAxWnWwBQDIQT/438A0A7gEwCeBvCf8rYvAXhV/roOwAiA6wGYAFwjf+9K\ncS4zgAMAvgPAAuDjAHwATpJf/zcAD2ms5d8APASgEsDzAH4LwCi/diuAtwA0AbACuAfAo/JrVwJ4\nW3WeUwAMqdbwvrx9HYCDyr7yazvlrxcBGId00zMD+Jb8Xiyqz2kHgDny+iwAOgD8f/L+VwCIqD7D\nHwLYKL9mBnA2AErxntcD6FJeA1ALIACgAcBJ8msN8mstAOan+ex+q1w7+Wer+myDAD4l/xwfBHAY\nwHfl9X0ZwGHVsZvlz9gOYAaAdwD8fZpr/xjA3arv0647w89xrvz7co28JheANtV5L4NkkKb97+ZE\n+cceBZPM9wD8AxHVJ22/GMB+IcT/CCGiQohHIYUAPp3iHGcAcAD4kRAiLIR4BcBzkP7w9VIF4I+Q\nbuifF0LE5O03AfiuEKJbCBGCdOO7Qg4DPQNgEREtlPe9HsDjQogwgC0AFhKRC9JN+TcAGonIAeBj\nAF6Tj7kKwPNCiD8JISKQYuKVkIyLwp1CiC4hREB+r2YAPxdCRIQQTwF4V7VvBMBsAHPl198Q8t0u\niTcACEiGBJAMzhYhxBEAMUg30yVEZBZCtAshDur/KKdeSwjxopBCf08CqIf0s4oAeAxACxHVENFM\nABcB+LoQYlwIcRTAzwBcnea8NZBu8Apa69b6OV4L4GUhxKPyZzYkhNihOq9PvhZTIthQMJMQQuyG\ndFP/dtJLDZCenNV0AGhMcZoGAF1CiLiOfdNxBoAVkG5g6hvrXACb5ZDEKIAPId2QZgop5PE4gM/I\n4Z1rAPyP/L4CALZCMgrrIRmGNwGcicmGYtL7lN9DV9Lau5Lea0/SGtWf048heSQvEdEhIkr+XJXr\nCEg3acWYXgvgYfm1AwC+DulmepSIHiOihlTn0Um/6usAgEGVIQ7I/zsgfdZmAL2qz/seSJ5FKkYA\nOFXvSWvdaX+OkLw1LUPoBDCq540yhYENBZOKf4UUglDfHI9A+uNW0wygJ8XxRwDMSYrFp9s3HS9B\nCtv8n/xkq9AF4EIhRI3qX4UQQjn37yDF6c8D4BdCbFEd+xqkMNNKSE/9r0EKwawB8Hqq90lEBOnG\npV672ij0QvJM1OWgzYkdhfAJIb4phJgHKQH7jVT5BZlHIT1VzwVwOoBNqvM8IoQ4S16bAPBfac5R\nyGqjLgAhAG7VZ10lhFiaZv9dkEJ3E4tJv26tn2MXgPka61oMYGce74vJEjYUzBTkJ8HHAXxNtfkF\nSGGda+UE7lUAlkDyPpJ5G4AfUlLVTFIN/6chPTFns447ADwCyVi45c0bAdwu30xBRPVEtEF1zBYA\ncQA/hexNqHgNwA0APpDDUa9CysMcFkIMyPs8AeBiIjqPiMwAvgnpZvlmmmVuARAF8DX5vV4GyfBA\nXt8lRLRANiQeSE/N8VQnEkK8B2AQwP0AXhRCjMrnOImIPk5EVkj5hUC6c0DyFualeS0rhFRh9BKA\nnxJRlZyAnk9EH0tzyJ8AnEpEFTrWrfVzfBjAJ4joSvl3zUVEbarrfAzAHwrxHhl9sKFg0vEfkBKY\nAAAhxBCASyDdOIcgJXkvEUIMJh8o34Q/DeBCSDe+XwG4QQjxUbaLEEJ8H1K55ctyVcwvIOUiXiIi\nH6SE6OlJhz0IYDmkhLiaNyHlGxTv4QNINzDlewgh9gL4DIC75LV/GsCn5feUan1hSMnVzwEYhpTj\neFq1y0IALwMYg2RUfiWE+LPGW34EUlHBI6ptVgA/ktfTByn0c1ua438DKScwSkSFKFO9AVLC/gNI\noaWnIOVcpiCE6AfwCgDlhq+17rQ/RyFEJ6TcyDchfaY7IBUmKCW4S1DEElxmKkqFBcMcNxDRDQBu\nlEMeTAkhoiWQwn9r0iTt8z3/TwEcFEL8qtDnZtLDhoI5riAiG6Sn2l8JIR6c7vUwzPEAh56Y4wYi\n+hSAAUhx+kcy7M4wjE7Yo2AYhmE0YY+CYRiG0eS4EDVzu92ipaVlupfBMAxzTLFt27ZBIUSyCsMU\njgtD0dLSgq1bt073MhiGYY4piChZbSElHHpiGIZhNGFDwTAMw2jChoJhGIbR5LjIUaQiEomgu7sb\nwWAw885MRioqKtDU1ASz2TzdS2EYpsQct4aiu7sbTqcTLS0toOLMeT9hEEJgaGgI3d3daG1tne7l\nMAxTYo7b0FMwGITL5WIjUQCICC6Xi70zhjlBOW4NBQA2EgWEP0uGOXE5rg0FwzDMsY4QApu2dSMQ\njmXeuUiwoSgiRqMRbW1tiX/t7e149dVXcckll2R9rvb2dixbtmzK9ptvvhltbW1YsmQJKisrE9d6\n6qmnsr7GAw88gL6+vqyPYximeBwcGMM3n9yJF/dM39/mcZvMLgcqKyuxY8eOSdva29sLeo277747\ncd5LLrlkyvWy4YEHHsCpp56KWbNmFWp5DMPkyag/AgDwBiPTtgb2KKaRd955B2vXrsXKlSuxbt06\n7N27FwCwZ88erFmzBm1tbVixYgX2798PAIjFYvjyl7+MpUuX4vzzz0cgENA8//79+/GpT30Kq1at\nwvr167Fv3z4AwMUXX4xHHpFUuO+++2589rOfxeOPP44dO3bgqquuQltbG8LhlAPdGIYpMYqB8AWj\n07aGE8Kj+Pdn9+CDI96CnnNJQxX+9dPpZsxLBAIBtLVJo35bW1uxefPmSa+ffPLJeOONN2AymfDy\nyy/jO9/5DjZt2oSNGzfi1ltvxXXXXYdwOIxYLIb+/n7s378fjz76KO677z5ceeWV2LRpEz7zmc+k\nvf6NN96I+++/H/Pnz8df//pX3HLLLXjppZdw3333Yf369ZgzZw7uvPNOvP3226ipqcFdd92FX/7y\nl4k1Mwwz/SgGYizEhuK4JFXoSY3H48FnP/tZ7N+/H0SESER6cli7di1uv/12dHd347LLLsPChQsB\nSMZGuYmvWrVKM4w1OjqKt956C5dffnliWzQq/aI1NDTge9/7Hs4991w8++yzqKmpyfetMgxTJLwB\n6b4wxh5Fccn05D9d/Mu//AvOPfdcbN68Ge3t7TjnnHMAANdeey1OP/10PP/887joootwzz33YN68\nebBarYljjUajZuhJCAG3253WUL3//vtwuVw4cuRIQd8TwzCFxVsGHgXnKKYRj8eDxsZGAMBvf/vb\nxPZDhw5h3rx5+NrXvoYNGzZg165dWZ+7trYWs2fPToS74vE4du7cCQDYsmULXnnlFWzfvh0//OEP\n0dnZCQBwOp3w+Xx5viuGYQpJOeQo2FBMI9/61rdw2223YeXKlYmwEAA88cQTWLZsGdra2rB7927c\ncMMNOZ3/sccew8aNG3HKKadg6dKleO655xAIBHDjjTfigQceQGNjI+644w584QtfgBACn//85/Gl\nL32Jk9kMU0Z4A4pHMX1VT8fFzOzVq1eL5MFFH374IRYvXjxNKzo+4c+UYUrPzY9sx/O7erGssQrP\n/cPZBT03EW0TQqzOtB97FAzDMGVMouqJQ08MwzBMKhJVT5zMLg7HQ1itXODPkjnRGR4P46cv7UUk\nFs/rPPG4wNb2Yd37K8lsNhRFoKKiAkNDQ3yDKwDKPIqKiorpXgrDTBv3vXEId71yALu6PXmd582D\nQ7hi4xbs7tF3HiX0FIzE8zZSuaKrj4KILgDwCwBGAPcLIX6U9DrJr18EwA/gc0KI7TqP/SaAnwCo\nF0IMyttuA/BFADEAXxNCvJjtG2tqakJ3dzcGBgayPZRJgTLhjmFORMLROJ7c2gUAGBoL5XWuoz5p\nrkuvJ4hljdUZ9/cGIrCYDAhH4xgPRVFjs+R1/VzIaCiIyAjgbgCfBNAN4F0iekYI8YFqtwsBLJT/\nnQ7g1wBOz3QsEc0BcD6ATtX1lgC4GsBSAA0AXiaiRUKIrDR2zWYzT2NjGKYgvPRBHwbHpJJx5f9c\nUXIOegxOKBpDKBpHi8uG9iE/fMHpMRR6Qk9rABwQQhwSQoQBPAZgQ9I+GwA8KCTeAlBDRLN1HPsz\nAN8CIJLO9ZgQIiSEOAzggHwehmGYaeHhtzrRUC2FXvP1KJRQ0tB4ZoOj7NtQUwlg+vIUegxFI4Au\n1ffd8jY9+6Q9log2AOgRQuzM4XogohuJaCsRbeXwEsMwxeLgwBi2HBrCdWfMhbPChME8DYWSnNZz\nHsX7OBYMRcEhIhuA7wD4Xq7nEELcK4RYLYRYXV9fX7jFMQzDqHj07U6YDIQrV89BvcOKQR2egBZK\np/WwjvMoOk+KNzNdvRR6ktk9AOaovm+St+nZx5xm+3wArQB2yrOYmwBsJ6I1Oq/HMAxTdIKRGJ7a\n3o1PLZ2FeqcVLocFg77CeBRDOnIdvuBkj8JXxh7FuwAWElErEVkgJZqfSdrnGQA3kMQZADxCiN50\nxwoh3hdCzBBCtAghWiCFl04VQvTJ57qaiKxE1AopQf5OId4swzBMNvxhdy9G/RFcd3ozAMDtsOrK\nLWiRXegpKUdRrh6FECJKRLcAeBFSiesDQog9RHST/PpGAC9AKo09AKk89vNax2a43h4iegLABwCi\nAG7OtuKJYZgTj8GxEBxWEyrMxoKd8+G3OtHqtmPtfBcAwOWwYMuhPD2KgP5ktjfhUcihp2kSBtTV\nRyGEeAGSMVBv26j6WgC4We+xKfZpSfr+dgC361kbwzAMAFz+6zdx0fLZ+KcLTi7I+fb2+bC1YwTf\nvWgx5BA53A4rRv0RRGJxmI25pXiVcNLweBjxuIDBQBn3nVlVAaLp8yiO285shmFOHIQQ6B4JoGvY\nr/uYZ3cewc9f3pe22/mRtztgMRpw+aqJRlOXQxoepicRnQ5vMAoiIBYX8AS0PQRvIAoDAQ6rCQ6r\nqaxzFAzDMGXNWCiq68ar5omtXfj5y/tx/W/enpIv8IejeHp7Dy5aPgt19okGt3qH9HWuJbJCCHgD\nETTKOYdM4SdvMAJnhRlEBKfVxB4FwzBMrigGIhtD4Q1GMbPKivc6R3HpXX/Bru7RxGvP7eyFLxTF\ntafPnXSM4lHk2p0diMQQjQu0uu0AMjfv+YJRVFVKGQJHhenE6qNgGIYpJIqBGPXrNxS+YASr59Zh\n01fWgYhwxcYtCT2nh9/uwMIZDpzWUjvpGLdsKHLtzlYS2QlDkcmjCERQVWEGIIWf2FAwDMPkiMef\nvUcxFozCWWHCssZqPPsPZ+G0llr841O78JWHtmFntwfXnt6cSGIruOTQk54eiFQoVUx6PQop9KR4\nFOZpm5vNhoJhmGMexUB4gxHE4/pGC/hkQwEAdXYLfvf5Nbhx/Tz8YXcfKswGXLZyqlqy02qCxWTI\nOUehVDG1uCRDkSmE5QtGEx6Fcxo9Cl3lsQzDMOWMYiiEkG6u1Taz5v6RWByBSAzOion9TEYDvnPR\nYpzeWodwNJ7yHEQEt92Sc45CCT3V2i2otZkzVk95AxFUVapCT+XacMcwDFPuqENOo4FwRkOh3HAd\n1qm3wPMWz9Q81u205uxRKKEnZ4UJLocVQ+OZQk9RVeiJcxQMwzA5M6oyFHryFMoNV7kJZ4PLbsl4\ng0+HogZbVWFGXQbPJBYXGAtFpySz9YbWCgkbCoZhjnkmeRQ6Kp8mnuy1PY9UuB1WDPpyTWZPGCi3\nw6KZzFa8HiX0pBi18XDpvQo2FAzDHPN4AhEoShh6PAqleqgqF49CDhlJykXZ4Q1EYDUZUGE2wmXX\nFhhUh6mAiTDZdISf2FAwDHPM4w1EMLta6nYezcJQOHIwFG6HBZGYSCSms8EbjCY8BJfDktCNSr3v\nRJhKvdbpSGizoWAY5phn1B9Bc50NwEQeQAtFhTXX0BMADOaQp/AGIwkvRunyHvGn9ioUQ5TozJY9\niunQe2JDwTDMMY8nEMGMKisqzUaMprnxqvEF80hmK3pPOQww8gYiCePktms37/mSPAonexQMwzC5\n4wlEUF1pRnWlWVcyOx9DkZDxyEFBVh16qstgKLyJPIpS9ST9zzkKJsHuHg8+7PVO9zIYpuyJxwW8\nQclQ1NjMupLZ3mAEFqMBVlP2Q45ceSjI+gJTQ0/pSm0TpbQqUUCAPQpGxb8+swf//qzmMECGYSDF\n7IUAqivNqKo060pmj6ka2bKlzmYBUW4Kst7gRKe1O2Fw0oWeJjcFTmeOgjuzy5QRfxgofV8Nwxxz\nKIKA1ZVm1FSa0aljeJEvD0NhMhpQa7Pk5FF4VdpNVRVmmAyUtpfCG4zAbjHCJE/SS5THToNHwYai\nTPEFowiGeVQ4w2RCCTVll6OI5FTxpJCpWS4VwUgM4Wg8EUoyGAh1dktavSe1zhMAGA0Em8U4LXOz\nOfRUpviCEfhCUQQjbCwYRgu1odCbo/AFoyl1nvTisluzDj2l6gbXkvFI5fVM10wKNhRlSDgaRzAi\nNeEM5FCCxzAnEglDYZM8ikAkhlBU+wFrLJR76AmQhAGz9SgSfRGq67o1hAGlnovJXo+jwjQtMynY\nUJQhSv00kPtsXoY5URgNSE/kNZUWVNukBHEmr0J6Ws899OTKQWo80WmtCie5HBaN8tjJoSdg+mZS\nsKEoQ9RPDOxRMIw2yTkKYCLBnQ715LhcqHdaMZZlaFitHKvgsqf3TFKGniqmZyYFG4oyRG0och2Q\nwjAnCp6A1BNRYTagRjEUGh5FXJbvzsdQuOzZ91Iof9fVlRPXdTksGA/HUhoc9bxsBc5RMAnUoSf2\nKBhGG6U6iIhQIw8s0qp88kdiECK3rmyFRHd2Fg9yySJ/0nnk7uykyichhNzFnZzMnp652WwoyhDv\nJI+CDQXDaDHqjyQMhBJ60mq68+Uxi0Ihl+5sJZk9uepJMTiTzxOIxBCLiylrdE7TlDs2FGWI8otc\nYTawR8EwGVB0ngApoa1sS0dyx3Mu5OpRmI2ECvPEbVcxOMnnmaiQSh16ymUWRj6woShDFI+i1e1g\nj4JhMqA2FM4KE4gAj4aCrC9pIFAuKIZiICuPQso5ENHEeWSPIvnvfKJCamoyOxYXifL5UsGGogxR\nfpHnue1Z/SIyzImI2lAYDISqCu2muwnl2NxDT5UWI+wWY5YeRXRKuasrTY4iXXhsQu+ptN3ZbCjK\nEF8wCpvFiJlVFTlp3jPMiYTHP2EoAClPoZ2jyH0MqhqXw5pl1VNkyjVtFiMqzIYpMh6pmvOA6ZtJ\nwYaiDPHJHZlup1Q655+GYeoMcywQiwv4QtFJhiKTjEc+Y1DVuB2WtF3VqUjWbgIAIpLlQNKFnlJ7\nFKVOaLOhKEOURpt6ZeSij3spGCYVXlWznUImYcBCVD0BskeRxd+mN41ibarubG+awUrTpSDLhqIM\nUQyF26kkzILTvCKGKU88aQyF1tzssVAUBgLsluyHFqnR0mlKRaoGOkBq3ks+T6oubmDCCyr1TAo2\nFGWIIoGseBQD7FEwTErSGYpMOQqH1TSp+igX3A5JIjwW11eqmkq7CZA8k6keRQQWkwEV5snGzKmM\nQ2WPglFc1Hpn9iV4DHMioRgEpeFO+doTiKTtNfDmOYtCwe2wIi7kIWMZUBShUyXQldCTer2+YDTl\nvolxqOxRMIpHUWeXRy5y5RPDpCSVR1FTaUFM1nNKRT7T7dRk053tS5OcBqReinAsPmm96cJUdqvk\nYbChYORxiSaY5ZGL7FEwTGrShZ7UryWTz7xsNdl0Z3uDqTutgdTd2d5gFM4URsVqMsJiMpRc74kN\nRZkRiirjEqVfknqHlT0KhklDIumrNhQZhAF9oUKFnvR7FMo6UxmoOrvSdDdxnlQ9FwrSTApuuDuh\n8SWVxdU7rexRMEwaRv1hVJgnJ30zeRT5jkFVcCXkN/R4FBqhJ8fU86QLPQHTM5NCl6EgoguIaC8R\nHSCib6d4nYjoTvn1XUR0aqZjiej78r47iOglImqQt7cQUUDevoOINhbijR4rJBsKt8PCek9M0Rkc\nC+Ge1w4irrOCp1xQy3coKIltLUNRiNBTdaUZJgPp9CiyDz0l6zwpTMdMioyGgoiMAO4GcCGAJQCu\nIaIlSbtdCGCh/O9GAL/WceyPhRArhBBtAJ4D8D3V+Q4KIdrkfzfl/O6OQRLNQHIZXL3TigFfqORq\nkcyJxXM7j+CHf/gIu494pnspWZHKUCSkxtOEnsbyHIOqYDAQ6uwWXbOz04n8AarQ09jk0FO6NTqs\npZ+brcejWAPggBDikBAiDOAxABuS9tkA4EEh8RaAGiKarXWsEMKrOt4OgO+EUGvWKx6FFcFIHONh\n/SMXGSZb+rzSTWrPEW+GPcuLlB6FhtR4MBJDOBYviEcBSH+fekJPvhRDixSsJiOcFaaEMGAoGktb\nSgtMz0wKPYaiEUCX6vtueZuefTSPJaLbiagLwHWY7FG0ymGn14jo7FSLIqIbiWgrEW0dGBjQ8TaO\nDZLlBRK9FJzQZopIv1fq/n+/59jyKEb9EVTLhkGhwmyAxWjAaGDqDTw5tJsvUg+EvtCT0UCwpekG\nl7qzw5PWmCqfAZRp6KmYCCG+K4SYA+BhALfIm3sBNMshqW8AeISIqlIce68QYrUQYnV9fX3pFl1k\npuYoUuvVM0whUQzFnmPMUHhTeBREhGpbahmPQsyiUFOv06OQmvzSd4NL3dkheY3axqxck9k9AOao\nvm+St+nZR8+xgGQoLgcAIURICDEkf70NwEEAi3Ss87gguTqCPQqmFPTJhuLDPh8isdIOxcmHVKEn\nIL0woPIkruQA88UlF5tkyiFqVTEBskchG5x0Ok8KDqu5LLWe3gWwkIhaicgC4GoAzyTt8wyAG+Tq\npzMAeIQQvVrHEtFC1fEbAHwkb6+Xk+AgonmQEuSHcn6HxxjJYxrZo2BKQb8nCLfDinA0jgNHx6Z7\nObqIxKTcXSpDUVOZWmq80KEnt8OKUDRzDlGrigmQPQq5j0KrlBYAHFYjwtE4QtHS5S0zGgohRBRS\nWOhFAB8CeEIIsYeIbiIipSLpBUg38wMA7gPwVa1j5WN+RES7iWgXgPMB3CpvXw9gFxHtAPAUgJuE\nEMP5v9VjA6XG22iQXNQ6uwUGYo+CKR5joSjGwzF8/GQphLv7GAk/eVPoPCmk8yiU0FO+sygUXIlR\nANp/n5k8CkVgMB4XmUNP8kPkeKh0hkLXpyWEeAGSMVBv26j6WgC4We+x8vbL0+y/CcAmPes6HvHJ\nsUwFo4FQl2KwCcMUij6PFHY6Y54Lz+3qxZ4jXvzdNK9JD6Mp5DsUqm1mfNTnm7JdS0ojF9yOia7q\nFrc97X6+YBStGq+77BbEhfSeMoaeKiYUZJXS2mLDndllhjfJUAATvRQMUwyURPbs6kosbag6ZjyK\nVDpPCjWVlpShp7EihJ6AzKMAJInx9NesS+hGhXSEnko/N5sNRZnhS9EM5HZYMJDFEHeGyQbFo5hV\nXYGlDdXYc8Sre8bCdOJJofOkUF1pxlgoOiUxr4R17AWQ8ABUwoAZBhh5A9r6Um67ohsVhi+oPVhp\nOuZms6EoM1LJC9Q7WRiQKR79PslQzKyyYlljNQKRGA4Pln9CWytHoWxLLpH1BSOoNBthNhbm1qeE\nfrRGokblpLtm1ZPK4ChGJV0p7XTMzWZDUWZIqpGTf6HqHZIwIMt4MMWg3xOEs8IEm8WEZY1Sy9Lu\nnvLv0FaS1enKYwFMmXRXKJ0nBYvJgOpKs6ZHMdFAp1X1NKH3lKlCajqGF7GhKDPSeRThaDyRiGOY\nQtLnDWJWVQUAYEG9A1aT4ZjIU2jlKKrTCAOOhQprKICJXop0eDXkOxRqbdKQsqHxsFTQotHn4WSP\ngkmdo+BeCqZ49HtDmFUtGQqT0YDFs6uOCXFATyACmyV1GCkhNZ5UIusNRhJVQ4Uik95TJkkOQK5u\ntElyIN6ATo+CcxQnJukEy7g7mykm/d4gZjgrEt8va6zCnh5v2UuOewIR1KS5+dakmUmRbhZ1PmQa\nBTBR7qp93Tq5O9ubIvysptJshIHYozhhmXBRJ/9CTZTgsaFgJvPoO5341lM7cz4+Fhc46gthVrU1\nsW1ZQzV8oSi6RvyFWGLRGPVH0j6lT0iNT37ST+5TKgRuh1VzHKo3SegzHS6HBUPjoZRRBTVEVHKp\ncTYUZcRER2ZSMtvJoScmNX/c3Yffv3ck53LWofEQYnGRyFEAwLLGagDlrySbShBQYWLK3eSb6Vgo\nWjCdJwUi/anQAAAgAElEQVSX3QpPIIJwNLVGVmJokUY4CVCEAcNSF3eGfZ0VZvYoTlTSte7XVJph\nNBB7FMwUOof9CMfiCVG/bOn3SL9TM1SGYuFMB8xGKvvKp3SCgICUa3FYTVOkxn3BaMHkOxTcTqli\naXg8tVeRqYEucR67BQO+EHyhaMbOcYe1tAqybCjKCF+aXyiDgUo+EvXKjVvw3389XLLrMdkTiwt0\ny+GhjqHxnM6hGBi1R2E1GbFophN7yjyh7QlEUvZQKFQnCQNGY3H4w7HCVz3ZtT1+byACIsBhyexR\nKKqwmdboKPHwIjYUZYSWGJjbUToZj3A0jnfah7Gja7Qk12Nyo9cTQCQmhZw6h3LLJyQMRXXFpO3L\nG6uxu8dT1r07Wh4FIDXdqaueEhLjBa56qncqXdVpDEUwCqfVBIMhdQOdglq3KZP34bCaSio1zoai\njEiebqem3qlvQEohULR/tBJ0zPSjNg4dw7kZiqPeIAwkidKpWdpYjRF/BEc8uYW0ik0oGkMgklpi\nXCHZoyi0xLjChEeRPvSU6cYPTAgMAplFC6XhRaz1dEJSLh6FYig4eV7eKMbBbjHmHnryBFHvtMKU\n1IuwrEHp0C7P8JNWs51Cjc08qTM78fdVIJ0nBaXYpGckkPJ1b0C7iklBkfEAMpfSOks8DpUNRQH5\nxhM78L87Ug3w04dWLLPeKQ02KUVte6/8FDmUJjnHlAcdQ36YjYRT59aiI4/Qkzo/obB4dhWMBirb\n0ahKb0K1Lb3MdvJMCi2PPR/sVhNOnuXEu+2px+ZIfRGZjZMry9ATJ7OPQULRGDa/14OXPujP+Rze\nYBQOS+pYptthRSQmUkonFxrFo1AGqTDlSefwOObU2jDPbUfnkD+nfMJRb2hSxZNChdmIBfWOsi2R\n1eNRVFda4A1EEp9LsUJPgDTLY2vHcMqpc1K5a7YeRebQ03g4VjKVXzYUBaJ3NAgh0rufevAFo2l/\noUrZS6HITsfipTFMTG50Dvsxp86GZpcdvlAUIykmumUinUcBAEsbq7D7SHmWyGoJAipUV5oRjsUR\niEg37zGdFUW5sHa+C8FIHLu6pxpWqRs8s6GoqjDBbCRda0xMuQuXxqtgQ1EglC7WntF8DEX6rlEl\n0VWKPEWvqiY/k85+JgLhGC795V/w9qGhfJfFqBBCoGPIj7kuG+bW2QBkXyIbjMTgCUSmVDwpLG+s\nxoAvhKM59mgUE705CvW+hR6Dqub01joQAVsOTv09zzS0SIGIEpVPmQxFqWdSsKEoEN2yJzHgCyEY\nyW2WrZYE8gxF76kEHkW/JwiTHP7Kt9Lq4MAYdnV78Mb+wUIsjZEZ9UfgC0bRXGfDXJdiKLLLUygh\nxplpPAqlQ7scBQKVm386rSdALeMh7VvoMahqamwWLJ5VNcVQxOMCYzoa6BRcdivsFuOU4oJkHHJ3\neakS2mwoCkSXqjyxN8eSQl8o/RSsUuo99XqCWDjTCSD/EtlO+XM5nGNVzrHA7h4PDg6UdtCPUvE0\n12XHnLrcDIUSYpxZZU35+uLZVSAqz9kUWtPtFJKFAX3BKMxGgtVUnNve2vkubOscmfSg6AtFIYT+\ncJfLYdGVbFe8olLpPbGhKBDdqtxErnkKLY+iutIMs5GK3ksRjwsc9QWxVC6PHM4z9KQYivbB49dQ\nfP3xHbj54e0lbU5TPtfmOhsqzEbMrq5Ax3B2n3Gqrmw1DqsJrW57WZbIjvojcFpNMGo0sVUleRRj\nIe3JcflyxjwXwtH4pEZVrw6DpmbtfBfWzXdl3K/UU+4KH6w7Qeka8aO5zobOYT96RnMrVZRGIKb+\nkRCRNOmuyB7F0HgYkZhIPE3ma5iUG1qHXJVTrD/SdMTiArG4gKVIT5GRWBztg+OIxgW2d45i1dza\nolwnmU7ZQ2uWvYnmOlvW3dmJ0FOaHAUgKclu6xjJcZXFQ08lUfI4VF8wmrjBFoM1rXUwyHmKM+ZJ\nN3s9Q4vUfPWcBbr24xzFMUr3SACrW2phoNw8CiFERnlht9Na9Kon5ebRWFOJWpsl72S2cvMaC0VL\n1lmu5ocvfIi//dVfi3b+rmE/onKJ4iNvdxbtOsl0DPkxw2lFpcUIAJjrsqE9a0MRQqXZqNmAtryx\nGj2jgbJrvsyk8wSox6FKv3eFHoOa6npLG6qxRVW4oVc5NlsmPIrSVCWyoSgAwUgMA74QWl12zKyq\nQHcOlU/BSBzRuNB88iiFR6HkV2ZXV8AlD1LJh85hf+IPtn0a8hSv7RvAniPeKZPOCsWhAek9LW2o\nwnO7jhTtOsl0DPsTSWxAylUMjoUwnkUoos8bxKzqCk0v74x5LhABX31oe8nemx4y6TwB0s3UaKBJ\nVU/FNBQAcMa8OuzoHE3kKXxZehR64RzFMYiSn5hTZ0NjTWVOHsVE12j6X2Rp5GJxDYVaJM7lyM9Q\nRGNx9IwGcNZCN4DS5yl8wQgOyEnmYlXuHBqUzv+dixYjFI1j83vdRblOMl1yD4WCEoLqzELzqd8T\nTJvIVljeVI27rlmJHV2juPKeLej15F7+nQ3xuMArH/XjX/93N4ZS/M7rMRREhBpVd7YUeip8xZOa\ntfNdCMfi2C6H65RKq0xrzRa7pbQ5CjYUBUDpoWiqrURjbWVOvRReHV2jkoxHcbul+zwBGA0Et8MK\nl92KwTxCT72eIGJxgXXzXTAaqOQexa5uD5T8crESsocHx+GyW3DmAjdWNFXjkXc6i57UDkZi6PMG\nMbfOntjW4pK+zqbyqd8XTFsaq+aSFQ347edPQ89oAJf/6k0cOOrLftE6CUfjeGpbNy74xev4wm+3\n4ndbOnDTQ9umdDyP6jAUgCzjocpRFHoMajKntdTBaKBE+EnJjxTakzEaCHaLkXMUxxLJHkWffIPM\nBj0uqtthQSwuMOIvXqy/zxPCDKcVRgPl7VEoN615bgfm1FaifbC0ozWV6pM6u6VoHcYHB8bR6pZu\n0teuaca+/jFs7yxu8rd7xA8hMCn01OxSPAp9xlgIgX5vKG3FUzLrFrjx+N+fgUhc4PJfb8G2jtS6\nRrniC0Zw7+sHsf6OP+P/PbkTBiL87KpT8Iur2/Bu+wi+ven9SQbYE4igOkOOAgCqbWZVMrv4oSdn\nhRnLGqsT/RRKMrsYSfRSzqRgQ1EAuof9sJgMqHdY0VhbiWhcJJLCetGjQ1PvlP6oi9l01y/HrYHM\nIx4zkSjhdNnQ4rbjcIlDT+91jmJevR2ntdQWzaM4NDCOefWSofj0KQ1wWE14uMhJbcUAN6sMRXWl\nGTU2s+6E9ohf+rnq8SgUljZU4+mvrEOd3YLr7n8bL+eha6Zmd48H6370Cn7wwkeYV2/H776wBn+4\n9Wz87combGhrxDc/uQib3+vBL185AEDyqMLRuH6Pwi/pPY2F9Km45ssZ8+qws3sU/nAU3oBUaZWp\ngS4XSjmTgg1FAegeCaCpphIGA6GxphJA9lIeegawKzIeg77ieRS9nkDiKdMlXy9XD6ZzWFI3nVVV\ngRaXHR1D4yXrNRBCYEfXKNrm1GBZQzUOD44nvLZC4Q1GMDgWwrx6BwBJRXRDWwOe39Vb1MRvwlCo\nchQAMDeLEtlMXdnpmFNnw1M3rcVJM534+4e25TwwSc39bxwCADxzy5l45Mtn4GOL6icl2G/5+AJc\ntrIRP/3TPjy784gu+Q6FGnkmhT8cQ1wUR74jmbXzXIjEBLZ1jOhWjs0FR4WZQ0/HEl0jfjTWSgai\nSf4/24S2Po9CkfEonvZOvzeUuHkkDFOOHkzXsB9zam0wGggtLhvGw7GSSJAASJR0rpxTg2VNkhTF\nngKHnw7LFU9K6AkArj29GaFoHE8XMandOeyH3WKcMmyo2WXX3XQ3UbSgncxOhcthxc+uakMsLvCX\nA/lJs3gCEfxhdx82tDVgRVNNyn2ICD+8fDlOa6nFN5/ciVf3HgWgz1BIHkW4qMqxySTyFAeH4NM5\ntCgXSjmTgg1FAegeCSQqUBpy9CjSzctW41YUZIvkUfiCEYyFopithJ5k2ZBc8xSdqsqcFvlmWqo8\nhZKfaJtTi2UNsmZRgcNPSsXT/PoJQ7G0oRqnzKnBI28XL6ndOexHs8s+pay1xWXDkdEgIrHMocJ+\nT24ehUKr2456pxXvHM5P7PGZnUcQisZx1epmzf2sJiPuuX41ZlVV4LubdwMAairTz6JQqLZZ4AtF\nE15IKUJPdqsJK5qkfgpvQL/OU7aUciYFG4o8GQ9FMTweTngSNosJdXbLJEkPPfiCURhImlaWDqfV\nBKvJULSn8v6k+cnKE2uuTXcdQ+OJ8IhSlVOqyqcdnaOwmgw4ebYT9U4rZlZZC24oDg+Mw0BAs6r6\nCACuW9OM/UfHsLVIHc0dQ+MJxVg1zXU2xOJClzereBQznLkZCiLCmtY6vNue33t8cmsXTp7lxLLG\nqoz71tkteOBzpyWaDPV6FEIAR+QHt1J4FIAUftrV7UGfN1i0a3Iy+xgiUfFUO/GH21iTfYmsIi+g\n1fxEJJWtDhap6U5ptpvIUeTuUXj8EXhldVNACsmZDFSyXoodXaNY1lgNs5xEXN5YXfDKp4OD45hT\nZ5siD3LJKbPhtJqK0qkdjwt0jQQmVTwpzM3CGPd7Q3DZLXlJm6xpqUPPaADdI7l5iR/2erGr24Or\nTpujW9plwQwH7rl+FU5vrUNrvT3j/oowoLLGQo9BTcfa+S7E4gKHB8eLFnpyWE0Fz7ulgw1Fniiq\nsYpHAciGIss/Hm8wvXKsmnqntWgehaImqngUyiCVXKQ3lIonJfRkMhowp85WEo8iEovj/R4P2uZM\nxLyXNlTj4MAY/AUc9HJoYBzz3FNvVjaLCX+zshHPv9+L0QKXMvf7gghH45Oa7RTmuvQ33fV79fVQ\naLGmtQ4A8M7h3Epln9jaBYvRgL9pa8zquHXz3Xj879fqKjmtThgKxaMofugJAFbNrU0MISpWMtsp\nexSlKBBhQ5EnypOK+g9XabrL5geoV4fGXUQZj76kuDURwWW3puyMzURnQgZ74nNpcdlwuAQ5ir19\nPoSi8UmGYnljNYQAPiiQVxGPC7QPjicqnpK59vRmhKNxbNqe+wz1VCgVT6k8ihlOKyrMBl1Nd32e\nYNqBRXo5aaYTVRWmnAyFMjr4k0tnotaeOdeQK4oelNIUW6rQk81iwilycr6YHkVcIDHBr5iwociT\nrpEAKs2TK1AaayoRjMQxPK7/adIbiOhKetUXURiwzxtErc2MCvNEnsTlsGAoi/ehkOxRAFJopBQl\nsu8lEtkThiIxhKdAeYo+bxCBSGxSxZOaxbOrsLK5Bo+/W9jwk1KOOrdu6nWJCHPr7LoMxVFfZvmO\nTBgMUp4iF0Px8gdHMeqP4MrVc/JaQyYUQzHhUZROMHutLBdetGR2CRVk2VDkSfeIH021lZNirEqp\nbDZ5Cr0ehSLjkesUPS2kZrvKSdtcjlw9CknaQh0eaHXb4Q/Hii5suKNzFG6HZVI4cGaVFW6HFe8X\naAiPIgY4TyNO/ukVDdjXP5bXeNxkOobHYTQQGmpSewPNLlvG7uxwNI7BsXDeoSdACj8dGhzHUV92\nJduPb+1CQ3UFzlrgznsNWlSpQk9EExpJpWCtLDVetGS2/LdViqY7NhR50jUcmHRDAjDRdJdF5ZMv\npK/e+rSWWggBvPxhYbpi1fR6gpiV9JTptltyzlEkx9GVEtlid2jv6BpB25yaScabiLCssQp7CiQO\neDhRGps69AQAZ8o3wb/m2WugpmPIj8aayrSdvnPrbOgY8mvqgSk3db3yHVqsaZVuhu8e1l/9dGQ0\ngDf2D+CK1XM0Bw8VAiVHMTwehsNigqHI11OzprUOX//EQnxiycyinL+UMynYUORJ98jUG2JTET2K\ndfPdmF1dgSe3Fr6hK7VHYckqhKbQOeyf0jncmoNwXbZ4AhEcHBifFHZSWN5Yjf1HxwrijR0cGIfd\nYkzMMk/FopkOuB3WghqKriR58WTmumwIReM4quG19Xul1wrhUSxtqILNYsyqn+Kpbd0QAvi7VU15\nXz8TVpMRlXIotZRhJ0Aq4Pj6JxYlxhgXmlLOzdZlKIjoAiLaS0QHiOjbKV4nIrpTfn0XEZ2a6Vgi\n+r687w4ieomIGlSv3Sbvv5eIPpXvmywWnoBUAprsUVRXmmG3GHX3UkwMLcr8i2w0EC4/tQlv7B9I\nJJ8LQSgaw+BYeMpTpsthRSASy6paKBKL48hocMoNraGmAiYDFXV+9q7uiUa7ZJY2VCMWF/iwN//w\n06HBcbTWT216U0NEOHOBC389MFSwvExHCgOsZm7CGKf/jHOV70iF2WjAqrm1eFtnniIeF3hyWxfO\nXOBKWblVDJQ8RakqnkpFIvRUDh4FERkB3A3gQgBLAFxDREuSdrsQwEL5340Afq3j2B8LIVYIIdoA\nPAfge/IxSwBcDWApgAsA/Eo+T9mRqHiqnfwLT0RZyY0HIjHE4kL3L/Llq5oQF8Dm9wpXUXNUfsqc\nnVQJk2i6yyL8dGQ0gFhcTLkRmIwGNNfZitpL8V7nKIiAFXOqp7y2vKlwCe3Dg2OY504fdlI4c4Eb\ng2Mh7Osfy/uankAEo/5IRo8CkAxKOpLLoPPltJY67O336dK3euvQELqGA0VPYqtRwk+l0HkqJYnQ\nU5l4FGsAHBBCHBJChAE8BmBD0j4bADwoJN4CUENEs7WOFUKoH+vsAITqXI8JIUJCiMMADsjnKTu6\nhiVD0FQ79Q83mwFG2erQtLolRdQnt3UV7Em1L838ZMVtzqbSKqEam+KJscVtz3pkZzbs6BrF/HpH\nykqThuoK1NrM2J1nQjsYiaF7JJC24kmNkqfIVxMJmKh40vIoGmoqYTSQplhfvzcIi9GAWh0y3XpY\n01oHIYCtOqTHn9jahaoKEz61dFZBrq0HxVCUOvRUbBLjUEvQdKfHUDQC6FJ93y1v07OP5rFEdDsR\ndQG4DrJHofN6IKIbiWgrEW0dGBjQ8TYKz0QPReWU17LxKLw56NBcsaoJhwbGE6Wg+dLnSZ3gVBRk\ns/EoNA1FEUtk1YqxqZAS2tV5T7vrGJLmQWhVPCk01lSi1W0vSJ5i4nNNf12z0YDGmkrNxsZ+bxAz\nqqy6u6Ez0TanBhajIWOZ7IQAYOOkEuxiM2Eojq/Qk91aXh5F0RBCfFcIMQfAwwBuyfLYe4UQq4UQ\nq+vr64uzwAx0jwTgsJpSas401tjgCUR0/RD1TLdL5uIVDag0GwuW1E4XjkjIeGSh99Q57IfFaEgZ\nA29x2+APxzSTrbnSNRzA8Hg4raEApH6Kff2+KRPTskFPxZOaMxe48PahIV1ifVooyrDNGqEnQAo/\naXVn93mDBal4UqgwG3HKnOqMeYqEAOBppQs7AeocxfHlUVhMBlhNhrIpj+0BoP7JNsnb9Oyj51hA\nMhSXZ3G9siBVD4VCYxZy47kMYHdYTbhw2Sw8t/NIQap4+rxBVJqNU+QGlBxFNiWyXcN+NNVVpix9\nVMQBi1Ei+16XVKKpZSiWN1YjEhPY15d7zuCg3EPRoiP0BABnzndjPBzDzjy9v84hP9wOS0bpirku\nm2ZlWb83NCXEmC9rWuuwu8eD8TQ3rVhc4OG3OrB4dhWWNmQWACwkCY+iRDpPpcRZURoFWT2G4l0A\nC4molYgskBLNzyTt8wyAG+TqpzMAeIQQvVrHEtFC1fEbAHykOtfVRGQlolZICfJ3cnx/RUXqoUj9\ndDcxwChzPF7JUWSrCXPFqib4QlG8uKcvq+NS0ecNYnZ1xRSjV2E2wmE1ZRV66hhKX5mjxPW1qnJy\nZUfXKCrMBpw8y5l2H0Vy/P08EtqHBsYxs8qqe7zl2vkuEGXOU2w5OITzf/ZaWpG9jqGppdipmFtn\nlxPfU39m0gjUIGbmqBqbjjWtLkTjAu91pjaGm7Z346M+H2762LyChbz0UmOTHnaON48CkKXGy8Gj\nEEJEIYWFXgTwIYAnhBB7iOgmIrpJ3u0FAIcgJZ7vA/BVrWPlY35ERLuJaBeA8wHcKh+zB8ATAD4A\n8EcANwshii9mkiVCCLmHYmp+AshugNFEMju7GOoZ81xorKnEU9vyDz/1edKLxEkyHvpCRUIIdGoY\nioaaSpiNVBTNpx1do1jeWK05dnJOXSWqKkx55Sn0Vjwp1NgsWN5YjTcPaPca3P3nA9jXP4Z/+f3u\nlDmczmF/SnnxZJTQVCqvwheKwh+O5TSwSItVc2thIKTspxgPRfHjF/diZXMNLj2lIcXRxaXqOM1R\nAMBXz1mADW3F/0x1mVghxAuQjIF620bV1wLAzXqPlbdfnmJ35bXbAdyuZ23TxYg/gvFwLK1HUe+w\nwmI0oFtHQtuXGIOa3ROPwUC4fFUT7nplP46MBhJDk3KhzxPE6bIaaDIuu0W3R+EJROALRdMaCqOB\nJBXZAoeewtE49hzx4rNr52rul0ho5+NRDI7jouWzszpm3Xw37n/jEMZD0UQSUs2Boz785cAgTprp\nxJ/3DuDZXb2TbqrhaBxHPAE0uzI3qalLZE9JCsPlO7AoHQ6rCcsaU+cpNr52EAO+EO65flXJvQlg\nQmr8ePQorixRvoc7s3Nkooci9c3ZYCDMrqnQ7VEYDQSbxtCidFxxahOEAJ7ent6rGBwLaVZgxeNy\nOCJN3Nrl0C9EmEoMMJlWl73gcuMf9noRjsZTNtols6yxGh/1+nJKLg+PhzHqj6SUF9firAVuROMi\nbWXQg1s6YDEZ8D9fWoMVTdX4j2f3TAoddY9IlVa6PAp5n84Un3Ehu7KTOa2lDu91jU4qFOgZDeDe\n1w/h0lMacGpz5p9NMVCS2XpDhcxU2FDkiFYPhYLeAUbeYCTj0KJ0NLtsOL21TpZFmBqu+N8dPTj3\nJ6/iyo1b0pakDo2HEY2LKc12Ci67fgVZLRlshRa3XS4xLVyJbGL0aXP6RLbCssZqhGNx7M+hCS7b\niieF1S21sJgMKctkfcEINm3rxqdXNGCGswI/vGw5RvwR/OCFDxP7KA10mSqeAEnieobTOiX0JITA\nB72SJ1XIqieFNa11CEfjeL97wlu7449S6vGfLjy54NfTy4rGGpy/ZCZWTpOhOh5gQ5EjikfRlCZH\nAehvutMr35GOv1s9B+1DfmxTjd70+CP42qPv4dbHdsBqMqBnNJC2Ozh5DkUyit6TltCcQsKj0DCg\nLS4bApFY4um2EOzoGkW904oGHdU8y+Sqm1zCT0rFk55mOzUVZiNWz61NmdB+als3xsMxfG5dCwBJ\nauRLZ7fiia3dePOgtP+EvLg+2Yu5LlvCuHSP+PHLV/bjvJ++hh+88BHq7JaCdWWrOa1FCl0q4aft\nnSP43x1H8OWz5yWKO6aDapsZ996wGvUaulyMNmwocqRrxI/qSrNmSWtjbSWO+kIZa/Z9QX2zKNJx\n4bJZsFkmeirePDiIC37xOl54vxff/OQibP7qmQCA1/elbkxUurLTexRWxOIiMaBei65hqYQzVRxe\noRgqskqjnR6vrMVlh8OaW0L70MA4zEaaou+lhzMXuPFRn29SGC8eF3hwSwdWNtckJEYA4OvnLUJz\nnQ3fefp9BCMxdA77UWk26r7ZNdfZ8WGvF1ffuwVn/def8ZOX9qHeacUdl6/Aq/94TlEa3ursFiya\n6cA7h4chhMD3n/sA9U4rvnLO/IJfiyktbChypHskkLbiSUF5iuod1Rbv8+bpUditJly8fDae23UE\n33/uA1x3/9uoNBux6Svr8A/nLcScOhsWzHDg9f1pDIVH8nrShSMS3dk6Kp9SyYsn06JDuC4bRsbD\nODyYWjE2FQYDYUlDFV54vxc/+9M+7Owa1eUtAVLoaa7LrllZlQ5FzuPNgxOVQa/vH8DhwfGEN6FQ\naTHiB3+7HO1Dftz1yv5EybHe8OTJs5zwBaPo94bwzU8uwhvfOheP//1aXHnanKIN0gGk8NO2jhH8\nfkcP3uscxT+ef5LmQwNzbMA/wRzpGvZj4Yz09frA5AFGWs1ZvmA0b9f8ilVNeHJbN37zl8O47vRm\nfPfixbCphrScvdCNh9/uRDASm/I02ecNwmigRBd2MhN6T2EsmKG9js5hP1bN1Y4FN9RUwmI0FExF\n9mlZHPHshfqH4Hz1nPm48//2485X9uMX/7cfLrsFHzupHueeNAPrF9ajOo0O0qGB8azDTgrLG6vh\nrDDhr/sHExVNv3uzHfVOKy5cNrWK6qyFblx2aiPuee0QqirNWSWDb1g3F+eePAPzMyjcFpo1rS48\n9FYn/nnzbiyZXYXLSyAlzhQfNhQ5IPVQBPDxk7Xvmk010pN1pjyFFHrSNjqZWNNah6+dtxBtc6rx\n8ZOnDkpZv6ge//3Xdrx9eBgfWzRZ8qTPE8JMpzXtEBm9ek/haBxHRgO4bOUUaa5JSCWylQUpkY3G\n4njgL4exem4tVjTp8ygA4JyTZuCck2ZgeDyMN/YP4JWPjuKVj47i6e09sFmMeOhLp0+5McfiAh1D\nfnx8cQZrmQajgbBuvgt/OTAIIaRzvbpvAF/7+EJYTKk9lH++eAle3TuA4fGwZoFAMlaTEQtmZJdw\nLwRr5DzFeDiGf7lkSdEHEzGlgUNPOTAwFkIoGteseAIk3SQiZOylyDeZDUj9Ad/45KKURgIAzmh1\nwWIypMxT9HkDmpIOLrvkUQxnCD0dGQ0gLrRLYxVa3fpmO2fij3v60DMawJfXz8vp+Dq7BRvaGvGL\nq1di2z9/Epu+shYuhwVfeWjblPGePSMBhGNxzM+i2S6ZMxe40TMaQOewHw9u6YCRCNed3qy5vu9d\nIinz5+rJlJJZ1RVYPLsKF6+YnZgZzRz7sKHIAWUgUaYchcVkwEyndi+FNLQoUvSu0UqLEWta6lIb\nCk8wbSIbAGptZhBl1nvSUo1NpkXupdCbG0iFEAL3vXEYLS4bPrE4/3GTRgNh1dw63Hv9angDUdz8\n8HaEoxO9Fgfl0thWHaqx6VDyFC/t6ceTW7tw0fLZmJGhVHVDWwP++/On4bJTtT21cmHzV9fh51e1\nTerlKOEAABHBSURBVPcymALChiIHuuQbYiaPAlDkxtM/OY+HY4iL0nSNrl/kxv6jYziS5OFoyXcA\n0sChWltmGY/OLGr9W9x2BCNx9Ptyn9K3tWMEO7tG8cWzWgsa4lg8uwr/dcUKvNs+gtuf/yCx/ZBc\nGptts52aeW47ZlVV4Ocv74MvFMVn12l3kgOSt3juSTMm5ZzKmQqzEeYckv1M+cI/zRxQPAo9JZKZ\nmu4SyrEppMoLzXo5N/GGqvrJF5SkSLQ8CkCfjEfnsD/hRWVCqXxqz0Pz6d7XD6HWZsYVqwovY3Dp\nKQ24cf08/G5LB57cKo1HOTw4hupKM+pkRd1ckMajSmqyyxqrpq1bmWGygQ1FDnSP+OGyW3Q94TXW\nVqJ3NIhYmhBLttPt8uGkmU7MrLLi9X0TTV+Zmu0UXA4dhmLIjzm1lTDoeLpvcUteR65SHocHx/Hy\nh/34zBlzUZmD9IkevvWpk3DmAhe++/vd2NU9mqh4yreK6KyFUuz+s2tbpkX7iGGyhQ1FDnSPBNCk\ns0O2saYS0biYkhhVmBAELL5HQUQ4e2E9/nJgMGG4JprttL0jl8OKQR2hJz35CQBoqK6ExWTIufLp\nN385BLPBgOsziADmg8lowF3XnIp6hxU3/c82fNTn0zXVLhOXrGjAL65uw2Wncukoc2zAhiIHuob9\nujtzMw0wymW6XT6cvdANTyCCXd2SNlJvmhGoybgzhJ6EEOjKwlAYDIR5bjte2zeQ9eClkfEwntrW\njb9ZKWkjFZM6uwX3XL8KQ+NhDI+H88pPKJiNBmxoa+TSUeaYgQ1FlsTjAj2jAU0tIzVNNRNNd6nI\ndWhRrpy9sB5ESISfFNnpGVXa0hAuhxWeQGRSFZCaUb8kL66nNFbhm+efhI/6fPjnNPMX0vHQWx0I\nRuL40tm5lcRmy7LGavzo8uUAJB0mhjnRYEORJf2+ICIxkbVH0Z3OowiULvQESE/IyxurE3Iefd4g\n6uyWjNo/StPdSIqpacCEuulcl/4n7k8umYlbz1uIp7Z148EtHbqOCUZi+N2WdpxzUj0WzcyvSTEb\n/nZlE9789sdxzknTM5+dYaYTNhRZMtFDoe/J2WYxodZm1uFRlG761vqF9djRNQpPIII+T1CX5LTS\ndJduLkU2PRRqbj1vIT6xeCa+/9wHePuQ9gQ4QJJNHxwL48sl8ibUNNSkno/OMMc7bCiyRJGmbs3i\nybmxNr3cuC8YgclAqDCX7kexflE9YnGBNw8Mos8b1CU57c4g47HniAcGytyEmIzBQPjZVaeg2WXD\nVx/ePqXHQ40QAve/cRhLZldhHXf9MkzJYEORJZvf68HShipdTWUKWr0UinxHKZ9UVzbXwGE14fX9\nAxmb7RQUwcBUTXfRWBybt/fk3BTmrDDj3utXIxSN46aHtk1Jbg+OhXD/G4dwwc/fwP6jY/jy+lZ+\nsmeYEsKGIgv29fuwq9uDy7Msa2xx2dExNI69fb4pr5VCviMZs9GAdfNdeOWjoxgaD2dstgO0hQH/\nvHcAR30hXJXH/N4FMxz42VVt2NXtwXc370YkFsdLe/rw5Qe34owf/B/+8/kPUWkx4r8uX46/aTs2\npCwY5njh2NAEKBM2beuGyUDY0NaQeWcVXzyrFU+/14OvPLQNv7/lzEn5iEIIAubC+kX1eOmDfgD6\nxmI6rSZYjIaUek+PvdOJGU5rRjXdTCjJ7V/833689EEffMEo3A4rvnBWK/5uVRMWljB5zTDMBGwo\ndBKNxfH0ez049+QZaec2pGNGVQXuvvZUXHPfW/jHJ3di42dWJUIn3mBkegzFwonqHT05CiKSu7Mn\nh576PEH8ee9R3PSx+TkN80nm1vMW4qgvhJHxMK5Y1YSPnVTPukEMM83wX6BO3jgwiAFfKOuwk8Ka\n1jrcduHJeHFPP+55/VBiu+RRlDb0BEjCfS1ynkXv/GSXw4Kh8ckexZNbuxAXyCvspMZgIPzwsuXY\neP0qfGLJTDYSDFMG8F+hTp7a1o1amzmv8MoXz2rFRctn4Y4/foQ3D0oNb75gtKSlsWoUkUDdhsJu\nneRRxOMCj2/twrr5rqz6JxiGObZgQ6EDjz+CP33Qjw1tjWknkemBiHDHFaeg1W3H1x59D32e4LSF\nngDglnMX4M5rVuo2VC6HZVKO4q8HB9E9EsDVa9IP3mEY5tiHDYUOnt11BOFoHFcUYP6vw2rCPdev\nQiAcw1cf3oaxULRk8h3JzKiqSMxu1oPLbsGwKvT02DtdqLGZcf6S/IcGMQxTvrCh0MGm7d04aaYT\nSxuqCnK+BTOcuOOKU7C9cxRClE6+I19cDisCkRj84SiGxkJ46YM+XLayKaP8B8MwxzZsKDJwcGAM\n73WO4opVTQVt8rp4xWx88axWAEBV5bFRfOayT/RSPL29B5GYwNVrCj80iGGY8uLYuENNI5u2dcNo\nIGxYmV3vhB6+feHJmOuy4fwlswp+7mLglsuCB8ZCePTdTpzaXFNSYT6GYaYH9ig0iMUFnt7eg48t\nqi/K3AOz0YAb1ragNo/RmqVE6c5+cU8fDg2McxKbYU4Q2FBo8OZBSTQv196J4w2l0fChLR1wWE24\nZMXsaV4RwzClgA2FBk9t60ZVhQnnLc5PmuJ4QclRjIdjuLStIScBQIZhjj3YUKTBG4zgxT19uLSt\ngat6ZCrMRjisknG4ukCd2AzDlD/8SJiGF3b1IhiJc9gpiRlOK5rrbFjeyCNBGeZEgQ1FGp7b1Yt5\n9Xa0zamZ7qWUFXdcsQLVlWaeB8EwJxBsKNKwt9+Hc0+q5xtiEqtb6qZ7CQzDlBjOUaRgLBTFgC+E\nFjcL3TEMw7ChSEHH0DgAaTIdwzDMiQ4bihR0DPkBAHOzmIvNMAxzvKLLUBDRBUS0l4gOENG3U7xO\nRHSn/PouIjo107FE9GMi+kjefzMR1cjbW4goQEQ75H8bC/FGs+HwIHsUDMMwChkNBREZAdwN4EIA\nSwBcQ0RLkna7EMBC+d+NAH6t49g/AVgmhFgBYB+A21TnOyiEaJP/3ZTrm8uVjqFx1DutsFs5188w\nDKPHo1gD4IAQ4pAQIgzgMQAbkvbZAOBBIfEWgBoimq11rBDiJSFEVD7+LQBl07DQPuhHK3sTDMMw\nAPQZikYAXarvu+VtevbRcywAfAHAH1Tft8php9eI6OxUiyKiG4loKxFtHRgY0PE29NM+NM75CYZh\nGJlpT2YT0XcBRAE8LG/qBdAshGgD8A0AjxDRlIlBQoh7hRCrhRCr6+vrC7YefziKo1wayzAMk0BP\nEL4HgFrYp0nepmcfs9axRPQ5AJcAOE8IIQBACBECEJK/3kZEBwEsArBVx1rzpn1QqnjiRDbDMIyE\nHo/iXQALiaiViCwArgbwTNI+zwC4Qa5+OgOARwjRq3UsEV0A4FsALhVC+JUTEVG9nAQHEc2DlCA/\nlNe7zAKlh4JDTwzDMBIZPQohRJSIbgHwIgAjgAeEEHuI6Cb59Y0AXgBwEYADAPwAPq91rHzqXwKw\nAviTLJPxllzhtB7AfxBRBEAcwE1CiOFCveFMHFaa7Tj0xDAMA0Cn1pMQ4gVIxkC9baPqawHgZr3H\nytsXpNl/E4BNetZVDDoG/XA7rAk5bYZhmBOdaU9mlxvtQ+No4bATwzBMAjYUSbQPjXPYiWEYRgUb\nChX+cBT93hB7FAzDMCrYUKjoHFbEANmjYBiGUWBDoaJdFgNs5dATwzBMAjYUKtpZXpxhGGYKbChU\ntA+Ow+2wwFlhnu6lMAzDlA1sKFRIYoAcdmIYhlHDhkJFx5Cfw04MwzBJsKGQCYRj6PUEeQ4FwzBM\nEmwoZBKlsVzxxDAMMwk2FDITc7I59MQwDKOGDYXMhLw4exQMwzBq2FDItA/5UWe3oLqSS2MZhmHU\nsKGQaR9k1ViGYZhUsKGQ6Rga5/GnDMMwKWBDASAYieGIJ8j5CYZhmBSwocBEaWyLm0NPDMMwybCh\nwIRqLIeeGIZhpsKGApLGE8CGgmEYJhVsKCCVxtbazKi2cWkswzBMMmwoIFU8cSKbYRgmNWwoALQP\n+nmqHcMwTBpOeEMhlcYGWF6cYRgmDSe8oega9kMInpPNMAyTjhPeUEzMyWZDwTAMk4oT3lB0DLG8\nOMMwjBYnvKE4PDiOGpsZNTbLdC+FYRimLDnhDYU0J5vDTgzDMOk44Q3FYZYXZxiG0eSENhShqFQa\ny9IdDMMw6TmhDUXXcABCsGoswzCMFie0oQCAi5bPwuLZVdO9DIZhmLLFNN0LmE4WzHDgV9etmu5l\nMAzDlDUnvEfBMAzDaMOGgmEYhtGEDQXDMAyjCRsKhmEYRhM2FAzDMIwmugwFEV1ARHuJ6AARfTvF\n60REd8qv7yKiUzMdS0Q/JqKP5P03E1GN6rXb5P33EtGn8n2TDMMwTO5kNBREZARwN4ALASwBcA0R\nLUna7UIAC+V/NwL4tY5j/wRgmRBiBYB9AG6Tj1kC4GoASwFcAOBX8nkYhmGYaUCPR7EGwAEhxCEh\nRBjAYwA2JO2zAcCDQuItADVENFvrWPH/t3d+oV1WYRz/fJlzFkZkhQwnbUI3I6JMalJEGEGJeNWF\nQWh/IKSCootwDIIu6yIivDAhr7JaUdCQwpZ6O9cftaY5LQpSrFGQEkI0e7o4j+zdz+3dz36/n2/b\neT7wsvM+58/O92E/nvd3znuemX1mZpPefwToKoz1npn9ZWY/At/7OEEQBEEF1HPgbgXwc+H+FHBX\nHW1W1NkX4AlgsDDWyAxjTUPSU6RvLwB/ShovVVHODcBvDfSf74T+vPVD+CBX/TfV06jyk9mSBoBJ\nYPfl9DOzncDOJs3hSzNb04yx5iOhP2/9ED7IXf9c1BMoTgMrC/ddbqunTXtZX0mPARuA+83MLuP3\nBUEQBFeIevYovgBultQjaTFpo3mops0QsNnffuoDzprZmbK+kh4EXgQ2mtn5mrE2SeqQ1EPaIB9t\nQGMQBEHQAHN+ozCzSUnPAnuBNmCXmR2VtNXrdwCfAOtJG8/ngcfL+vrQ24EOYFgSwIiZbfWx3weO\nkZaknjGzC01TPDNNWcKax4T+IHcf5K6/FE2t+ARBEATBpcTJ7CAIgqCUCBRBEARBKVkHirlSk8wn\nJO2SNCFprGBbJmlY0kn/eV2hbsY0KZLukPSt170h30DylwsG3X5QUveV1DcXklZKOiDpmKSjkp5z\nexY+kLRE0qikI67/Zbdnob+IpDZJhyTt8fvsfNB0zCzLi7S5/gOwClgMHAF6q55XA3ruBVYDYwXb\nq8A2L28DXvFyr+vtAHrcD21eNwr0AQI+BR5y+9PADi9vAgar1lyjvxNY7eVrSGlhenPxgc91qZfb\ngYOuIQv9Nb54AXgH2JPb56BlPq16AhX+Ma0F9hbu+4H+qufVoKbumkAxDnR6uRMYn0kr6a20td7m\neMH+CPBmsY2XF5FOsapqzSW++Bh4IEcfAFcDX5OyIGSln3Tuah+wrhAosvJBK66cl55mSzuykFhu\n6TwLwC/Aci+XpVw5NYN9Wh9LObrOAte3ZtqN4csBt5OeqrPxgS+5HAYmgGEzy0q/8zrpfNY/BVtu\nPmg6OQeKrLD0CLTg34WWtBT4EHjezM4V6xa6D8zsgpndRnqqvlPSLTX1C1q/pA3AhJl9NVubhe6D\nVpFzoMghVcivSll88Z8Tbp9N+2mmsvgW7dP6SFoEXAv83rKZ/wcktZOCxG4z+8jNWfkAwMz+AA6Q\n0vTnpP9uYKOkn0iZqtdJepu8fNAScg4U9aQmme8MAVu8vIW0bn/RfkmaFP96fk5Sn7/lsbmmz8Wx\nHgb2+9PZ/wKf71vAd2b2WqEqCx9IulH+z78kXUXanzlOJvoBzKzfzLrMrJv0ed5vZo+SkQ9aRtWb\nJFVepLQjJ0hvOwxUPZ8GtbwLnAH+Jq2pPklaO90HnAQ+B5YV2g+47nH8jQ63rwHGvG47U6f3lwAf\nkNK0jAKrqtZco/8e0pLCN8Bhv9bn4gPgVuCQ6x8DXnJ7Fvpn8Md9TG1mZ+mDZl6RwiMIgiAoJeel\npyAIgqAOIlAEQRAEpUSgCIIgCEqJQBEEQRCUEoEiCIIgKCUCRRAEQVBKBIogCIKglH8BlrDl3OcS\nVpIAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10c7286a0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# time taken by only flashtext\n",
"plt.plot(counts, time_flash_text)\n",
"#plt.plot(counts, time_regex)\n",
"plt.legend(['FlashText'], loc='upper left')\n",
"plt.title('No of keywords vs time (sec)')"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x1064d8358>"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10886dbe0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# time taken by flashtext and regex compared\n",
"plt.plot(counts, time_flash_text)\n",
"plt.plot(counts, time_regex)\n",
"plt.legend(['FlashText', 'Regex'], loc='upper left')\n",
"plt.title('No of keywords vs time (sec)')"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[(0, 0.0021049976348876953, 1.1920928955078125e-06),\n",
" (999, 0.002577066421508789, 0.22324013710021973),\n",
" (1998, 0.0027570724487304688, 0.3517110347747803),\n",
" (2996, 0.003284931182861328, 0.5657999515533447),\n",
" (3987, 0.002735137939453125, 0.7377369403839111),\n",
" (4984, 0.002649068832397461, 0.9025490283966064),\n",
" (5972, 0.003771066665649414, 1.1736340522766113),\n",
" (6950, 0.0030558109283447266, 1.2782330513000488),\n",
" (7951, 0.0028772354125976562, 1.4533758163452148),\n",
" (8942, 0.0029239654541015625, 1.6046521663665771),\n",
" (9902, 0.002691030502319336, 1.8706660270690918),\n",
" (10919, 0.003328084945678711, 1.918699026107788),\n",
" (11865, 0.0025870800018310547, 2.0748438835144043),\n",
" (12854, 0.0027561187744140625, 2.2390809059143066),\n",
" (13845, 0.0032541751861572266, 2.445417881011963),\n",
" (14821, 0.0027971267700195312, 2.6253089904785156),\n",
" (15753, 0.0027189254760742188, 2.7199621200561523),\n",
" (16771, 0.002744913101196289, 2.920759916305542),\n",
" (17717, 0.002886056900024414, 3.093148946762085),\n",
" (18734, 0.003203868865966797, 3.227185010910034),\n",
" (19660, 0.002888202667236328, 3.4561359882354736),\n",
" (20639, 0.002869129180908203, 3.6165518760681152),\n",
" (21600, 0.002788066864013672, 3.7714359760284424),\n",
" (22589, 0.0032279491424560547, 3.940941095352173),\n",
" (23556, 0.0030660629272460938, 4.09523606300354),\n",
" (24536, 0.002816915512084961, 4.297428131103516),\n",
" (25454, 0.002961874008178711, 4.432486057281494),\n",
" (26426, 0.0028591156005859375, 4.60263991355896),\n",
" (27435, 0.003358125686645508, 4.727710962295532),\n",
" (28389, 0.002892017364501953, 4.881420135498047),\n",
" (29326, 0.0029151439666748047, 5.134897947311401),\n",
" (30268, 0.0035219192504882812, 5.279383182525635),\n",
" (31216, 0.0031969547271728516, 5.4562530517578125),\n",
" (32141, 0.0031409263610839844, 5.671065092086792),\n",
" (33145, 0.0028619766235351562, 5.9297380447387695),\n",
" (34082, 0.0029730796813964844, 5.980953931808472),\n",
" (35090, 0.0031490325927734375, 6.228991985321045),\n",
" (36031, 0.003178119659423828, 6.31782603263855),\n",
" (36955, 0.0031049251556396484, 6.501192092895508),\n",
" (37798, 0.003946065902709961, 6.715828895568848),\n",
" (38837, 0.002928018569946289, 6.879624843597412),\n",
" (39696, 0.003930091857910156, 7.400384902954102),\n",
" (40632, 0.003880023956298828, 7.678287982940674),\n",
" (41620, 0.004044055938720703, 8.32214093208313),\n",
" (42594, 0.0032989978790283203, 8.313017845153809),\n",
" (43512, 0.003055095672607422, 8.971843957901001),\n",
" (44420, 0.004041194915771484, 8.863094806671143),\n",
" (45451, 0.003228902816772461, 9.057163000106812),\n",
" (46306, 0.004168033599853516, 9.129202842712402),\n",
" (47286, 0.0029630661010742188, 8.960461854934692)]"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Count of terms, FlashText time, RegexTime\n",
"string_length_to_time_map"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda root]",
"language": "python",
"name": "conda-root-py"
},
"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.5.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment