diff --git a/Jonas_Solutions/Task_02_JonasWeinz.ipynb b/Jonas_Solutions/Task_02_JonasWeinz.ipynb index 2cfca3e..9f650d7 100644 --- a/Jonas_Solutions/Task_02_JonasWeinz.ipynb +++ b/Jonas_Solutions/Task_02_JonasWeinz.ipynb @@ -4,8 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# NLP-LAB Exercise 01 by jonas weinz\n", - "----\n", + "# NLP-LAB Exercise 01 by Jonas Weinz\n", "## links:\n", "\n", "* Article: https://miguelmalvarez.com/2017/03/23/how-can-machine-learning-and-ai-help-solving-the-fake-news-problem/\n", @@ -40,12 +39,12 @@ } ], "source": [ - "%pylab ipympl" + "%pylab inline" ] }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -72,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -123,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -131,7 +130,7 @@ "output_type": "stream", "text": [ "================================================================================\n", - "downloading and unpacking https://www.cs.ucsb.edu/~william/data/liar_dataset.zip if not already existing\n", + "checking whether unzip is installed\n", "================================================================================\n", "UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.\n", "\n", @@ -164,6 +163,12 @@ " ZIPINFO: [none]\n", " ZIPINFOOPT: [none]\n", "================================================================================\n", + "successfully finished action: checking whether unzip is installed\n", + "================================================================================\n", + "================================================================================\n", + "downloading and unpacking https://www.cs.ucsb.edu/~william/data/liar_dataset.zip if not already existing\n", + "================================================================================\n", + "================================================================================\n", "successfully finished action: downloading and unpacking https://www.cs.ucsb.edu/~william/data/liar_dataset.zip if not already existing\n", "================================================================================\n", "================================================================================\n", @@ -189,7 +194,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -205,7 +210,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -360,7 +365,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -375,7 +380,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -384,7 +389,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ @@ -393,78 +398,78 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Unnamed: 0\n", - "5507 Anthony Weiner Sends Apology Sext To Entire Cl...\n", - "1440 John Kasich was killing it with these Iowa vot...\n", - "3172 Yeah, yeah, with the rise of Der Trumper and t...\n", - "6962 Vermont fights the opioid epidemic by limiting...\n", - "6970 — Adam Baldwin (@AdamBaldwin) October 28, 2016...\n", - "7209 Militias prepare for election unrest while Chr...\n", - "4781 Raleigh, North Carolina (CNN) As soon as the f...\n", - "6137 Yemen’s Hudaydah suffering from dire humanitar...\n", - "8799 Subscribe \\nIn politics, the Third Way is a po...\n", - "4374 Hanging in the balance is Obama’s vision of Am...\n", - "9465 Under the Surface - Naomi Klein and the Great ...\n", - "10409 October 28, 2016 at 9:00 PM \\nWhy would Putin ...\n", - "2822 HAMPTON, N.H. -- Hillary Rodham Clinton said F...\n", - "5190 (CNN) Donald Trump on Wednesday refused to say...\n", - "2286 Gay rights won't fade as a political issue. Th...\n", - "4308 Fox Business’s Tuesday night Republican debate...\n", - "7305 Yes, There Are Paid Government Trolls On Socia...\n", - "6716 Vladimir Putin: The United States continues to...\n", - "6871 By wmw_admin on October 31, 2016 Sanchez Manni...\n", - "8527 Banana Republic Election in the United States?...\n", - "3658 Why are Americans expected to die sooner than ...\n", - "9721 Comments \\nFamous techno musician Moby tore in...\n", - "10001 Behind the headlines - conspiracies, cover-ups...\n", - "8920 Massachusetts +11% New York +10% \\nWhen home p...\n", - "8488 Ivana Says Young Donald Trump Was A Cry-Baby –...\n", - "8474 Recipient Email => \\nEnemies of the United S...\n", - "5789 Theresa May refuses to withdraw support for Sa...\n", - "1324 Even as Hillary Clinton has stepped up her rhe...\n", - "1744 Sally Kohn is an activist, columnist and telev...\n", - "3887 George Washington was the first President of t...\n", + "5476 Share on Twitter \\nFor Robin Roberts, losing h...\n", + "1223 Jeb Bush’s resignation from the presidential r...\n", + "8179 Does The U.S. Government Really Know Who Hack...\n", + "6457 Print \\n[Ed. – Now teaching the gospel of raci...\n", + "2236 Video of a confrontation between a news photog...\n", + "7451 Tony Blair helpfully describes Remain voters a...\n", + "7548 Tweet Home » Headlines » World News » It’s A S...\n", + "2409 President Obama's top health official testifie...\n", + "3918 And it looks like that time is nigh. Clinton i...\n", + "7698 ‹ › Arnaldo Rodgers is a trained and educated ...\n", + "1461 Ben Carson pitched a tax plan with numbers tha...\n", + "3850 President Barack Obama has officially hit the ...\n", + "3168 From Coca-Cola to Microsoft, companies that ga...\n", + "5738 Trending Articles: Trending Articles: ‘Chairma...\n", + "3655 The horrific attack in Orlando, Florida, showe...\n", + "4656 With less than two weeks to go, the race for t...\n", + "6823 Email Print This is WHY Comey wrote the letter...\n", + "3190 Donald Trump may have eased some Republican fe...\n", + "9509 Tuesday 1 November 2016 by Formelia Alberthine...\n", + "8017 API Reports A Build, DOE A Draw by IWB · Octob...\n", + "8116 Region: Russia in the World More bang for the ...\n", + "9762 “The statesmen will invent cheap lies, putti...\n", + "3760 Freddie Gray, whose death triggered Monday’s r...\n", + "9438 Support Us iMAHDi – the arrivals 28 Why Satani...\n", + "7859 14th Anniversary of His Passing By Joachim Hag...\n", + "5129 Hillary Clinton will already make history with...\n", + "5599 By: The Voice of Reason | In recent weeks, a c...\n", + "7691 BREAKING – Investigative Journalist Found Dead...\n", + "7912 This is now becoming the norm. Just yesterday,...\n", + "6508 Email \\nWill this be the most chaotic election...\n", " ... \n", - "643 Is anyone qualified to judge The Donald?\\n\\nDo...\n", - "6795 [Graphic: Calais street scene by Harriet Paint...\n", - "10444 By wmw_admin on October 30, 2016 By Timothy Fi...\n", - "8696 Unprecedented Surge In Election Fraud Incident...\n", - "5103 The Democratic National Committee is offering ...\n", - "8018 Comments \\nFOX News star Megyn Kelly has final...\n", - "2896 President Obama sent a draft Authorization for...\n", - "9188 Heseltine strangled dog as part of Thatcher ca...\n", - "6 It's been a big week for abortion news.\\n\\nCar...\n", - "9778 20 Foods That Naturally Unclog Arteries and Pr...\n", - "10062 FBI Releases Files on Bill Clinton's Cash for ...\n", - "8556 NTEB Ads Privacy Policy Black Americans Going ...\n", - "9757 10-27-1 6 The first Bill and Hillary Clinton c...\n", - "2524 President Obama's executive action preventing ...\n", - "8995 Rights? In The New America You Don’t Get Any R...\n", - "8602 By Amanda Froelich For a long time, green juic...\n", - "2886 W hen trying to explain the current unrest in ...\n", - "3456 WASHINGTON, June 21 (Reuters) - Tensions are b...\n", - "6564 This is how it works in the Clinton Cabal...or...\n", - "8406 posted by Eddie Angelina Jolie’s father, Jon V...\n", - "1151 As the Democratic presidential contest reaches...\n", - "3233 With the Department of Homeland Security’s fun...\n", - "4601 Enough Is Enough\\n\\nIf we really want to do so...\n", - "305 Top Dems want White House to call off Part B d...\n", - "842 Texas Sen. Ted Cruz’s popularity among Republi...\n", - "7085 Email \\nNot all invasions are hot — not all in...\n", - "530 President Obama's 2016 budget seeks higher spe...\n", - "5766 \\nThe decision of FBI Director Comey to go p...\n", - "976 Republican presidential candidate Ted Cruz is ...\n", - "2241 The simmering dispute over media access to Hil...\n", + "10221 Podesta Goes Crazy Live On CNN Over New FBI Hi...\n", + "9568 Comments \\nConan O’Brien asked comedian Louis ...\n", + "9479 posted by Eddie A list of secret Apple iPhone ...\n", + "1574 Texas Senator Ted Cruz (R) isn’t about to let ...\n", + "5442 Taming the corporate media beast BRICS Do Not ...\n", + "3647 Imagine what would happen if a retail store or...\n", + "9818 Trump To Host Facebook Live Nightly Show Until...\n", + "862 Will The Real Donald Trump Please Stand Up?\\n\\...\n", + "7731 Thu, 27 Oct 2016 15:45 UTC © Lockheed An artis...\n", + "1136 (CNN) The two presidential front-runners are b...\n", + "10229 Your News Wire WikiLeaks Bombshell: ‘There Is ...\n", + "9799 source Add To The Conversation Using Facebook ...\n", + "9649 . MMR Vaccines Cause 340% Increased Risk of Au...\n", + "236 THE HOUSE Select Committee on Benghazi further...\n", + "9275 Sesame Seeds for Knee Osteoarthritis VN:F [1.9...\n", + "4336 WASHINGTON — Macy's said Wednesday that the Tr...\n", + "7350 Getty - Kevin Mazur The Wildfire is an opinion...\n", + "4881 The banner headline on the Drudge Report the m...\n", + "2404 Ask him, and he'll tell you himself. \"I'm very...\n", + "7947 Comments \\nI learned exclusively tonight that ...\n", + "3359 EXCLUSIVE: Highly classified Hillary Clinton e...\n", + "7927 FBI Director may be sacked for intrusion into ...\n", + "4948 Earlier today, I talked with Libertarian Party...\n", + "10183 Originally appeared at Strategic Culture Found...\n", + "2073 It was once a sleepy Capitol Hill backwater wi...\n", + "8082 The Washington Post reported : \\nDonald Trump ...\n", + "8145 . The Hulk Actor Mark Ruffalo Has Joined Stand...\n", + "3890 Barack Obama will make a long-awaited trip to ...\n", + "4885 Hillary let the cat out of a bag Friday. For o...\n", + "8025 Here's something interesting from The Unz Revi...\n", "Name: text, Length: 4434, dtype: object" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -475,7 +480,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ @@ -486,7 +491,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -495,34 +500,6 @@ "tfidf_test = tfidf_vectorizer.transform(Xt)" ] }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "['00',\n", - " '000',\n", - " '0000',\n", - " '00000031',\n", - " '000035',\n", - " '00006',\n", - " '0001',\n", - " '0001pt',\n", - " '0002',\n", - " '000billion']\n", - "['حلب', 'عربي', 'عن', 'لم', 'ما', 'محاولات', 'من', 'هذا', 'والمرضى', 'ยงade']\n" - ] - } - ], - "source": [ - "pp(count_vectorizer.get_feature_names()[0:10])\n", - "pp(count_vectorizer.get_feature_names()[-10:])\n" - ] - }, { "cell_type": "code", "execution_count": 13, @@ -538,10 +515,38 @@ " '00000031',\n", " '000035',\n", " '00006',\n", - " '0001',\n", - " '0001pt',\n", " '0002',\n", - " '000billion']\n", + " '000ft',\n", + " '000x',\n", + " '001']\n", + "['حلب', 'عربي', 'عن', 'لم', 'ما', 'محاولات', 'من', 'هذا', 'والمرضى', 'ยงade']\n" + ] + } + ], + "source": [ + "pp(count_vectorizer.get_feature_names()[0:10])\n", + "pp(count_vectorizer.get_feature_names()[-10:])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['00',\n", + " '000',\n", + " '0000',\n", + " '00000031',\n", + " '000035',\n", + " '00006',\n", + " '0002',\n", + " '000ft',\n", + " '000x',\n", + " '001']\n", "['حلب', 'عربي', 'عن', 'لم', 'ما', 'محاولات', 'من', 'هذا', 'والمرضى', 'ยงade']\n" ] } @@ -553,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -565,51 +570,26 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "'score: 0.8527091004734351'\n" + "'score: 0.8574434508153603'\n", + "Confusion matrix, without normalization\n" ] }, { "data": { - "application/vnd.jupyter.widget-view+json": { - "model_id": "074a58de5e904298a7c212800fdc812b", - "version_major": 2, - "version_minor": 0 - }, - "text/html": [ - "

Failed to display Jupyter Widget of type FigureCanvasNbAgg.

\n", - "

\n", - " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", - " that the widgets JavaScript is still loading. If this message persists, it\n", - " likely means that the widgets JavaScript library is either not installed or\n", - " not enabled. See the Jupyter\n", - " Widgets Documentation for setup instructions.\n", - "

\n", - "

\n", - " If you're reading this message in another frontend (for example, a static\n", - " rendering on GitHub or NBViewer),\n", - " it may mean that your frontend doesn't currently support widgets.\n", - "

\n" - ], + "image/png": "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\n", "text/plain": [ - "FigureCanvasNbAgg()" + "" ] }, "metadata": {}, "output_type": "display_data" - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Confusion matrix, without normalization\n" - ] } ], "source": [ @@ -619,7 +599,374 @@ "score = metrics.accuracy_score(yt, pred)\n", "pp(\"score: \" + str(score))\n", "cm = metrics.confusion_matrix(yt, pred, labels=[\"FAKE\", \"REAL\"])\n", - "plot_confusion_matrix(cm, classes=[\"FAKE\", \"REAL\"], title= \"tfidf\")" + "plot_confusion_matrix(cm, classes=[\"FAKE\", \"REAL\"], title= \"TFIDF_Vecctorizer, Multinomial Naive Bayes\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "'score: 0.8916359810625987'\n", + "Confusion matrix, without normalization\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "clf = MultinomialNB()\n", + "clf.fit(count_train, y)\n", + "pred = clf.predict(count_test)\n", + "score = metrics.accuracy_score(yt, pred)\n", + "pp(\"score: \" + str(score))\n", + "cm = metrics.confusion_matrix(yt, pred, labels=[\"FAKE\", \"REAL\"])\n", + "plot_confusion_matrix(cm, classes=[\"FAKE\", \"REAL\"], title= \"Count Vectorizer, Multinomial Naive Bayes\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* comparing to PassiveAggresiveClassifier" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jonas/.local/lib/python3.6/site-packages/sklearn/linear_model/stochastic_gradient.py:117: DeprecationWarning: n_iter parameter is deprecated in 0.19 and will be removed in 0.21. Use max_iter and tol instead.\n", + " DeprecationWarning)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "accuracy: 0.933\n", + "Confusion matrix, without normalization\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAZ8AAAEmCAYAAAC9J50pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJzt3Xm8HuP9//HXO6uENEEIEmvt9GuLva29RRHUWiVIbfXTRRVtUVpKlVqqrVIlQYVSS9VStVM7sdUWBIkQscaSRJLP74/rOsnk9CTn3s5959x5P89jHmfmmrlnrlnu+cx1zXXPKCIwMzOrpy6NzoCZmc1/HHzMzKzuHHzMzKzuHHzMzKzuHHzMzKzuHHzMzKzuGhp8JPWS9A9JH0r6WxXz2UfSv2qZt0aQdLOkoRV+9mRJEyW9Vet8Wfma5ZgEkPSspM0bnY9Ga9Q+lbS5pLEdOP/zJR1fGD5M0tuSPpa0aP6/Qs0XHBHtdsC3gEeBj4HxwM3Al0v5bDvz3Rd4GOhW7bw6ogM2BwK4tlX6Wjn9rhLncyJwWQfmcxngM2DxDpr3x4UugE8Kw18BLgGmtppuz/z5McDWuX9/YHphmleBi4GVC8tbLi+jOK8n28jXXnneapXeDZgA7FDFOu8P3Ffj7RjAijU8LmfkbTMJeAE4oKOOrxpvBwGvAP9tdF7mpQ7YALgJ+AB4L58XDyjs77F1ykf3fC5Zq6OX1W7JR9KRwNnAr4AB+WT0B2BIe58twbLAixExrQbz6ijvABtLWrSQNhR4sVYLUFJNKXQZ4N2ImFDBsrvNbXxEvB4RC7V0OXmtQtq9Oe304nQRceUcZvlAnk9fYGvSgf6YpDVbTdevMK+12pjPdUA/YLNW6duSTvS3zG29OlJ727RG3szb8QvAMcCFklavw3Kr9VVgcWAFSet31ELqtA9qQtLGwB3A3cCKwKLAYcB2DcjOAGAB4NlqZ9TuPmgnCvYlXV3tPpdpepKC05u5OxvoWYzYwI9IV6PjmRXNTyJdLX+elzGMViUEZl0Fd8vD+5OumiaRrpr3KaTfV/jcJsAjwIf5/yaFcXcBvwTuz/P5F9B/DuvWkv/zgcNzWldgHHAChZIPcA7wBvAR8BjwlZy+bav1fLKQj1NyPj4jHXR3Ad/J4/8IXFOY/6+B2/nfK/2WE3jLlfAlOX0n0gH0QZ7vaoXPjCGdsJ4CplBGyZM2ruBJJZ+T5zD9GGYv+fxPiQK4Ebi6rX3eTl4uAP7SKu0q4KzC8A7AqLwd/gP8X2Hc0sDfSRcY7wLnAasBk5lVQvug8F0Ykad9DTgO6FJYr/uBs/J8Ti6uK3APs5cY92wvb+2s9+a0uhLO+dot9/8NeIt0/N8DrFGYbnvgv6RjfxxwVE7vn/dDy5X3vYX1G5OPs6XysbZIYX7rABOB7nn4QOA54H3gVmDZVvn8C3B53u7ntRq3fM7vJODfwO+Z/XywX9727wLHtzq2TgSuBi4jfQe/Q7qtcCzwcv7MVS15J51gL8vpH5DOEwNKPc+Qvp9ntMr/9cCRuX8p4Jq8X14FvjeX/Xkf8PtS93dhnSblfblLYdyKpCD2Yd4vV+Z0kY7PCXn7PA2sWfz+AiuTjtGWmoc7Wn/nSef7M4DXgbdJ58Zerc6Xx5COv0vnehy3c5BvC0xjLicC4BfAg6SrmcVIX6JfFjIzLU/TnXTgfwosXDhgigdX6+Hl8op3AxbMG22VPG5J8peq1UGxCOnA3zd/bu88vGgef1fecSsDvfLwaXPb6aRg9lDhy3sr6eAuBp9vk65YupGC7VvAAm2tVyEfrwNr5M90Z/bg05tUutqfVLU1ERhU4sHZchBtk+d7NDAa6FE4mYwinXxbDpw/AH8o4cTXEcHnQODt1vu8hLxsmo+JlnXoSzo5rl04MU4ANiRdNAzN+emZh58kfSEXJJ2MvjynfJICz/VAn5zHF4FhhemnAUfkfdmr9Txab7e55a2E9Z65v0kn2F1IFzerFLZnH2ZdGI4qfHY8sy6MFgbWzf2nkk4k3XP3FfKFTqt9eAdwUGF+vwHOz/1DSMfZank7HAf8pzBt77y/tge+STqmexTGP0A6sfUAvpynvSyPW510QvxyHn9GXudi8Pkc2Dlvk17A90nnpkF5W/wJuCJPfwjwj5ynrsB6pFJkqeeZr5IuNlXYlp+Rgk4X0gXoCTmvK5CC2dfb2Je9SRc6W5Syv/Pw7oXl7En6ri+Zx10B/CyPKx7TX8956kcKRKsVPnMJ+ftLG98/Zg8+ZwE3kM6zffI2PLXV+f7XeXv3mutx3M5Bvg/wVjvTvAxsXxj+OjCmkJnPWq3IBGCjwgFTTvD5gHTQ9mqVh+JBsS/wcKvxDwD75/67gOMK474L3FLCl/wlYBVgZN4uswWfNj77PrnetPV6FfLxizbSvlMY3pB0FfoasHcZB+fxwFWF4S6kq9zNCyeTA9s7yc1hWXMKPpPz/vkAmFgYN4b2g8+2wOet9vkHhe6oueTnJeBbuf8gCveHSFenv2w1/QukqrqNSVel/xPkWueTdHKaCqxeSDukZf/n6V9vZx6tg88c81bCPticVNJtKaWMAvaaw7T98rL75uHXc96/0Gq6X5CC6//cl2q1D7/DrCtikU7AX83DN5MDcuG4+5Rc+iFdoL1D+j4vQLo63yWPW4Z04upd+PxlzAo+J5ADRx7unfdJMfjc0yrfzwFbFYaXJAWobqQA/T+lTUo/zyhvy5Z1P6iwXTZs43j4CXBxG9t2YN4/q5b6/W5j/ChgSO4fQaoRGNRqmi1JF0wbkUu0rb6/7QafvM6fAF8sjNsYeLWQz6nki+72uvbuM7wL9G+n7m4p0smxxWs5beY8YvZ7Op8CC1GmiPiEFOUPBcZL+qekVUvIT0ueBhaGiy3CSs3PpcD/A7YArm09UtJRkp7LLfc+IF2F929nnm/MbWREPES6YhKpyqBUs22DiJiRl1XcBnNddgXOiIh+uWtvvVsbSDqJFvUvzO+MuXx2BKk6BtKFx4jCuGWBH0n6oKUjlfaWyv9fi9LuN/YnlQZaH+fVbM+55a0Ub+Zts0hErB0RIwEkdZV0mqSXJX1EChwt6wDppLo98Jqku/P9BkglmNHAvyS9IunYOSz3GtI90CVJV/8zSFV0Let0TmF93iMduy3baSjpomhaREzO8xqaxy0FvBcRnxaWVdymSxWH83Tvtspb632wLHBtIT/PkUoZA0jf51uBkZLelHS6pO6lnmcinW1HkmpWIDXKuryw3KVa7duf5uW29j5pGy7Zxrg2SdpP0qjCvNdk1v49mrTNH86tFA/M+b2DVK38e2CCpAskfaHUZWaLkYL+Y4Vl35LTW7yT92272gs+D5DuCew8l2neJG3sFsvktEp8Qlq5FksUR0bErRGxDWlHPQ9cWEJ+WvI0rsI8tbiUVEq6qdUXBElfIe30PUhViv1IV3Vqyfoc5jmn9Jb5Hk4qvr6Z51+q2baBJJFObMVtMNdl19kuzDqBletSYKt8Et2IWScASCejUwpBrF9E9I6IK/K4ZeZwYdV620wkXTG3Ps6r2Z5zy1s1vkWq/tqadAG0XE4XQEQ8EhFDSNXk15EvaiJiUkT8KCJWIN0vPFLSVq1nHhHvk+6T7pmXNTKfiFvW6ZBW69QrIv4jaRDp6vvbkt7KPwnYDdheUn9SdeAikorf/6UL/eNJ1WdpZaRepGru2bLXavgNYLtW+VkgIsZFxOcRcVJErE6qVt+BfBFT4nkGUhXXbpKWJZV2riks99VWy+0TEdu3sT0/JZ1nvzmHZcwmL+tC0oXwovlc8wyz9u9bEXFQRCxFKuH+QdKKedy5EbEeqQpzZeDHpSyzYCKpJmuNwnr1jVkNkaCM78Fcg09EfEgq7v5e0s6SekvqLmk7Safnya4AjpO0WD6ITiAVlysxCviqpGUk9SUVVQGQNEDSEEkLkgLix6QrhtZuAlaW9C1J3STtSdrYN1aYJwAi4lVSdc3P2hjdh1Rl8A7QTdIJpPrjFm8Dy5XTok3SyqSbgN8mXdEfLWntEj9+FfANSVtJ6k66BzWFVM0wT8hX6MtL+h2puH5SJfOJiDGkG7ZXALdFRLFUeyFwqKQNc4vCBSV9Q1IfUlPW8cBpOX0BSZvmz70NDJLUIy9jOmmbniKpTz4BHEl5x/nbpLr/UvKGpEskXVLe1gDSsTiFVCroTWqlSp5nD6XfqvSNiM9J9zZm5HE7SFoxX6h8SCohtPX9Avgr6US9W+5vcT7wE0lr5Hn2lbR7HrcvqdpnFWDt3K1Muqe6d0S8Rvo5x4k5nxsDOxbmfTWwo6RN8n45kVkXd3NyPmmfLZvzs5ikIbl/C0lfktQ1b4fPgRllnGeIiCdIJ+Q/A7dGxAd51MPAJEnHKP2WsaukNTXn1n1HA/tL+rFyq1pJa0ka2ca0C5JO8O/k6Q4glXzIw7vnQA+pVBV5vdbPx1p30kX+5Dmt15zkGpQLgbMkLZ6XN1DS18uZT4t2T4YRcSbpi3YcaYXfIEXd6/IkJ5MOmqdILSgez2lli4jbgCvzvB5j9oDRJefjTVJxfjNSc8TW83iXdBXzI9IX8GjSbz4mVpKnVvO+LyLaKtXdSip+vkiqjpnM7FUALT+gfVfS4+0tJ1+NXwb8OiKejIiXSMX2SyX1LCGfL5CC1u9IX44dgR0jYupclnm+pPPbm3cNbCzpY9IX/i5SkF4/Ip6uYp7DSaWSYpUbEfEoqS7+PNIXcTSp3r4loOxIqst+nXQS3DN/9A5SS8G3JLUcN0eQvrSvkILdX0ktt0p1IjA8V1fsMbe8ZUuTWtCVawTpGBxHagn1YKvx+wJjlKrkDiXdvwRYidTC7GPSlfgfIuLOOSzjhjz9WxHxZEtiRFxLutk8Ms//GWY1Fx6a5/lWsSMFiJaqt31I9xBaWgxeSQoARMSzpH0wknTR8DHp/vGUuWyLc3Je/yVpUt4WG+ZxS5AC2kek6ri7SaXoks4zBX8llTJnBuF8bO1ACrCvMitA9W1rBhHxH1KpcEvgFUnvke7b3NTGtP8FziTto7eBLzH7cbI+8FD+jt0AfD8iXiF9zy4kHWstLQZ/M5f1mpNjSMfqg3kf/5t0QVG2lpYaZjaPyFf2T5Juhn/e6Pw0iqQrgecj4udtjFuI1DBgpVwrYZ2Mn+1mNo+JiKkRsdr8Fnhy1dAXJXWRtC3p3tV1hfE75qr/BUlNrZ9mVoMK62QcfMxsXrEEqSr2Y+Bc4LB8X6XFEGb9mH0lUvNyV910Uq52MzOzunPJx8zM6q7TPHyv2al7r1DPNhvD2DxqnVUGtT+RzXMef/yxiRGxWPtTzlnXLywbMe2zkqaNz965NSK2rWZ5zcjBZx6hnn3pueZ+7U9o84z77zu9/YlsntOru1o/AaVsMe0zeq6yR0nTTh71+3Kf+DFfcPAxMyuboKq3oJiDj5lZuQR06droXHRqDj5mZpVQe0/3sblx8DEzK5ur3arl4GNmVgmXfKri4GNmVi7hkk+VHHzMzMoml3yq5OBjZlYJt3arioOPmVnZ3OCgWg4+ZmblEq52q5KDj5lZJVzyqYqDj5lZ2VztVi0HHzOzSnRxtVs1HHzMzMrlZ7tVzcHHzKxsrnarloOPmVkl3NqtKg4+ZmaVcMmnKg4+Zmblkh+vUy0HHzOzSrjkUxUHHzOzssmt3ark4GNmVglXu1XF5UYzs3K1vM+nlK69WUk/lPSspGckXSFpAUnLS3pI0mhJV0rqkaftmYdH5/HLdeyKdhwHHzOzsqkmwUfSQOB7wOCIWBPoCuwF/Bo4KyJWBN4HhuWPDAPez+ln5ek6JQcfM7NKtLR4a69rXzegl6RuQG9gPLAlcHUePxzYOfcPycPk8VtJnbP+z8HHzKwSXbqW1kF/SY8WuoNbZhER44AzgNdJQedD4DHgg4iYlicbCwzM/QOBN/Jnp+XpF63H6taaGxyYmZVLZT1eZ2JEDG57NlqYVJpZHvgA+BuwbU3yOI9zycfMrBK1qXbbGng1It6JiM+BvwObAv1yNRzAIGBc7h8HLJ0Wr25AX+DdWq9aPTj4mJlVQFJJXTteBzaS1Dvfu9kK+C9wJ7BbnmYocH3uvyEPk8ffERFR0xWrE1e7mZmVKb1Fu/r7/BHxkKSrgceBacATwAXAP4GRkk7OaRflj1wEXCppNPAeqWVcp+TgY2ZWLuWuBiLi58DPWyW/AmzQxrSTgd1rs+TGcvAxMyub6NLFdy2q4eBjZlaBTvrzmnmGg4+ZWQUcfKrj4GNmVq4a3vOZXzn4mJmVSZTUjNrmwsHHzKwCDj7VcfAxM6uAW7tVx8HHzKxcvudTNQcfM7MKuNqtOg4+ZmZlcoOD6jn4mJlVwMGnOg4+ZmaVcOypioOPmVm55NZu1XLwMTOrgKvdquPgY2ZWJjc4qJ6Dj5lZJRx7quLgY1U7Yq+vsP9O6xMBz778FgeffBX/PPcgFurdE4DFF16IR//7OnscM4KvrLsCfzt9KGPefB+A6+96hlP/8u9GZt+A6dOns+mGg1lq4ED+fv2N3HXnHfzk6KOY+vlU1llnPc6/8CK6dfPpYibVrtpN0irAlYWkFYATgBE5fTlgDLBHRLyfX7d9DrA98Cmwf0Q8XpPM1JGPJqvKUot9ge/usSnr7H0Gk6dM47KT92H3bdZi60P/OHOaK07dl3/c8+zM4ftHjeGbR13ciOzaHJx37jmsstpqTProI2bMmMF3DhzKzbfezkorr8wvTjyBy0YMZ/8DhzU6m/OUWgWfiHgBWDvPsyswDrgWOBa4PSJOk3RsHj4G2A5YKXcbAn/M/zsVN9ewqnXr2oVePbvTtWsXei3Qg/HvfDRzXJ/ePdlsvS/yj7ufncscrJHGjh3LLTf/kwMO/A4A7777Lj169GCllVcGYMutt+G6a69pZBbnSeqikroybQW8HBGvAUOA4Tl9OLBz7h8CjIjkQaCfpCVrsU715OBjVXnznY84+/K7efG6n/Lqjcfx0SeTuf3hl2aO33GzNbjr0dFM+nTKzLQNv7QMD136A64760BWW35AI7JtBT/+0Q845dTTZzYd7t+/P9OmTeOxRx8F4NprrmbsG280MovzJEkldWXaC7gi9w+IiPG5/y2g5csyECjukLE5rVNx8CmQNF3SqEK3XGHc2ZLGSepSSNtf0nm5v4uk4ZL+omSMpKcL8zq3/mvU8fr16cUOX12D1XY9jRV2OJkFF+jOXtuuM3P8Hl9bm6tuGzVzeNTz41hl51PZcN+z+eNV/+Gq04c2ItuW3fTPG1l8scVZd731ZqZJYsRlIzn6qB/y5Y03oE+fPnTt2rWBuZz3lBp4cvDpL+nRQnfwHObZA9gJ+FvrcRERQHToStWZ7/nM7rOIWLt1Yg44u5CuNjYD7mw1XsD5QHfggIiIfNBtERETOzzXDbTl+isy5s33mPjBJwBcd9czbPSlZRl5yxMs2rc3g1dfmj2PGTFz+mIJ6NYHnuecbjuzaN/evPvhp3XPu8ED/7mfG2+8gVtuuYkpkyfz0UcfccB+3+biEZdx+133AvDv2/7FSy+92OCcznvKKNVMjIjBJUy3HfB4RLydh9+WtGREjM/VahNy+jhg6cLnBuW0TsUln9JsDjxLurG3dxvjzwUWBfaLiBl1zFfDvfH2B2yw5jL06tkdgC0Gr8gLY9J3ZJct/4+b73uOKVOnzZx+wCILzewfvPrSdJEceBrol6ecystjxvLC6DGMuHwkm2+xJRePuIwJE9I+nDJlCmf+5tccdPChDc7pvKcDqt32ZlaVG8ANQEvVwFDg+kL6frmGZSPgw0L1XKfhks/seklqqSN6NSJ2yf0tB8X1wK8kdY+Iz/O4bwHPAZtHxLTZZ8edkqbn/uERcVZxZC5+pyJ4jy/Udk3q5JFn3+DaO57mgeHfZ9r0GTz54jguuu4hAHbfZi3OGDFbIZFdtvw/Dtp1I6ZNn8HkKZ+z3/F/bUS2rR1nnfkbbr7pRmbMmMFBBx/G5lts2egszXMqaEww53lJCwLbAIcUkk8DrpI0DHgN2COn30RqZj2a1NT6gJplpI6UqhINQNLHEbFQq7QewKvAqhExSdLfgb9ExI2S9ge+DawK7BkR9xc+NwYYXGq1W5eFloiea+5XozWxenj/vtMbnQWrQK/ueqzEarA56rnESjFon9Ju477y2+2rXl4zcrVb+74O9AOezgHly8xe9fY86YrkSklr1D97ZlZvAqTSOmubg0/79ga+ExHLRcRywPLANpJ6t0wQEf8BDgNulLRMY7JpZvVTVms3a4Pv+cxFDjDbAjPvtkbEJ5LuA3YsThsR/5DUH7hF0ldycvGez1MR4Xo1sybhuFIdB5+C1vd7IuJTYJE2ptu1MHhJIf1ioOW5McvVPodmNq9wqaY6Dj5mZmWSoGtXB59qOPiYmVXABZ/qOPiYmVXA1W7VcfAxMyuXm1FXzcHHzKxM6Xc+jj7VcPAxMyubf8NTLQcfM7MKdKnhs93mRw4+Zmbl8j2fqjn4mJmVyfd8qufgY2ZWAcee6jj4mJlVwCWf6jj4mJlVwLGnOg4+ZmZlktzarVp+n4+ZWdlq+z4fSf0kXS3peUnPSdpY0iKSbpP0Uv6/cJ5Wks6VNFrSU5LW7dBV7SAOPmZmFajxm0zPAW6JiFWBtYDngGOB2yNiJeD2PAywHbBS7g4G/ljD1aobBx8zswrUquQjqS/wVeAigIiYGhEfAEOA4Xmy4cDOuX8IMCKSB4F+kpas9fp1NAcfM7NylVjqybGnv6RHC93Brea2PPAOcLGkJyT9WdKCwICIGJ+neQsYkPsHAm8UPj82p3UqbnBgZlYmAV26lHztPjEiBs9lfDdgXeCIiHhI0jnMqmIDICJCUlSU2XmUSz5mZhWo4T2fscDYiHgoD19NCkZvt1Sn5f8T8vhxwNKFzw/KaZ2Kg4+ZWQVqdc8nIt4C3pC0Sk7aCvgvcAMwNKcNBa7P/TcA++VWbxsBHxaq5zoNV7uZmZWr9g8WPQK4XFIP4BXgAFLh4CpJw4DXgD3ytDcB2wOjgU/ztJ2Og4+ZWZlU4/f5RMQooK37Qlu1MW0Ah9ds4Q3i4GNmVgE/Xqc6Dj5mZhXo6sfrVMXBx8ysTKklm4NPNZoq+Ej6wtzGR8RH9cqLmTU3F3yq01TBB3gWCNJvwFq0DAewTCMyZWbNxyWf6jRV8ImIpdufysyseo491WnaH5lK2kvST3P/IEnrNTpPZtYcRG5uXcKfta0pg4+k84AtgH1z0qfA+Y3LkZk1FYmuXUrrrG1NVe1WsElErCvpCYCIeC//ctjMrCZc7VadZg0+n0vqQmpkgKRFgRmNzZKZNQsBXRx9qtKU1W7A74FrgMUknQTcB/y6sVkys2ZS4zeZzneasuQTESMkPQZsnZN2j4hnGpknM2submpdnaYMPllX4HNS1VuzlvDMrAFcqqleU56UJf0MuAJYivSipb9K+kljc2VmzaSrVFJnbWvWks9+wDoR8SmApFOAJ4BTG5orM2sarnarTrMGn/HMvm7dcpqZWdVSa7dG56Jza6rgI+ks0j2e94BnJd2ah78GPNLIvJlZEynxFdk2Z00VfICWFm3PAv8spD/YgLyYWROrZeyRNAaYBEwHpkXEYEmLAFcCywFjgD0i4n2lqHcO6VXanwL7R8TjtctNfTRV8ImIixqdBzObP3RAyWeLiJhYGD4WuD0iTpN0bB4+BtgOWCl3GwJ/zP87laYKPi0kfRE4BVgdWKAlPSJWblimzKxpiLq8yXQIsHnuHw7cRQo+Q4ARERHAg5L6SVoyIjrVfe2mbGoNXAJcTDpGtgOuIhVfzcxqQiV2QH9Jjxa6g9uYXQD/kvRYYfyAQkB5CxiQ+wcCbxQ+OzandSpNWfIBekfErZLOiIiXgeMkPQoc3+iMmVnnJ5X1bLeJETG4nWm+HBHjJC0O3Cbp+eLIiAhJUUle51XNGnym5AeLvizpUGAc0KfBeTKzJlLLWz4RMS7/nyDpWmAD4O2W6jRJSwIT8uTjgOKLMwfltE6lWavdfggsCHwP2BQ4CDiwoTkys6ai3Ny6va6E+SwoqU9LP+mnIc8ANwBD82RDgetz/w3Afko2Aj7sbPd7oElLPhHxUO6dxKwXypmZ1YSo6YviBgDX5kDVDfhrRNwi6RHgKknDgNeAPfL0N5GaWY8mNbU+oFYZqaemCj65uDrHetGI2LWO2TGzZlXDB4tGxCvAWm2kvwts1UZ6AIfXZumN01TBBziv0Rmo1ForD+KuO/3ouc5k4fX/X6OzYA3kJxxUp6mCT0Tc3ug8mNn8oVlvmNdLUwUfM7N6EC75VMvBx8ysAn6qdXWaOvhI6hkRUxqdDzNrLlJdHq/T1Jqy2lLSBpKeBl7Kw2tJ+l2Ds2VmTaSLSuusbU0ZfIBzgR2AdwEi4klgi4bmyMyailRaZ21r1mq3LhHxWqsbgtMblRkzay7pTaaOLNVo1uDzhqQNgJDUFTgCeLHBeTKzJtKs1Ub10qzB5zBS1dsywNvAv3OamVlNuOBTnaYMPhExAdir0fkws+Yk1fTZbvOlpgw+ki6kjWe8RURbL3EyMyubY091mjL4kKrZWiwA7MLsb/4zM6uYGxxUrymDT0TM9spsSZcC9zUoO2bWhBx7qtOUwacNyzPr/edmZtXxD0ir1pTBR9L7zLrn0wV4Dzi2cTkys2YjHH2q0XTBR+mXpWsx653mM/LLl8zMakJAtxr+0Cf/HvFRYFxE7CBpeWAksCjwGLBvREyV1BMYAaxHeoLLnhExpnY5qZ+m+51UDjQ3RcT03DnwmFnNSSqpK9H3gecKw78GzoqIFYH3gWE5fRjwfk4/K0/XKTVd8MlGSVqn0Zkws+aUWrvV5sGikgYB3wD+nIcFbAlcnScZDuyc+4fkYfL4rdRJXyzUVNVukrpFxDRgHeARSS8Dn5COlYiIdRuaQTNrDrV9aOjZwNFAnzy8KPBBPpcBjAUG5v6B5J+NRMQ0SR/m6SfWLDd10lTBB3gYWBfYqdEZMbPmVsbvfPpLerQwfEFEXAAgaQdgQkQ8JmnzGmdxntZswUcAEfFyozNiZs2rpdqtRBMjYvAcxm0K7CRpe9IP4r8AnAP0K9TkDGJWA6oDvm5bAAAUEUlEQVRxwNLAWEndgL7kV8d0Ns0WfBaTdOScRkbEb+uZGTNrVqJrDerdIuInwE8AcsnnqIjYR9LfgN1ILd6GAtfnj9yQhx/I4+/orI2qmi34dAUWAjfAN7OOIzr8CQfHACMlnQw8AVyU0y8CLpU0mvT7xU77AOVmCz7jI+IXjc6EmTW5DnjCQUTcBdyV+18BNmhjmsnA7rVdcmM0W/BxicfM6sIPFq1OswWfrRqdATNrfnWodmt6TRV8IuK9RufBzOYPfplcdZoq+JiZ1YNo3sfD1IuDj5lZuUQ5z22zNjj4mJlVwKGnOg4+ZmZl8mu0q+fgY2ZWAYee6jj4mJmVTXRxa7eqOPiYmZXJrd2q5+BjZlYBt3arjoOPmVkFHHqq4+BjZlYu/86nag4+ZmZl8j2f6jn4mJlVwL/zqY6Dj5lZBRx7quPgY2ZWplTt5uhTDVdbmplVQCqta38+WkDSw5KelPSspJNy+vKSHpI0WtKVknrk9J55eHQev1xHrmdHcfAxMyubSv4rwRRgy4hYC1gb2FbSRsCvgbMiYkXgfWBYnn4Y8H5OPytP1+k4+JiZVaBWJZ9IPs6D3XMXwJbA1Tl9OLBz7h+Sh8njt1InbPft4GNmViYJukoldUB/SY8WuoP/d37qKmkUMAG4DXgZ+CAipuVJxgIDc/9A4A2APP5DYNGOXePac4MDM7MKlFHWmBgRg+c2QURMB9aW1A+4Fli1utzN+1zyMTOrQA3v+cwUER8AdwIbA/0ktRQQBgHjcv84YGmAPL4v8G4t1qmeXPKxmnnpxRc4YN9vzRx+bcwr/OT4E/nyVzbjyO99l8mTp9CtWzfOPPt3rLf+Bg3MqR2xzxbsv8smRATPjn6Tg39+GRuttQKn/nAXenTvyhPPvcGhJ13O9Okz6NenF3868dssP6g/U6Z+ziEnXs5/Xx7f6FVoqPQyuRrNS1oM+DwiPpDUC9iG1IjgTmA3YCQwFLg+f+SGPPxAHn9HRERtclM/LvlYzay08irc99Bj3PfQY9z9n4fp1as3O+y0Mz8/7liO+enx3PfQY/z0+J9zwnHHNjqr87WlFuvLd/fejE33OZ3Bu/+Krl26sOd2g/nzL/Zlv2MvZvDuv+L18e/x7R03BODoYV/nyRfGssGepzLs+Es548e7NXgN5g01LPksCdwp6SngEeC2iLgROAY4UtJo0j2di/L0FwGL5vQjgU75hXLJxzrE3XfezvIrrMAyyyyLJCZNmgTARx99xJJLLtXg3Fm3rl3p1bM7n0+bTq8FevDpZ1OZ+vk0Rr8+AYA7Hnyeow78GsOve4BVV1iCMy++DYAXx7zNskstwuKL9GHCe5MauQoNV6v2ZRHxFLBOG+mvAP9TRRARk4Hda7P0xnHJxzrENX+7im/uvhcAp57+W0746TGssdJyHP+ToznhF6c0OHfztzff+ZCzR9zOizf/kldvO4WPPv6Mq//1ON26dWXd1ZcBYJet12bQgIUBePrFcQzZci0ABq+xLMssuQgDB/RrWP7nBaKs1m7WBgefAknTJY2S9Iykf+SWJ0haTtJneVxLt1/hc2tLCknbtprfx62XMT+YOnUqN9/0D3beNVXPXHThnzjl9DN59qUx/Or0MznisIManMP5W78+vdhh8y+x2g4/Z4Wv/YwFe/Vgr+3XZ79jL+b0H+3KvZcexaRPpjB9xgwAzrj4Nvr26c2DI4/lsL0248kXxjJ9+owGr0Wj1fRHpvMlV7vN7rOIWBtA0nDgcKDlMv3llnFt2Bu4L/+/pcNzOY+77dZbWGvtdVh8wAAARl4+gl+fcRYAO++6G9/77v/8zMHqaMsNV2XMm+8y8f10bXTdHU+y0VrLM/KmR9h62NkAbLXRqqy07OIATPpkMoeceNnMzz//z5N4dVyna1xVWyX+gNTmzCWfOXuAWT/qmqP8y+Ldgf2BbSQt0MH5mudd87eRM6vcAJZYcinuu/duAO656w5W+OJKjcqaAW+89R4bfGl5ei3QHYAtNliFF159m8UWXgiAHt278aP9t+HCq+8DoO9CvejerSsAB+yyCfc9PppJn0xuTObnISqxs7a55NMGSV2BrZjVugTgi/kXyC2OiIh7gU2AVyPiZUl3Ad8ArilxOQcDBwMsvfQytch6w33yySfcece/Oet3f5yZds7vz+fYo45k2vRpLNCzJ+ec98e5zME62iPPvMa1/36CB/56DNOmz+DJ58dy0TX3c+LhO7DdV9akSxdx4d/u5e5HXgRg1RWW4MJf7EtE8NzL4zn0pMsbvAaNl5paO7RUQ52weXiHkTQdeJpU4nkO2CIipuenxt4YEWu28ZnzgCcj4kJJOwH7RcRuedzHEbFQKcteZ93Bcdf9D9VoTaweltjk+43OglVg8qjfP9beEwfas9qX1omLr7uzpGk3XnHhqpfXjFztNruWez7Lki5uDp/bxLmE9E3gBEljgN+Rnkjbp6MzamaN5QYH1XHwaUNEfAp8D/hR4fEWbdkKeCoilo6I5SJiWVKV2y71yKeZNU6tnmo9v3LwmYOIeAJ4itSCDfI9n0L3vTzu2lYfvabwmd6Sxha6I+uTezPraG5wUB03OChofX8mInYsDPYqcR43kJ69REQ4uJs1K0eWqjj4mJmVKZVqHH2q4eBjZlYu1e6p1vMrBx8zs0o4+FTFwcfMrGxuRl0tBx8zswq4GXV1HHzMzMrkZtTVc/AxM6uEo09V/DsUM7MKdJFK6tojaWlJd0r6r6RnJX0/py8i6TZJL+X/C+d0STpX0mhJT0lat4NXtUM4+JiZVaCGTziYBvwoIlYHNgIOl7Q6cCxwe0SsBNyehwG2A1bK3cFAp3xMvIOPmVm5So08JUSfiBgfEY/n/kmkJ+oPBIYAw/Nkw4Gdc/8QYEQkDwL9JC1Zk/WqI9/zMTOrQBlNrftLerQwfEFEXNDmPNPrW9YBHgIGRMT4POotYEDuHwi8UfjY2Jw2nk7EwcfMrEyirKbWE0t5n4+khUgPJv5BRHykwgIiIiQ11cvXXO1mZlaBWj7VWlJ3UuC5PCL+npPfbqlOy/8n5PRxwNKFjw/KaZ2Kg4+ZWQUkldSVMB8BFwHPRcRvC6NuAIbm/qHA9YX0/XKrt42ADwvVc52Gq93MzCpQwyccbArsCzwtaVRO+ylwGnCVpGHAa8AeedxNwPbAaOBT4ICa5aSOHHzMzCpQq9gTEffNZXZbtTF9AIfXaPEN4+BjZlYJP+GgKg4+ZmZl8svkqufgY2ZWLr9MrmoOPmZmlXDwqYqDj5lZ2fwyuWo5+JiZVcAvk6uOg4+ZWZn8MrnqOfiYmVXC0acqDj5mZhUo5UVxNmcOPmZmFXDoqY6Dj5lZueQGB9Vy8DEzq4ijTzUcfMzMylTmy+SsDQ4+ZmYVcOypjoOPmVkF3NqtOg4+ZmaVcOypil+jbWZWAZXYtTsf6S+SJkh6ppC2iKTbJL2U/y+c0yXpXEmjJT0lad1ar1e9OPiYmZVJKr0rwSXAtq3SjgVuj4iVgNvzMMB2wEq5Oxj4Yy3WpxEcfMzMKqAS/9oTEfcA77VKHgIMz/3DgZ0L6SMieRDoJ2nJGq1SXTn4mJlVolb1bm0bEBHjc/9bwIDcPxB4ozDd2JzW6bjBgZlZBcp4k2l/SY8Whi+IiAtK/XBEhKQoJ2+dgYOPmVnZynqZ3MSIGFzmAt6WtGREjM/VahNy+jhg6cJ0g3Jap+NqNzOzMrU84aBGDQ7acgMwNPcPBa4vpO+XW71tBHxYqJ7rVFzyMTNrIElXAJuTqufGAj8HTgOukjQMeA3YI09+E7A9MBr4FDig7hmuEQcfM7MK1OoBBxGx9xxGbdXGtAEcXpslN5aDj5lZBcq452NtcPAxMyuTVFZrN2uDg4+ZWSUcfKri4GNmVgFXu1XHwcfMrAJ+o0J1HHzMzCrg2FMdBx8zswrIRZ+qOPiYmZWp5QkHVjml3yxZo0l6h/RL5mbUH5jY6ExYWZp5ny0bEYtVMwNJt5C2USkmRkTr9/XM9xx8rMNJerSCBytaA3mfWUfzg0XNzKzuHHzMzKzuHHysHkp+cZbNM7zPrEP5no+ZmdWdSz5mZlZ3Dj5mZlZ3Dj5Wd5IWbXQezKyxHHysriR9DThb0sLy80nmed5H1lEcfKxucuD5DXBRRLyPH+/UGSwKIMnnCqspH1BWF5K2JQWeQyLiLklLAz+VVOojSqyOlCwOvCZpp4iY4QBkteSDyeplQ6B3RDwoaTHgWmBCRDTr88M6tUgmAAcAF0vaviUASera6PxZ5+dqD+tQkjYFNouIkyStIOkB0kXPnyLiwsJ0S0fEGw3LqLUpIq6SNBUYKWnviPhnSwlI0o5pkrixsbm0zsglH+sQhSqarwF9ASJiKHAPsHCrwLMPcK6kPnXPqM1G0raSTpC0SUtaRFxHKgGNlLRDLgEdApwPPN+ovFrn5pKPdZS+wPvAZGBmNU1EHCNpMUl3RsQWkr4J/BDYLyImNSivNstXgcOAbSU9A/weeCUirskt3y6RdCOwAbB9RIxuYF6tE3PJx2pO0vLAqZJWAN4G+uT0XgARcSDwiqTxwE9Jgee/jcqvzeYfwL+BXYFPgT2BSyWtEBFXA3sAOwHfiognG5dN6+xc8rGOsAAwATgEWBxouZfTU9LkfDN7mKSjgJsceBpL0qrAlIh4NSIekNQT+EFE/EDSt4BjgYUkjQPOBpaIiKmNzLN1fn6wqHUISWsCXweOAJYBbgDWAd4EpgIfAztHxOcNy6QhaXvgeGDflio0SSsCBwMvkEqm3yHtt02AuyLi1QZl15qISz5WE5I2Jx1P90bElIh4RtLnwILAasAlwNPAQqRquHcceBpL0tdJgefEiBgtaSEggHdJFwyHA9tFxD15+hfDV6tWIy75WNUk9QVuBFYAzgGmR8SZedwKwF7AksClEfFwwzJqM0n6EvAksHVE3CHpi8CfgCMj4qk8fjiwe0S83Mi8WnNygwOrWkR8SAo+U4EXge0kXSJpF+AdUoup94E9JC3g54U1TmHbjyH90HcPScuRXh53aw48XSLiaVKz+M39o1LrCA4+VjFJSxROZr8FbgYmRcTWQI+cdg+wWf7/q4iY7KqbhuoBkJu170OqBn0ZuC4ifpMDzwxJa5Oq326JiOmNy641Kwcfq4ikb5AaEfQv/KD0bWDtXNW2EbA/qXXUrsATEfFeI/JqSX6w60hJJ0raNSImk1ok/hXYGCAHnmHAucCFETGucTm2ZuZ7Pla2/JDQnwGnRMQtknpExNT8sNBHSQ0K9mh57Iqk3hHxaQOzPN/L++wkYASp+ftSwOkR8VJ+ssQfSI0N/gUcChwaEc80Kr/W/Bx8rCySFgEmArtGxHX5RvUJwI8jYoKkg4C1IuL/tQSlhmbYivtsSET8Q9Ig4BTg/Ih4IE/TA7iS9Dik9f3bK+tornazsuSqsx2BEyT9H+lG9RP5CciQWlBtKWllB555Q2GfnSbpCxExFugP/EbS2ZKOJDWJHwas6MBj9eDf+VjZ8pONpwOjgJ9GxNmSukbE9Ih4WNIVjc6jzS7vsxnAY5JuIV14ngksRvoR6RrAD31fzurF1W5WMUnbAL8DNoyIDyX1jIgpjc6XzZmkrUn3dZaMiLdzWhdgEb9byerJ1W5WsYi4jfRE6oclLeLAM++LiH8D3wDuzG8qJSJmOPBYvbnazaoSETfnm9X/ljSY/BLMRufL5qywz26RNDgiZjQ6Tzb/cbWb1YSkhSLi40bnw0rnfWaN5OBjZmZ153s+ZmZWdw4+ZmZWdw4+ZmZWdw4+ZmZWdw4+1mlImi5plKRnJP1NUu8q5rW5pJYHn+4k6di5TNtP0ncrWMaJko4qNb3VNJdI2q2MZS0nyQ8CtU7Dwcc6k88iYu2IWJP04rpDiyOVlH1MR8QNEXHaXCbpB5QdfMxszhx8rLO6F1gxX/G/IGkE8AywtKSvSXpA0uO5hLQQpNcKSHpe0uOkdwyR0/eXdF7uHyDpWklP5m4T4DTgi7nU9Zs83Y8lPSLpKUknFeb1M0kvSroPWKW9lZB0UJ7Pk5KuaVWa21rSo3l+O+Tpu0r6TWHZh1S7Ic0awcHHOh1J3YDtgKdz0krAHyJiDeAT4Dhg64hYl/R+oSMlLQBcSHq683rAEnOY/bnA3RGxFrAu8CxwLPByLnX9OL+UbSVgA2BtYD1JX5W0HrBXTtseWL+E1fl7RKyfl/cc6cnSLZbLy/gGcH5eh2HAhxGxfp7/QZKWL2E5ZvMUP17HOpNekkbl/nuBi0gvRXstIh7M6RsBqwP35zd89wAeAFYFXo2IlwAkXQYc3MYytgT2A8ivj/5Q0sKtpvla7p7IwwuRglEf4NqWF+dJuqGEdVpT0smkqr2FgFsL467Kj755SdIreR2+Bvxf4X5Q37zsF0tYltk8w8HHOpPPImLtYkIOMJ8Uk4DbImLvVtPN9rkqCTg1Iv7Uahk/qGBelwA7R8STkvYHNi+Ma/34kcjLPiIiikEKSctVsGyzhnG1mzWbB4FNJa0IIGlBSSsDzwPL5TevAuw9h8/fDhyWP9tVUl9gEqlU0+JW4MDCvaSB+QnR9wA7S+qVX029Ywn57QOMl9Qd2KfVuN0ldcl5XgF4IS/7sDw9klaWtGAJyzGbp7jkY00lIt7JJYgrJPXMycdFxIuSDgb+KelTUrVdnzZm8X3gAknDgOnAYRHxgKT7c1Pmm/N9n9WAB3LJ62Pg2xHxuKQrSW9znQA8UkKWjwceAt7J/4t5eh14GPgCcGhETJb0Z9K9oMeVFv4OsHNpW8ds3uEHi5qZWd252s3MzOrOwcfMzOrOwcfMzOrOwcfMzOrOwcfMzOrOwcfMzOrOwcfMzOru/wMgnoxWUIrOrAAAAABJRU5ErkJggg==\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "linear_clf = PassiveAggressiveClassifier(n_iter=50)\n", + "\n", + "linear_clf.fit(tfidf_train, y)\n", + "pred = linear_clf.predict(tfidf_test)\n", + "score = metrics.accuracy_score(yt, pred)\n", + "print(\"accuracy: %0.3f\" % score)\n", + "cm = metrics.confusion_matrix(yt, pred, labels=['FAKE', 'REAL'])\n", + "plot_confusion_matrix(cm, classes=['FAKE', 'REAL'], title= \"TFIDF Vectorite, PassiveAggressive Classifier\")" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/jonas/.local/lib/python3.6/site-packages/sklearn/naive_bayes.py:472: UserWarning: alpha too small will result in numeric errors, setting alpha = 1.0e-10\n", + " 'setting alpha = %.1e' % _ALPHA_MIN)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Alpha: 0.00 Score: 0.87849\n", + "Alpha: 0.10 Score: 0.91215\n", + "Alpha: 0.20 Score: 0.90637\n", + "Alpha: 0.30 Score: 0.90005\n", + "Alpha: 0.40 Score: 0.89216\n", + "Alpha: 0.50 Score: 0.88795\n", + "Alpha: 0.60 Score: 0.88217\n", + "Alpha: 0.70 Score: 0.87217\n", + "Alpha: 0.80 Score: 0.86902\n", + "Alpha: 0.90 Score: 0.86113\n" + ] + } + ], + "source": [ + "clf = MultinomialNB(alpha=0.1)\n", + "last_score = 0\n", + "for alpha in np.arange(0,1,.1):\n", + " nb_classifier = MultinomialNB(alpha=alpha)\n", + " nb_classifier.fit(tfidf_train, y)\n", + " pred = nb_classifier.predict(tfidf_test)\n", + " score = metrics.accuracy_score(yt, pred)\n", + " if score > last_score:\n", + " clf = nb_classifier\n", + " print(\"Alpha: {:.2f} Score: {:.5f}\".format(alpha, score))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* try to get most important features" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FAKE -4.986418446992282 2016\n", + "FAKE -4.031739222213152 october\n", + "FAKE -3.2450737607438835 hillary\n", + "FAKE -3.163046832110649 article\n", + "FAKE -3.0797196307769865 november\n", + "FAKE -2.9126602525203786 election\n", + "FAKE -2.7767455973246777 share\n", + "FAKE -2.5799080044431215 establishment\n", + "FAKE -2.5391003972219663 wikileaks\n", + "FAKE -2.5124769239037335 mosul\n", + "FAKE -2.5044337732634636 source\n", + "FAKE -2.376392497005016 oct\n", + "FAKE -2.323456790625324 print\n", + "FAKE -2.296605039295202 advertisement\n", + "FAKE -2.1765893008482884 podesta\n", + "FAKE -2.1254730787507397 corporate\n", + "FAKE -2.1186888933652006 comments\n", + "FAKE -2.0814842675932406 russia\n", + "FAKE -1.9405914175220103 watch\n", + "FAKE -1.8706195854259284 war\n", + "FAKE -1.867386639102956 posted\n", + "FAKE -1.8056831543703649 com\n", + "FAKE -1.8054376409136181 navigation\n", + "FAKE -1.7877228165152776 26\n", + "FAKE -1.7685005227604957 stated\n", + "FAKE -1.7402325468939963 dakota\n", + "FAKE -1.7271994282637921 jewish\n", + "FAKE -1.7263968946984054 ayotte\n", + "FAKE -1.7200570381137112 donald\n", + "FAKE -1.6535827908878833 pipeline\n", + "\n", + "REAL 5.015301141104506 said\n", + "REAL 3.0775436014367448 says\n", + "REAL 2.6550720089727093 say\n", + "REAL 2.5730784312333856 gop\n", + "REAL 2.537624697551335 debate\n", + "REAL 2.37704059797269 islamic\n", + "REAL 2.3533175343115773 friday\n", + "REAL 2.324743477167939 jobs\n", + "REAL 2.285274612684968 conservative\n", + "REAL 2.2415729758446785 marriage\n", + "REAL 2.2145701146991454 rush\n", + "REAL 2.1909548260953593 tuesday\n", + "REAL 2.164804177946772 continue\n", + "REAL 2.1533786245547075 fox\n", + "REAL 2.134959398360091 cruz\n", + "REAL 1.9490044497446428 manafort\n", + "REAL 1.9042544756391377 candidates\n", + "REAL 1.8970529284348485 convention\n", + "REAL 1.8966333613592279 parties\n", + "REAL 1.8807450356106956 recounts\n", + "REAL 1.807064184984985 paris\n", + "REAL 1.8062833270371794 state\n", + "REAL 1.7996444826854578 decision\n", + "REAL 1.7900476239131307 prices\n", + "REAL 1.7517035944186097 shooting\n", + "REAL 1.7481252452408131 coverage\n", + "REAL 1.7370073447314753 nbc\n", + "REAL 1.716341346568611 security\n", + "REAL 1.664421277998289 wni9lmsppr\n", + "REAL 1.6244118186760108 baltimore\n" + ] + } + ], + "source": [ + "def most_informative_feature_for_binary_classification(vectorizer, classifier, n=100):\n", + " \"\"\"\n", + " See: https://stackoverflow.com/a/26980472\n", + " \n", + " Identify most important features if given a vectorizer and binary classifier. Set n to the number\n", + " of weighted features you would like to show. (Note: current implementation merely prints and does not \n", + " return top classes.)\n", + " \"\"\"\n", + "\n", + " class_labels = classifier.classes_\n", + " feature_names = vectorizer.get_feature_names()\n", + " topn_class1 = sorted(zip(classifier.coef_[0], feature_names))[:n]\n", + " topn_class2 = sorted(zip(classifier.coef_[0], feature_names))[-n:]\n", + "\n", + " for coef, feat in topn_class1:\n", + " print(class_labels[0], coef, feat)\n", + "\n", + " print()\n", + "\n", + " for coef, feat in reversed(topn_class2):\n", + " print(class_labels[1], coef, feat)\n", + "\n", + "\n", + "most_informative_feature_for_binary_classification(tfidf_vectorizer, linear_clf, n=30)\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* another way to perform this" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(5.015301141104506, 'said'),\n", + " (3.0775436014367448, 'says'),\n", + " (2.6550720089727093, 'say'),\n", + " (2.5730784312333856, 'gop'),\n", + " (2.537624697551335, 'debate'),\n", + " (2.37704059797269, 'islamic'),\n", + " (2.3533175343115773, 'friday'),\n", + " (2.324743477167939, 'jobs'),\n", + " (2.285274612684968, 'conservative'),\n", + " (2.2415729758446785, 'marriage'),\n", + " (2.2145701146991454, 'rush'),\n", + " (2.1909548260953593, 'tuesday'),\n", + " (2.164804177946772, 'continue'),\n", + " (2.1533786245547075, 'fox'),\n", + " (2.134959398360091, 'cruz'),\n", + " (1.9490044497446428, 'manafort'),\n", + " (1.9042544756391377, 'candidates'),\n", + " (1.8970529284348485, 'convention'),\n", + " (1.8966333613592279, 'parties'),\n", + " (1.8807450356106956, 'recounts')]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "[(-4.986418446992282, '2016'),\n", + " (-4.031739222213152, 'october'),\n", + " (-3.2450737607438835, 'hillary'),\n", + " (-3.163046832110649, 'article'),\n", + " (-3.0797196307769865, 'november'),\n", + " (-2.9126602525203786, 'election'),\n", + " (-2.7767455973246777, 'share'),\n", + " (-2.5799080044431215, 'establishment'),\n", + " (-2.5391003972219663, 'wikileaks'),\n", + " (-2.5124769239037335, 'mosul'),\n", + " (-2.5044337732634636, 'source'),\n", + " (-2.376392497005016, 'oct'),\n", + " (-2.323456790625324, 'print'),\n", + " (-2.296605039295202, 'advertisement'),\n", + " (-2.1765893008482884, 'podesta'),\n", + " (-2.1254730787507397, 'corporate'),\n", + " (-2.1186888933652006, 'comments'),\n", + " (-2.0814842675932406, 'russia'),\n", + " (-1.9405914175220103, 'watch'),\n", + " (-1.8706195854259284, 'war')]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "feature_names = tfidf_vectorizer.get_feature_names()\n", + "### Most real\n", + "display(sorted(zip(linear_clf.coef_[0], feature_names), reverse=True)[:20])\n", + "### Most fake\n", + "display(sorted(zip(linear_clf.coef_[0], feature_names))[:20])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "* analyse token weights" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[('00', -10.806288039676962),\n", + " ('000', -8.4757571521028),\n", + " ('0000', -11.31983755527844),\n", + " ('00000031', -11.306788627092281),\n", + " ('000035', -11.375220169061265),\n", + " ('00006', -11.285092170704173),\n", + " ('0002', -11.375220169061265),\n", + " ('000ft', -11.020175960097573),\n", + " ('000x', -11.346623773737496),\n", + " ('001', -11.224561919245287),\n", + " ('0011', -11.375220169061265),\n", + " ('002', -11.253666274798343),\n", + " ('003', -11.226941303318013),\n", + " ('004', -11.303970982653903),\n", + " ('005', -11.375220169061265),\n", + " ('00684', -11.375220169061265),\n", + " ('006s', -11.375220169061265),\n", + " ('007', -11.375220169061265),\n", + " ('007s', -11.375220169061265),\n", + " ('008', -11.270210919871277)]" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "tokens_with_weights = sorted(list(zip(feature_names, clf.coef_[0])))\n", + "tokens_with_weights[:20]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "## Building an own classifier for the 'pants on fire' dataset\n" ] }, { diff --git a/Jonas_Solutions/Task_2_gen_data.sh b/Jonas_Solutions/Task_2_gen_data.sh index 452bf35..19f8ac5 100755 --- a/Jonas_Solutions/Task_2_gen_data.sh +++ b/Jonas_Solutions/Task_2_gen_data.sh @@ -45,10 +45,12 @@ D1_ZIP=${D1_URL##*/} D2_URL=https://raw.githubusercontent.com/GeorgeMcIntire/fake_real_news_dataset/master/fake_or_real_news.csv.zip D2_ZIP=${D2_URL##*/} -set_action "downloading and unpacking $D1_URL if not already existing" - +set_action "checking whether unzip is installed" # testing for unzip: perform_and_exit unzip -v +confirm_action + +set_action "downloading and unpacking $D1_URL if not already existing" perform_and_exit mkdir -p ./data perform_and_exit cd ./data/