From 6cea6af099ffa875eb6264e69cdeed10b12b7d63 Mon Sep 17 00:00:00 2001 From: Mayur K T Date: Wed, 14 Feb 2024 21:32:46 +0530 Subject: [PATCH] Reordered the wordsDf in Demo.ipynb --- 01. Data Exploration/SQuADv1.ipynb | 1952 +++++++++++--- .../01. Feature-Engineering.ipynb | 2235 ++++++++++++++++- 02. Identify Keywords/02. Train.ipynb | 625 +++-- 02. Identify Keywords/03. Predict.ipynb | 503 ++-- 03. Transform questions/Cloze Questions.ipynb | 2 +- .../Incorrect-answers.ipynb | 201 +- Demo.ipynb | 165 +- data/pickles/nb-predictor-features.pkl | Bin 910 -> 899 bytes data/pickles/nb-predictor.pkl | Bin 3038 -> 4009 bytes 9 files changed, 4646 insertions(+), 1037 deletions(-) diff --git a/01. Data Exploration/SQuADv1.ipynb b/01. Data Exploration/SQuADv1.ipynb index 4563a76..1dd2852 100644 --- a/01. Data Exploration/SQuADv1.ipynb +++ b/01. Data Exploration/SQuADv1.ipynb @@ -9,7 +9,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 93, "metadata": {}, "outputs": [], "source": [ @@ -31,7 +31,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 94, "metadata": {}, "outputs": [], "source": [ @@ -52,7 +52,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 95, "metadata": {}, "outputs": [], "source": [ @@ -96,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 96, "metadata": {}, "outputs": [], "source": [ @@ -106,16 +106,17 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 97, "metadata": {}, "outputs": [], "source": [ - "df = pd.concat([train, dev], ignore_index=True)" + "df = pd.concat([train, dev], ignore_index=True)\n", + "#merging" ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 98, "metadata": { "scrolled": true }, @@ -184,7 +185,7 @@ "4 {'title': 'Antibiotics', 'paragraphs': [{'cont... 1.1" ] }, - "execution_count": 8, + "execution_count": 98, "metadata": {}, "output_type": "execute_result" } @@ -202,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 99, "metadata": {}, "outputs": [], "source": [ @@ -227,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 100, "metadata": {}, "outputs": [ { @@ -325,7 +326,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 101, "metadata": {}, "outputs": [ { @@ -357,6 +358,37 @@ "print('Questions', totalQuestionsCount)" ] }, + { + "cell_type": "code", + "execution_count": 102, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 {'title': 'University_of_Notre_Dame', 'paragra...\n", + "1 {'title': 'Beyoncé', 'paragraphs': [{'context'...\n", + "2 {'title': 'Montana', 'paragraphs': [{'context'...\n", + "3 {'title': 'Genocide', 'paragraphs': [{'context...\n", + "4 {'title': 'Antibiotics', 'paragraphs': [{'cont...\n", + " ... \n", + "485 {'title': 'Islamism', 'paragraphs': [{'context...\n", + "486 {'title': 'Imperialism', 'paragraphs': [{'cont...\n", + "487 {'title': 'United_Methodist_Church', 'paragrap...\n", + "488 {'title': 'French_and_Indian_War', 'paragraphs...\n", + "489 {'title': 'Force', 'paragraphs': [{'context': ...\n", + "Name: data, Length: 490, dtype: object" + ] + }, + "execution_count": 102, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['data']" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -366,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 103, "metadata": {}, "outputs": [ { @@ -428,7 +460,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 104, "metadata": {}, "outputs": [ { @@ -519,7 +551,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 105, "metadata": {}, "outputs": [], "source": [ @@ -537,7 +569,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 106, "metadata": {}, "outputs": [ { @@ -546,9 +578,21 @@ "text": [ "It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858.\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[nltk_data] Downloading package punkt to\n", + "[nltk_data] C:\\Users\\ktmay\\AppData\\Roaming\\nltk_data...\n", + "[nltk_data] Package punkt is already up-to-date!\n" + ] } ], "source": [ + "import nltk\n", + "nltk.download('punkt')\n", + "\n", "paragraph = df['data'][0]['paragraphs'][0]['context']\n", "answerStart = df['data'][0]['paragraphs'][0]['qas'][0]['answers'][0]['answer_start']\n", "\n", @@ -558,10 +602,11 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 107, "metadata": {}, "outputs": [], "source": [ + "#this can be used for containment score of tect in question\n", "def containedInText(text, question):\n", " \n", " questionWords = tokenize.word_tokenize(question.lower())\n", @@ -574,23 +619,31 @@ " wordsContained += 1\n", " break\n", "\n", + " print(len(questionWords))\n", " return wordsContained / len(questionWords)" ] }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 108, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "14\n" + ] + } + ], "source": [ "question = df['data'][0]['paragraphs'][0]['qas'][0]['question']\n", - "\n", "contained = containedInText(sentence, question)" ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 109, "metadata": {}, "outputs": [ { @@ -657,7 +710,7 @@ "printBold('Sentence')\n", "print(sentence)\n", "printBold(\"Contained\")\n", - "print(contained)" + "print(contained)\n" ] }, { @@ -686,22 +739,23 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 110, "metadata": {}, "outputs": [], "source": [ "#Printint the percentage completed\n", "def printPercentage(currentStep, maxStep):\n", - " stepSize = maxStep / 100\n", + " stepSize = maxStep / 100 #size of each step required to reach 1% progress.\n", " \n", - " if (int(currentStep / stepSize) > ((currentStep - 1) / stepSize)):\n", + " if (int(currentStep / stepSize) > ((currentStep - 1) / stepSize)): #checks if the current progress \n", + " #is greater than the progress achieved in the previous step\n", " clear_output()\n", " print('{}%'.format(int(currentStep / stepSize)))" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 111, "metadata": { "scrolled": true }, @@ -738,7 +792,7 @@ " for questionId in range(len(df['data'][titleId]['paragraphs'][paragraphId]['qas'])):\n", " question = df['data'][titleId]['paragraphs'][paragraphId]['qas'][questionId]['question']\n", " answerStart = df['data'][titleId]['paragraphs'][paragraphId]['qas'][questionId]['answers'][0]['answer_start']\n", - " sentence = extractSentence(paragraph, answerStart)\n", + " sentence = extractSentence(paragraph, answerStart) #breaking sentence from para\n", "\n", " sentenceScore.append(containedInText(sentence, question))\n", " paragraphScore.append(containedInText(paragraph, question)) \n", @@ -757,7 +811,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 112, "metadata": {}, "outputs": [ { @@ -842,7 +896,7 @@ "max 1.000000 1.000000" ] }, - "execution_count": 21, + "execution_count": 112, "metadata": {}, "output_type": "execute_result" } @@ -864,7 +918,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 113, "metadata": {}, "outputs": [ { @@ -961,7 +1015,7 @@ "9 0.266667 0.733333" ] }, - "execution_count": 22, + "execution_count": 113, "metadata": {}, "output_type": "execute_result" } @@ -972,10 +1026,11 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 114, "metadata": {}, "outputs": [], "source": [ + "#looking for specific cases in the questions\n", "def getQuestionAt(index):\n", " currentIndex = 0\n", " \n", @@ -996,7 +1051,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 115, "metadata": {}, "outputs": [ { @@ -1005,7 +1060,7 @@ "(0, 1, 3)" ] }, - "execution_count": 24, + "execution_count": 115, "metadata": {}, "output_type": "execute_result" } @@ -1016,7 +1071,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 116, "metadata": {}, "outputs": [ { @@ -1121,7 +1176,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 117, "metadata": {}, "outputs": [ { @@ -1188,7 +1243,7 @@ "3678 0.0 0.0" ] }, - "execution_count": 26, + "execution_count": 117, "metadata": {}, "output_type": "execute_result" } @@ -1199,7 +1254,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 118, "metadata": {}, "outputs": [ { @@ -1208,7 +1263,7 @@ "(1, 0, 0)" ] }, - "execution_count": 27, + "execution_count": 118, "metadata": {}, "output_type": "execute_result" } @@ -1219,7 +1274,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 119, "metadata": {}, "outputs": [ { @@ -1317,7 +1372,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 120, "metadata": {}, "outputs": [ { @@ -1326,7 +1381,7 @@ "(1, 18, 6)" ] }, - "execution_count": 29, + "execution_count": 120, "metadata": {}, "output_type": "execute_result" } @@ -1337,7 +1392,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 121, "metadata": {}, "outputs": [ { @@ -1442,7 +1497,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 122, "metadata": {}, "outputs": [ { @@ -1515,7 +1570,7 @@ "67425 1.0 1.0" ] }, - "execution_count": 31, + "execution_count": 122, "metadata": {}, "output_type": "execute_result" } @@ -1526,7 +1581,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 123, "metadata": {}, "outputs": [ { @@ -1535,7 +1590,7 @@ "(258, 23, 0)" ] }, - "execution_count": 32, + "execution_count": 123, "metadata": {}, "output_type": "execute_result" } @@ -1546,7 +1601,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 124, "metadata": {}, "outputs": [ { @@ -1644,7 +1699,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 125, "metadata": {}, "outputs": [ { @@ -1653,7 +1708,7 @@ "(341, 25, 2)" ] }, - "execution_count": 34, + "execution_count": 125, "metadata": {}, "output_type": "execute_result" } @@ -1664,7 +1719,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 126, "metadata": {}, "outputs": [ { @@ -1811,7 +1866,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 127, "metadata": {}, "outputs": [ { @@ -1889,7 +1944,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 128, "metadata": {}, "outputs": [], "source": [ @@ -1904,7 +1959,7 @@ " for questionId in range(len(df['data'][titleId]['paragraphs'][paragraphId]['qas'])):\n", " answer = df['data'][titleId]['paragraphs'][paragraphId]['qas'][questionId]['answers'][0]['text']\n", " answerStart = df['data'][titleId]['paragraphs'][paragraphId]['qas'][questionId]['answers'][0]['answer_start']\n", - " \n", + " #answerStart is the pos of answer. and we fetch the sentences where answer lies\n", " sentence = extractSentence(paragraph, answerStart)\n", " \n", " answers.append(answer)\n", @@ -1913,7 +1968,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 129, "metadata": {}, "outputs": [ { @@ -1987,7 +2042,7 @@ "4 Atop the Main Building's gold dome is a golden... " ] }, - "execution_count": 38, + "execution_count": 129, "metadata": {}, "output_type": "execute_result" } @@ -2009,7 +2064,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 130, "metadata": {}, "outputs": [], "source": [ @@ -2021,7 +2076,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 131, "metadata": {}, "outputs": [], "source": [ @@ -2030,15 +2085,61 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 132, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 132, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "answersDf.head" + ] + }, + { + "cell_type": "code", + "execution_count": 133, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "count 98169.000000\n", - "mean 3.355061\n", - "std 3.731794\n", + "mean 3.355031\n", + "std 3.731700\n", "min 1.000000\n", "25% 1.000000\n", "50% 2.000000\n", @@ -2047,7 +2148,7 @@ "Name: wordCount, dtype: float64" ] }, - "execution_count": 41, + "execution_count": 133, "metadata": {}, "output_type": "execute_result" } @@ -2058,17 +2159,18 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 134, "metadata": {}, "outputs": [ { "data": { "text/plain": [ + "wordCount\n", "1 32156\n", "2 25228\n", "3 14348\n", - "4 7561\n", - "5 4660\n", + "4 7562\n", + "5 4659\n", "6 3051\n", "7 2222\n", "8 1676\n", @@ -2082,9 +2184,9 @@ "16 313\n", "18 274\n", "17 269\n", - "19 243\n", + "19 244\n", "20 191\n", - "21 183\n", + "21 182\n", "23 138\n", "22 131\n", "25 120\n", @@ -2097,17 +2199,17 @@ "31 12\n", "32 11\n", "33 6\n", + "38 2\n", "34 2\n", "35 2\n", "36 2\n", "37 2\n", - "38 2\n", - "42 1\n", "46 1\n", - "Name: wordCount, dtype: int64" + "42 1\n", + "Name: count, dtype: int64" ] }, - "execution_count": 42, + "execution_count": 134, "metadata": {}, "output_type": "execute_result" } @@ -2125,7 +2227,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 135, "metadata": {}, "outputs": [ { @@ -2215,31 +2317,123 @@ " Several protesters who tried to disrupt the re...\n", " 1\n", " \n", + " \n", + " 80591\n", + " 1930s\n", + " The first lighting used on an airport was duri...\n", + " 1\n", + " \n", + " \n", + " 50348\n", + " 10\n", + " The 2011 domestic Samoan rugby league competit...\n", + " 1\n", + " \n", + " \n", + " 81972\n", + " B-21\n", + " The B-21 is projected to replace the B-52 and ...\n", + " 1\n", + " \n", + " \n", + " 50166\n", + " Whig\n", + " Francis Basset, a backbench Whig MP, wrote to ...\n", + " 1\n", + " \n", + " \n", + " 9063\n", + " 2006\n", + " Business journalist Kimberly Amadeo reports: \"...\n", + " 1\n", + " \n", + " \n", + " 79467\n", + " subtropical\n", + " Iran's climate ranges from arid or semiarid, t...\n", + " 1\n", + " \n", + " \n", + " 81182\n", + " Samoan\n", + " The language has borrowed from the Samoan lang...\n", + " 1\n", + " \n", + " \n", + " 56902\n", + " 1.8\n", + " The elevation of the area never rises above 40...\n", + " 1\n", + " \n", + " \n", + " 5346\n", + " subdivisions\n", + " Anthropology has diversified from a few major ...\n", + " 1\n", + " \n", + " \n", + " 85679\n", + " 200\n", + " Eisenhower was the first non-British person to...\n", + " 1\n", + " \n", " \n", "\n", "" ], "text/plain": [ - " answer sentence wordCount\n", - "94041 quickly As a practice area and specialist domain, phar... 1\n", - "16141 1985 By 1985, the USFL had ceased football operatio... 1\n", - "4182 65,000 At 2.7 million in 2012, New York's non-Hispani... 1\n", - "70863 Jews Moving to reduce Italian influence, in October... 1\n", - "19072 148 It has a number of parks and green spaces, the... 1\n", - "6351 Nepal According to Buddhist tradition, the Buddha li... 1\n", - "33608 5.5 It is estimated that 5.5 million tonnes of ura... 1\n", - "83840 Hannibal Extraordinary circumstances called for extraor... 1\n", - "23810 Babylonia The Roman abacus was used in Babylonia as earl... 1\n", - "8244 arrested Several protesters who tried to disrupt the re... 1" + " answer sentence \\\n", + "94041 quickly As a practice area and specialist domain, phar... \n", + "16141 1985 By 1985, the USFL had ceased football operatio... \n", + "4182 65,000 At 2.7 million in 2012, New York's non-Hispani... \n", + "70863 Jews Moving to reduce Italian influence, in October... \n", + "19072 148 It has a number of parks and green spaces, the... \n", + "6351 Nepal According to Buddhist tradition, the Buddha li... \n", + "33608 5.5 It is estimated that 5.5 million tonnes of ura... \n", + "83840 Hannibal Extraordinary circumstances called for extraor... \n", + "23810 Babylonia The Roman abacus was used in Babylonia as earl... \n", + "8244 arrested Several protesters who tried to disrupt the re... \n", + "80591 1930s The first lighting used on an airport was duri... \n", + "50348 10 The 2011 domestic Samoan rugby league competit... \n", + "81972 B-21 The B-21 is projected to replace the B-52 and ... \n", + "50166 Whig Francis Basset, a backbench Whig MP, wrote to ... \n", + "9063 2006 Business journalist Kimberly Amadeo reports: \"... \n", + "79467 subtropical Iran's climate ranges from arid or semiarid, t... \n", + "81182 Samoan The language has borrowed from the Samoan lang... \n", + "56902 1.8 The elevation of the area never rises above 40... \n", + "5346 subdivisions Anthropology has diversified from a few major ... \n", + "85679 200 Eisenhower was the first non-British person to... \n", + "\n", + " wordCount \n", + "94041 1 \n", + "16141 1 \n", + "4182 1 \n", + "70863 1 \n", + "19072 1 \n", + "6351 1 \n", + "33608 1 \n", + "83840 1 \n", + "23810 1 \n", + "8244 1 \n", + "80591 1 \n", + "50348 1 \n", + "81972 1 \n", + "50166 1 \n", + "9063 1 \n", + "79467 1 \n", + "81182 1 \n", + "56902 1 \n", + "5346 1 \n", + "85679 1 " ] }, - "execution_count": 43, + "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "answersDf[answersDf['wordCount'] == 1].sample(10, random_state=42)" + "answersDf[answersDf['wordCount'] == 1].sample(20, random_state=42)" ] }, { @@ -2258,7 +2452,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 136, "metadata": {}, "outputs": [ { @@ -2458,7 +2652,7 @@ "82507 Han Chinese Banners were made up of Han Chines... 2 " ] }, - "execution_count": 44, + "execution_count": 136, "metadata": {}, "output_type": "execute_result" } @@ -2476,7 +2670,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 137, "metadata": {}, "outputs": [ { @@ -2676,7 +2870,7 @@ "85170 Further, when Republicans were in the minority... 3 " ] }, - "execution_count": 45, + "execution_count": 137, "metadata": {}, "output_type": "execute_result" } @@ -2694,7 +2888,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 138, "metadata": {}, "outputs": [ { @@ -2731,9 +2925,9 @@ " 5\n", " \n", " \n", - " 46949\n", - " the City of London Police\n", - " The City of London has its own police force – ...\n", + " 46951\n", + " Inner London and Outer London\n", + " Greater London is split for some purposes into...\n", " 5\n", " \n", " \n", @@ -2755,9 +2949,9 @@ " 5\n", " \n", " \n", - " 32398\n", - " a higher rate of fire\n", - " For shorter-range work, a lighter weapon with ...\n", + " 32401\n", + " a system of concentric layers\n", + " Air defence in naval tactics, especially withi...\n", " 5\n", " \n", " \n", @@ -2779,9 +2973,9 @@ " 5\n", " \n", " \n", - " 96222\n", - " a co-chair of TAR WGI\n", - " John Houghton, who was a co-chair of TAR WGI, ...\n", + " 76929\n", + " between 1 and 1.5 million\n", + " The total number of people killed has been mos...\n", " 5\n", " \n", " \n", @@ -2797,15 +2991,15 @@ " 5\n", " \n", " \n", - " 58036\n", - " cloaking their contributions as loans\n", - " However, some benefactors are alleged to have ...\n", + " 58067\n", + " Renaissance polyphony and Baroque concertato\n", + " The term \"a cappella\" was originally intended ...\n", " 5\n", " \n", " \n", - " 48566\n", - " street parades and masked balls\n", - " Customs originated in the onetime French colon...\n", + " 48614\n", + " the social and political situation\n", + " Traditionally formed by men and now starting t...\n", " 5\n", " \n", " \n", @@ -2821,9 +3015,9 @@ " 5\n", " \n", " \n", - " 50797\n", - " solid (un-laminated) iron\n", - " In this application, the use of AC to power a ...\n", + " 50806\n", + " high speed and light weight\n", + " This makes them useful for appliances such as ...\n", " 5\n", " \n", " \n", @@ -2833,15 +3027,15 @@ " 5\n", " \n", " \n", - " 40952\n", - " alloys of tungsten and rhenium\n", - " Lamps operated on direct current develop rando...\n", + " 40959\n", + " several hundred to 2,000 hours\n", + " The trade-off is typically set to provide a li...\n", " 5\n", " \n", " \n", - " 89634\n", - " a shortage of male teachers\n", - " This has in some jurisdictions reportedly led ...\n", + " 64151\n", + " North Dakota's Bakken Formation\n", + " Prudhoe Bay on Alaska's North Slope is still t...\n", " 5\n", " \n", " \n", @@ -2849,52 +3043,52 @@ "" ], "text/plain": [ - " answer \\\n", - "23833 system of pulleys and wires \n", - "46949 the City of London Police \n", - "97610 within the Church of England \n", - "94650 Annual Status of Education Report \n", - "23462 less than one per cent \n", - "32398 a higher rate of fire \n", - "20665 the structure of the Alps \n", - "74712 quadrivium and scholastic logic. \n", - "22411 poor management and financial control \n", - "96222 a co-chair of TAR WGI \n", - "75837 the Nizams and the British \n", - "18617 political sentiments of the time \n", - "58036 cloaking their contributions as loans \n", - "48566 street parades and masked balls \n", - "27628 a decimal system of values \n", - "84787 doctrine of the two kingdoms \n", - "50797 solid (un-laminated) iron \n", - "68191 Profits, Interest and Investment \n", - "40952 alloys of tungsten and rhenium \n", - "89634 a shortage of male teachers \n", + " answer \\\n", + "23833 system of pulleys and wires \n", + "46951 Inner London and Outer London \n", + "97610 within the Church of England \n", + "94650 Annual Status of Education Report \n", + "23462 less than one per cent \n", + "32401 a system of concentric layers \n", + "20665 the structure of the Alps \n", + "74712 quadrivium and scholastic logic. \n", + "22411 poor management and financial control \n", + "76929 between 1 and 1.5 million \n", + "75837 the Nizams and the British \n", + "18617 political sentiments of the time \n", + "58067 Renaissance polyphony and Baroque concertato \n", + "48614 the social and political situation \n", + "27628 a decimal system of values \n", + "84787 doctrine of the two kingdoms \n", + "50806 high speed and light weight \n", + "68191 Profits, Interest and Investment \n", + "40959 several hundred to 2,000 hours \n", + "64151 North Dakota's Bakken Formation \n", "\n", " sentence wordCount \n", "23833 It used a system of pulleys and wires to autom... 5 \n", - "46949 The City of London has its own police force – ... 5 \n", + "46951 Greater London is split for some purposes into... 5 \n", "97610 The movement which would become The United Met... 5 \n", "94650 The Annual Status of Education Report (ASER), ... 5 \n", "23462 Throughout the period monks remained a very sm... 5 \n", - "32398 For shorter-range work, a lighter weapon with ... 5 \n", + "32401 Air defence in naval tactics, especially withi... 5 \n", "20665 In simple terms the structure of the Alps cons... 5 \n", "74712 The people were associated with the studia hum... 5 \n", "22411 The Ministry of Defence has been criticised in... 5 \n", - "96222 John Houghton, who was a co-chair of TAR WGI, ... 5 \n", + "76929 The total number of people killed has been mos... 5 \n", "75837 :18 Many elite clubs formed by the Nizams and ... 5 \n", "18617 There was also a rise, especially toward the e... 5 \n", - "58036 However, some benefactors are alleged to have ... 5 \n", - "48566 Customs originated in the onetime French colon... 5 \n", + "58067 The term \"a cappella\" was originally intended ... 5 \n", + "48614 Traditionally formed by men and now starting t... 5 \n", "27628 Unlike the Spanish milled dollar the U.S. doll... 5 \n", "84787 Martin Luther separated the religious and the ... 5 \n", - "50797 In this application, the use of AC to power a ... 5 \n", + "50806 This makes them useful for appliances such as ... 5 \n", "68191 Hayek continued his research on monetary and c... 5 \n", - "40952 Lamps operated on direct current develop rando... 5 \n", - "89634 This has in some jurisdictions reportedly led ... 5 " + "40959 The trade-off is typically set to provide a li... 5 \n", + "64151 Prudhoe Bay on Alaska's North Slope is still t... 5 " ] }, - "execution_count": 46, + "execution_count": 138, "metadata": {}, "output_type": "execute_result" } @@ -2920,7 +3114,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 139, "metadata": {}, "outputs": [ { @@ -3040,7 +3234,7 @@ "97887 Nevertheless, the format of the congress and m... 20 " ] }, - "execution_count": 47, + "execution_count": 139, "metadata": {}, "output_type": "execute_result" } @@ -3051,7 +3245,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 140, "metadata": {}, "outputs": [ { @@ -3060,13 +3254,15 @@ "'On 26 December 1999, Chelsea became the first Premier League side to field an entirely foreign starting line-up,'" ] }, - "execution_count": 48, + "execution_count": 140, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "answersDf[answersDf['wordCount'] == 20].sample(n=20, random_state=5).iloc[8]['answer']" + "answersDf[answersDf['wordCount'] == 20].sample(n=20, random_state=5).iloc[8]['answer']\n", + "\n", + "#from 8th row" ] }, { @@ -3087,7 +3283,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 141, "metadata": {}, "outputs": [ { @@ -3096,13 +3292,13 @@ "'that the sudden shift of a huge quantity of water into the region could have relaxed the tension between the two sides of the fault, allowing them to move apart, and could have increased the direct pressure on it, causing a violent rupture'" ] }, - "execution_count": 49, + "execution_count": 141, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "answersDf[answersDf['wordCount'] == 46].iloc[0]['answer']" + "answersDf[answersDf['wordCount'] == 46].iloc[0]['answer'] #from 1st row" ] }, { @@ -3114,7 +3310,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 142, "metadata": {}, "outputs": [ { @@ -3123,7 +3319,7 @@ "'Hillary Clinton (2008), Howard Dean (2004), Gary Hart (1984 and 1988), Paul Tsongas (1992), Pat Robertson (1988) and Jerry Brown (1976, 1980, 1992).'" ] }, - "execution_count": 50, + "execution_count": 142, "metadata": {}, "output_type": "execute_result" } @@ -3155,13 +3351,12 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 143, "metadata": {}, "outputs": [], "source": [ "import spacy\n", "from spacy import displacy\n", - "from collections import Counter\n", "nlp = spacy.load('en_core_web_sm')" ] }, @@ -3174,25 +3369,25 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 144, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "[('European', 'NORP'), ('Google', 'ORG'), ('a record $5.1 billion', 'MONEY'), ('Wednesday', 'DATE')]\n" + "[('European', 'NORP'), ('Google', 'ORG'), ('$5.1 billion', 'MONEY'), ('Wednesday', 'DATE')]\n" ] } ], "source": [ "doc = nlp('European authorities fined Google a record $5.1 billion on Wednesday for abusing its power in the mobile phone market and ordered the company to alter its practices')\n", - "print([(X.text, X.label_) for X in doc.ents])" + "print([(X.text, X.label_) for X in doc.ents]) #entity labelling" ] }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 145, "metadata": {}, "outputs": [], "source": [ @@ -3210,7 +3405,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 146, "metadata": {}, "outputs": [ { @@ -3219,7 +3414,7 @@ "'GPE'" ] }, - "execution_count": 55, + "execution_count": 146, "metadata": {}, "output_type": "execute_result" } @@ -3237,7 +3432,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 147, "metadata": {}, "outputs": [ { @@ -3246,7 +3441,7 @@ "'direct object'" ] }, - "execution_count": 56, + "execution_count": 147, "metadata": {}, "output_type": "execute_result" } @@ -3268,7 +3463,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 148, "metadata": {}, "outputs": [], "source": [ @@ -3277,7 +3472,7 @@ " \n", " #The entire text is a single named entity \n", " entitiesFound = len(doc.ents)\n", - " if(entitiesFound == 1 and doc.ents[0].text == text):\n", + " if(entitiesFound == 1 and doc.ents[0].text == text): #.text, .label_ \n", " return True\n", " \n", " #The text is not an named entity, but is a single token\n", @@ -3290,7 +3485,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 149, "metadata": {}, "outputs": [ { @@ -3299,7 +3494,7 @@ "True" ] }, - "execution_count": 58, + "execution_count": 149, "metadata": {}, "output_type": "execute_result" } @@ -3317,7 +3512,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 150, "metadata": {}, "outputs": [ { @@ -3342,16 +3537,16 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 151, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.5736552567237164" + "0.5755908720456397" ] }, - "execution_count": 60, + "execution_count": 151, "metadata": {}, "output_type": "execute_result" } @@ -3378,7 +3573,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 152, "metadata": {}, "outputs": [ { @@ -3400,7 +3595,7 @@ " token.shape_, token.is_alpha, token.is_stop, len(doc.ents), doc.ents[0].label_)\n", " \n", "shape = doc[0].shape_\n", - "for wordIndex in range(1, len(doc)):\n", + "for wordIndex in range(1, len(doc)): #shape or visual patter of taken Xxxxx\n", " shape += (' ' + doc[wordIndex].shape_)\n", " \n", "print(shape)" @@ -3408,7 +3603,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 153, "metadata": {}, "outputs": [ { @@ -3417,7 +3612,7 @@ "'Numerals that do not fall under another type'" ] }, - "execution_count": 62, + "execution_count": 153, "metadata": {}, "output_type": "execute_result" } @@ -3435,23 +3630,23 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 154, "metadata": {}, "outputs": [], "source": [ "answersDf['isSingleToken'] = False\n", - "answersDf['NER'] = ''\n", - "answersDf['POS'] = ''\n", - "answersDf['TAG'] = ''\n", - "answersDf['DEP'] = ''\n", - "answersDf['shape'] = ''\n", - "answersDf['isAlpha'] = False\n", - "answersDf['isStop'] = False" + "answersDf['NER'] = '' # entity recognition\n", + "answersDf['POS'] = '' #parts of speeech\n", + "answersDf['TAG'] = '' #tags\n", + "answersDf['DEP'] = '' #dependency\n", + "answersDf['shape'] = '' # shape attribute\n", + "answersDf['isAlpha'] = False #alphabet\n", + "answersDf['isStop'] = False #stop words" ] }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 155, "metadata": {}, "outputs": [ { @@ -3586,7 +3781,7 @@ "4 False False False " ] }, - "execution_count": 64, + "execution_count": 155, "metadata": {}, "output_type": "execute_result" } @@ -3604,7 +3799,7 @@ }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 156, "metadata": {}, "outputs": [ { @@ -3633,7 +3828,7 @@ " #At this point I've called spacy's nlp method 3 times for the same words...\n", " doc = nlp(answer)\n", " \n", - " answersDf.at[i, 'POS'] = doc[0].pos_\n", + " answersDf.at[i, 'POS'] = doc[0].pos_ #.at[ ] pandas method to access/modify single entity\n", " answersDf.at[i, 'TAG'] = doc[0].tag_\n", " answersDf.at[i, 'DEP'] = doc[0].dep_\n", " answersDf.at[i, 'isAlpha'] = doc[0].is_alpha\n", @@ -3657,18 +3852,19 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 157, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "False 97669\n", - "True 500\n", - "Name: isStop, dtype: int64" + "isStop\n", + "False 97675\n", + "True 494\n", + "Name: count, dtype: int64" ] }, - "execution_count": 66, + "execution_count": 157, "metadata": {}, "output_type": "execute_result" } @@ -3693,32 +3889,36 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 158, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - " 93969\n", - "PERSON 1058\n", - "CARDINAL 991\n", - "DATE 930\n", - "ORG 464\n", - "GPE 297\n", - "PERCENT 151\n", - "MONEY 89\n", - "NORP 68\n", - "ORDINAL 37\n", - "FAC 32\n", - "QUANTITY 32\n", - "LOC 30\n", - "EVENT 9\n", - "TIME 7\n", - "LAW 5\n", - "Name: NER, dtype: int64" + "NER\n", + " 93737\n", + "PERSON 1044\n", + "CARDINAL 965\n", + "DATE 958\n", + "ORG 562\n", + "GPE 353\n", + "PERCENT 151\n", + "MONEY 99\n", + "NORP 98\n", + "LOC 53\n", + "FAC 37\n", + "ORDINAL 34\n", + "QUANTITY 32\n", + "TIME 14\n", + "WORK_OF_ART 11\n", + "EVENT 9\n", + "LANGUAGE 7\n", + "LAW 3\n", + "PRODUCT 2\n", + "Name: count, dtype: int64" ] }, - "execution_count": 67, + "execution_count": 158, "metadata": {}, "output_type": "execute_result" } @@ -3736,7 +3936,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 159, "metadata": {}, "outputs": [ { @@ -3775,142 +3975,142 @@ " \n", " \n", " \n", - " 1075\n", - " Federation of Fly Fishers\n", - " Montana is the home of the Federation of Fly F...\n", + " 1937\n", + " The New York Times\n", + " On the occasion of the composer's bicentenary,...\n", " 4\n", " True\n", " ORG\n", - " PROPN\n", - " NNP\n", - " ROOT\n", - " Xxxxx xx Xxx Xxxxx\n", + " DET\n", + " DT\n", + " det\n", + " Xxx Xxx Xxxx Xxxxx\n", + " True\n", " True\n", - " False\n", " \n", " \n", - " 3408\n", - " Shenzhen Stock Exchange\n", - " Both the Shanghai Stock Exchange and the Shenz...\n", - " 3\n", + " 5060\n", + " The International Energy Agency\n", + " The International Energy Agency has said that ...\n", + " 4\n", " True\n", " ORG\n", - " PROPN\n", - " NNP\n", - " compound\n", - " Xxxxx Xxxxx Xxxxx\n", + " DET\n", + " DT\n", + " det\n", + " Xxx Xxxxx Xxxxx Xxxxx\n", + " True\n", " True\n", - " False\n", " \n", " \n", - " 680\n", - " MTV\n", - " MTV estimated that by the end of 2014, Beyoncé...\n", + " 2080\n", + " KK\n", + " The present standard musicological reference f...\n", " 1\n", " True\n", " ORG\n", " PROPN\n", " NNP\n", " ROOT\n", - " XXX\n", + " XX\n", " True\n", " False\n", " \n", " \n", - " 3086\n", - " MGM\n", - " In November 2013 MGM and the McClory estate fo...\n", - " 1\n", + " 4342\n", + " Queens Borough Public Library\n", + " Queens is served by the Queens Borough Public ...\n", + " 4\n", " True\n", " ORG\n", " PROPN\n", " NNP\n", - " ROOT\n", - " XXX\n", + " compound\n", + " Xxxxx Xxxxx Xxxxx Xxxxx\n", " True\n", " False\n", " \n", " \n", - " 4137\n", - " 1179th Transportation Brigade\n", - " It also houses the 1179th Transportation Briga...\n", + " 3635\n", + " Tzu Chi Foundation\n", + " Beijing accepted the aid of the Tzu Chi Founda...\n", " 3\n", " True\n", " ORG\n", - " NUM\n", - " CD\n", + " PROPN\n", + " NNP\n", " compound\n", - " ddddxx Xxxxx Xxxxx\n", - " False\n", + " Xxx Xxx Xxxxx\n", + " True\n", " False\n", " \n", " \n", - " 4306\n", - " The New York Times\n", - " Two of the three national daily newspapers in ...\n", - " 4\n", + " 3928\n", + " Federal Hall\n", + " In 1789, the first President of the United Sta...\n", + " 2\n", " True\n", " ORG\n", - " DET\n", - " DT\n", - " det\n", - " Xxx Xxx Xxxx Xxxxx\n", - " True\n", + " PROPN\n", + " NNP\n", + " compound\n", + " Xxxxx Xxxx\n", " True\n", + " False\n", " \n", " \n", - " 625\n", - " Lenox Hill Hospital\n", - " On January 7, 2012, Beyoncé gave birth to a da...\n", - " 3\n", + " 1618\n", + " eolomelodicon\n", + " He was engaged by the inventors of a mechanica...\n", + " 1\n", " True\n", " ORG\n", " PROPN\n", " NNP\n", - " compound\n", - " Xxxxx Xxxx Xxxxx\n", + " ROOT\n", + " xxxx\n", " True\n", " False\n", " \n", " \n", - " 4375\n", - " The New York City Fire Department\n", - " The New York City Fire Department (FDNY), prov...\n", - " 6\n", + " 8597\n", + " CNN\n", + " On April 17, Xinhua condemned what it called \"...\n", + " 1\n", " True\n", " ORG\n", - " DET\n", - " DT\n", - " det\n", - " Xxx Xxx Xxxx Xxxx Xxxx Xxxxx\n", - " True\n", + " PROPN\n", + " NNP\n", + " ROOT\n", + " XXX\n", " True\n", + " False\n", " \n", " \n", - " 2710\n", - " Hewlett-Packard\n", - " On January 8, 2004, Hewlett-Packard (HP) annou...\n", + " 9061\n", + " Krugman\n", + " Krugman's contention (that the growth of a com...\n", " 1\n", " True\n", " ORG\n", " PROPN\n", " NNP\n", - " compound\n", - " Xxxxx - Xxxxx\n", + " ROOT\n", + " Xxxxx\n", " True\n", " False\n", " \n", " \n", - " 4480\n", - " Port Authority Bus Terminal\n", - " New York City's public bus fleet is the larges...\n", - " 4\n", + " 2477\n", + " Apple\n", + " The iPod is a line of portable media players a...\n", + " 1\n", " True\n", " ORG\n", - " PROPN\n", - " NNP\n", - " compound\n", - " Xxxx Xxxxx Xxx Xxxxx\n", + " NOUN\n", + " NN\n", + " ROOT\n", + " Xxxxx\n", " True\n", " False\n", " \n", @@ -3919,56 +4119,56 @@ "" ], "text/plain": [ - " answer \\\n", - "1075 Federation of Fly Fishers \n", - "3408 Shenzhen Stock Exchange \n", - "680 MTV \n", - "3086 MGM \n", - "4137 1179th Transportation Brigade \n", - "4306 The New York Times \n", - "625 Lenox Hill Hospital \n", - "4375 The New York City Fire Department \n", - "2710 Hewlett-Packard \n", - "4480 Port Authority Bus Terminal \n", + " answer \\\n", + "1937 The New York Times \n", + "5060 The International Energy Agency \n", + "2080 KK \n", + "4342 Queens Borough Public Library \n", + "3635 Tzu Chi Foundation \n", + "3928 Federal Hall \n", + "1618 eolomelodicon \n", + "8597 CNN \n", + "9061 Krugman \n", + "2477 Apple \n", "\n", " sentence wordCount \\\n", - "1075 Montana is the home of the Federation of Fly F... 4 \n", - "3408 Both the Shanghai Stock Exchange and the Shenz... 3 \n", - "680 MTV estimated that by the end of 2014, Beyoncé... 1 \n", - "3086 In November 2013 MGM and the McClory estate fo... 1 \n", - "4137 It also houses the 1179th Transportation Briga... 3 \n", - "4306 Two of the three national daily newspapers in ... 4 \n", - "625 On January 7, 2012, Beyoncé gave birth to a da... 3 \n", - "4375 The New York City Fire Department (FDNY), prov... 6 \n", - "2710 On January 8, 2004, Hewlett-Packard (HP) annou... 1 \n", - "4480 New York City's public bus fleet is the larges... 4 \n", + "1937 On the occasion of the composer's bicentenary,... 4 \n", + "5060 The International Energy Agency has said that ... 4 \n", + "2080 The present standard musicological reference f... 1 \n", + "4342 Queens is served by the Queens Borough Public ... 4 \n", + "3635 Beijing accepted the aid of the Tzu Chi Founda... 3 \n", + "3928 In 1789, the first President of the United Sta... 2 \n", + "1618 He was engaged by the inventors of a mechanica... 1 \n", + "8597 On April 17, Xinhua condemned what it called \"... 1 \n", + "9061 Krugman's contention (that the growth of a com... 1 \n", + "2477 The iPod is a line of portable media players a... 1 \n", "\n", - " isSingleToken NER POS TAG DEP shape \\\n", - "1075 True ORG PROPN NNP ROOT Xxxxx xx Xxx Xxxxx \n", - "3408 True ORG PROPN NNP compound Xxxxx Xxxxx Xxxxx \n", - "680 True ORG PROPN NNP ROOT XXX \n", - "3086 True ORG PROPN NNP ROOT XXX \n", - "4137 True ORG NUM CD compound ddddxx Xxxxx Xxxxx \n", - "4306 True ORG DET DT det Xxx Xxx Xxxx Xxxxx \n", - "625 True ORG PROPN NNP compound Xxxxx Xxxx Xxxxx \n", - "4375 True ORG DET DT det Xxx Xxx Xxxx Xxxx Xxxx Xxxxx \n", - "2710 True ORG PROPN NNP compound Xxxxx - Xxxxx \n", - "4480 True ORG PROPN NNP compound Xxxx Xxxxx Xxx Xxxxx \n", + " isSingleToken NER POS TAG DEP shape \\\n", + "1937 True ORG DET DT det Xxx Xxx Xxxx Xxxxx \n", + "5060 True ORG DET DT det Xxx Xxxxx Xxxxx Xxxxx \n", + "2080 True ORG PROPN NNP ROOT XX \n", + "4342 True ORG PROPN NNP compound Xxxxx Xxxxx Xxxxx Xxxxx \n", + "3635 True ORG PROPN NNP compound Xxx Xxx Xxxxx \n", + "3928 True ORG PROPN NNP compound Xxxxx Xxxx \n", + "1618 True ORG PROPN NNP ROOT xxxx \n", + "8597 True ORG PROPN NNP ROOT XXX \n", + "9061 True ORG PROPN NNP ROOT Xxxxx \n", + "2477 True ORG NOUN NN ROOT Xxxxx \n", "\n", " isAlpha isStop \n", - "1075 True False \n", - "3408 True False \n", - "680 True False \n", - "3086 True False \n", - "4137 False False \n", - "4306 True True \n", - "625 True False \n", - "4375 True True \n", - "2710 True False \n", - "4480 True False " + "1937 True True \n", + "5060 True True \n", + "2080 True False \n", + "4342 True False \n", + "3635 True False \n", + "3928 True False \n", + "1618 True False \n", + "8597 True False \n", + "9061 True False \n", + "2477 True False " ] }, - "execution_count": 68, + "execution_count": 159, "metadata": {}, "output_type": "execute_result" } @@ -3979,18 +4179,19 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 160, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "False 94167\n", - "True 4002\n", - "Name: isAlpha, dtype: int64" + "isAlpha\n", + "False 94146\n", + "True 4023\n", + "Name: count, dtype: int64" ] }, - "execution_count": 69, + "execution_count": 160, "metadata": {}, "output_type": "execute_result" } @@ -4008,32 +4209,33 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 161, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - " 92538\n", - "PROPN 2689\n", - "NUM 1705\n", - "NOUN 622\n", - "ADJ 193\n", - "DET 123\n", + "POS\n", + " 92519\n", + "PROPN 2267\n", + "NUM 1715\n", + "NOUN 874\n", + "ADJ 294\n", + "VERB 167\n", + "DET 134\n", "SYM 72\n", - "VERB 64\n", - "ADP 58\n", - "X 45\n", - "ADV 42\n", - "AUX 9\n", - "PUNCT 3\n", - "INTJ 3\n", - "PRON 2\n", + "ADV 54\n", + "ADP 26\n", + "X 22\n", + "PRON 10\n", + "PUNCT 6\n", + "INTJ 5\n", + "AUX 3\n", "PART 1\n", - "Name: POS, dtype: int64" + "Name: count, dtype: int64" ] }, - "execution_count": 70, + "execution_count": 161, "metadata": {}, "output_type": "execute_result" } @@ -4058,18 +4260,285 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 162, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
answersentencewordCountisSingleTokenNERPOSTAGDEPshapeisAlphaisStop
4022New JerseyThe Hudson River separates the city from the U...2TrueGPEPROPNNNPcompoundXxx XxxxxTrueFalse
152Frank Eck StadiumAlso, there are many outdoor fields, as the Fr...3TruePERSONPROPNNNPcompoundXxxxx Xxx XxxxxTrueFalse
2167Arthur HutchingsWhile his illness and his love-affairs conform...2TruePERSONPROPNNNPcompoundXxxxx XxxxxTrueFalse
9178Merrill LynchThe volume \"Credit Correlation: Life After Cop...2TrueORGPROPNNNPcompoundXxxxx XxxxxTrueFalse
2431Zhang JuzhengBefore he left, he sent a letter and gifts to ...2TruePERSONPROPNNNPcompoundXxxxx XxxxxTrueFalse
\n", + "
" + ], + "text/plain": [ + " answer sentence \\\n", + "4022 New Jersey The Hudson River separates the city from the U... \n", + "152 Frank Eck Stadium Also, there are many outdoor fields, as the Fr... \n", + "2167 Arthur Hutchings While his illness and his love-affairs conform... \n", + "9178 Merrill Lynch The volume \"Credit Correlation: Life After Cop... \n", + "2431 Zhang Juzheng Before he left, he sent a letter and gifts to ... \n", + "\n", + " wordCount isSingleToken NER POS TAG DEP shape \\\n", + "4022 2 True GPE PROPN NNP compound Xxx Xxxxx \n", + "152 3 True PERSON PROPN NNP compound Xxxxx Xxx Xxxxx \n", + "2167 2 True PERSON PROPN NNP compound Xxxxx Xxxxx \n", + "9178 2 True ORG PROPN NNP compound Xxxxx Xxxxx \n", + "2431 2 True PERSON PROPN NNP compound Xxxxx Xxxxx \n", + "\n", + " isAlpha isStop \n", + "4022 True False \n", + "152 True False \n", + "2167 True False \n", + "9178 True False \n", + "2431 True False " + ] + }, + "execution_count": 162, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "answersDf[answersDf['POS'] == 'PROPN'].sample(n=5, random_state=16)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 163, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
answersentencewordCountisSingleTokenNERPOSTAGDEPshapeisAlphaisStop
4394jazzThe city was a center of jazz in the 1940s, ab...1TrueNOUNNNROOTxxxxTrueFalse
6695meditationWhile there is no convincing evidence for medi...1TrueNOUNNNROOTxxxxTrueFalse
7765dukkōnThe term may possibly derive from Proto-German...1TrueNOUNNNROOTxxxxTrueFalse
7889intelligenceDog intelligence is the ability of the dog to ...1TrueNOUNNNROOTxxxxTrueFalse
6772shramanas[note 16] These groups, whose members were kno...1TrueNOUNNNSROOTxxxxTrueFalse
\n", + "
" + ], + "text/plain": [ + " answer sentence \\\n", + "4394 jazz The city was a center of jazz in the 1940s, ab... \n", + "6695 meditation While there is no convincing evidence for medi... \n", + "7765 dukkōn The term may possibly derive from Proto-German... \n", + "7889 intelligence Dog intelligence is the ability of the dog to ... \n", + "6772 shramanas [note 16] These groups, whose members were kno... \n", + "\n", + " wordCount isSingleToken NER POS TAG DEP shape isAlpha isStop \n", + "4394 1 True NOUN NN ROOT xxxx True False \n", + "6695 1 True NOUN NN ROOT xxxx True False \n", + "7765 1 True NOUN NN ROOT xxxx True False \n", + "7889 1 True NOUN NN ROOT xxxx True False \n", + "6772 1 True NOUN NNS ROOT xxxx True False " + ] + }, + "execution_count": 163, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "answersDf[answersDf['POS'] == 'NOUN'].sample(n=5, random_state=16)" ] @@ -4090,9 +4559,231 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 164, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
answersentencewordCountisSingleTokenNERPOSTAGDEPshapeisAlphaisStop
6880487 millionAccording to Johnson and Grim (2013), Buddhism...2TrueCARDINALNUMCDcompoundddd xxxxFalseFalse
40541931The Art Deco style of the Chrysler Building (1...1TrueDATENUMCDROOTddddFalseFalse
96051975By 1975 the majority of local authorities in E...1TrueDATENUMCDROOTddddFalseFalse
326448On Metacritic, the film has a rating of 60 out...1TrueCARDINALNUMCDROOTddFalseFalse
24481565In 1565, the powerful Rinbung princes were ove...1TrueDATENUMCDROOTddddFalseFalse
25142007In 2007, Apple modified the iPod interface aga...1TrueDATENUMCDROOTddddFalseFalse
174226 February 1832On 26 February 1832 Chopin gave a debut Paris ...3TrueDATENUMCDnummoddd Xxxxx ddddFalseFalse
11374.40%The United States Census Bureau estimates that...2TruePERCENTNUMCDnummodd.dd %FalseFalse
838970\\n India: Due to concerns about pro-Tibet prot...1TrueCARDINALNUMCDROOTddFalseFalse
7123sevenStarting with season seven, contestants may pe...1TrueCARDINALNUMCDROOTxxxxTrueFalse
\n", + "
" + ], + "text/plain": [ + " answer sentence \\\n", + "6880 487 million According to Johnson and Grim (2013), Buddhism... \n", + "4054 1931 The Art Deco style of the Chrysler Building (1... \n", + "9605 1975 By 1975 the majority of local authorities in E... \n", + "3264 48 On Metacritic, the film has a rating of 60 out... \n", + "2448 1565 In 1565, the powerful Rinbung princes were ove... \n", + "2514 2007 In 2007, Apple modified the iPod interface aga... \n", + "1742 26 February 1832 On 26 February 1832 Chopin gave a debut Paris ... \n", + "1137 4.40% The United States Census Bureau estimates that... \n", + "8389 70 \\n India: Due to concerns about pro-Tibet prot... \n", + "7123 seven Starting with season seven, contestants may pe... \n", + "\n", + " wordCount isSingleToken NER POS TAG DEP shape \\\n", + "6880 2 True CARDINAL NUM CD compound ddd xxxx \n", + "4054 1 True DATE NUM CD ROOT dddd \n", + "9605 1 True DATE NUM CD ROOT dddd \n", + "3264 1 True CARDINAL NUM CD ROOT dd \n", + "2448 1 True DATE NUM CD ROOT dddd \n", + "2514 1 True DATE NUM CD ROOT dddd \n", + "1742 3 True DATE NUM CD nummod dd Xxxxx dddd \n", + "1137 2 True PERCENT NUM CD nummod d.dd % \n", + "8389 1 True CARDINAL NUM CD ROOT dd \n", + "7123 1 True CARDINAL NUM CD ROOT xxxx \n", + "\n", + " isAlpha isStop \n", + "6880 False False \n", + "4054 False False \n", + "9605 False False \n", + "3264 False False \n", + "2448 False False \n", + "2514 False False \n", + "1742 False False \n", + "1137 False False \n", + "8389 False False \n", + "7123 True False " + ] + }, + "execution_count": 164, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "answersDf[answersDf['POS'] == 'NUM'].sample(n=10, random_state=16)" ] @@ -4113,18 +4804,285 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 165, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
answersentencewordCountisSingleTokenNERPOSTAGDEPshapeisAlphaisStop
4540RepublicanNew York City has not been carried by a Republ...1TrueNORPADJJJROOTXxxxxTrueFalse
5828Galician-PortuguesePortuguese is a Romance language that originat...1TrueNORPADJJJamodXxxxx - XxxxxTrueFalse
6391monasticMost accept that he lived, taught and founded ...1TrueADJJJROOTxxxxTrueFalse
5438EthicalEthical commitments in anthropology include no...1TrueADJJJROOTXxxxxTrueFalse
5493FrenchPortuguese and their allied British troops fou...1TrueNORPADJJJROOTXxxxxTrueFalse
\n", + "
" + ], + "text/plain": [ + " answer sentence \\\n", + "4540 Republican New York City has not been carried by a Republ... \n", + "5828 Galician-Portuguese Portuguese is a Romance language that originat... \n", + "6391 monastic Most accept that he lived, taught and founded ... \n", + "5438 Ethical Ethical commitments in anthropology include no... \n", + "5493 French Portuguese and their allied British troops fou... \n", + "\n", + " wordCount isSingleToken NER POS TAG DEP shape isAlpha \\\n", + "4540 1 True NORP ADJ JJ ROOT Xxxxx True \n", + "5828 1 True NORP ADJ JJ amod Xxxxx - Xxxxx True \n", + "6391 1 True ADJ JJ ROOT xxxx True \n", + "5438 1 True ADJ JJ ROOT Xxxxx True \n", + "5493 1 True NORP ADJ JJ ROOT Xxxxx True \n", + "\n", + " isStop \n", + "4540 False \n", + "5828 False \n", + "6391 False \n", + "5438 False \n", + "5493 False " + ] + }, + "execution_count": 165, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "answersDf[(answersDf['POS'] == 'ADJ') & (answersDf['wordCount'] == 1)].sample(n=5, random_state=4)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 166, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
answersentencewordCountisSingleTokenNERPOSTAGDEPshapeisAlphaisStop
649FlawlessShe would later align herself more publicly wi...1TrueVERBVBROOTXxxxxTrueFalse
8044tabooHowever, Western, South Asian, African, and Mi...1TrueVERBVBROOTxxxxTrueFalse
1269destroyedThe definition upholds the centrality of inten...1TrueVERBVBNROOTxxxxTrueFalse
7879NeuteringNeutering reduces problems caused by hypersexu...1TrueVERBVBGROOTXxxxxTrueFalse
2893helmetHowever, as Hyrule Castle collapses, it is rev...1TrueVERBVBROOTxxxxTrueFalse
\n", + "
" + ], + "text/plain": [ + " answer sentence wordCount \\\n", + "649 Flawless She would later align herself more publicly wi... 1 \n", + "8044 taboo However, Western, South Asian, African, and Mi... 1 \n", + "1269 destroyed The definition upholds the centrality of inten... 1 \n", + "7879 Neutering Neutering reduces problems caused by hypersexu... 1 \n", + "2893 helmet However, as Hyrule Castle collapses, it is rev... 1 \n", + "\n", + " isSingleToken NER POS TAG DEP shape isAlpha isStop \n", + "649 True VERB VB ROOT Xxxxx True False \n", + "8044 True VERB VB ROOT xxxx True False \n", + "1269 True VERB VBN ROOT xxxx True False \n", + "7879 True VERB VBG ROOT Xxxxx True False \n", + "2893 True VERB VB ROOT xxxx True False " + ] + }, + "execution_count": 166, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "answersDf[(answersDf['POS'] == 'VERB') & (answersDf['wordCount'] == 1)].sample(n=5, random_state=4)" ] @@ -4145,9 +5103,146 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 167, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
answersentencewordCountisSingleTokenNERPOSTAGDEPshapeisAlphaisStop
3777$26 millionThe association has also collected a total of ...3TrueMONEYSYM$quantmod$ dd xxxxFalseFalse
9259US$2.5 trillionDuring the last quarter of 2008, these central...4TrueMONEYSYM$quantmodXX$ d.d xxxxFalseFalse
9067$70 trillionIn a Peabody Award winning program, NPR corres...3TrueMONEYSYM$quantmod$ dd xxxxFalseFalse
3252$70.4 millionThe film ended up grossing $70.4 million in it...3TrueMONEYSYM$quantmod$ dd.d xxxxFalseFalse
3675$772 millionMany donated through text messaging on mobile ...3TrueMONEYSYM$quantmod$ ddd xxxxFalseFalse
\n", + "
" + ], + "text/plain": [ + " answer sentence \\\n", + "3777 $26 million The association has also collected a total of ... \n", + "9259 US$2.5 trillion During the last quarter of 2008, these central... \n", + "9067 $70 trillion In a Peabody Award winning program, NPR corres... \n", + "3252 $70.4 million The film ended up grossing $70.4 million in it... \n", + "3675 $772 million Many donated through text messaging on mobile ... \n", + "\n", + " wordCount isSingleToken NER POS TAG DEP shape \\\n", + "3777 3 True MONEY SYM $ quantmod $ dd xxxx \n", + "9259 4 True MONEY SYM $ quantmod XX$ d.d xxxx \n", + "9067 3 True MONEY SYM $ quantmod $ dd xxxx \n", + "3252 3 True MONEY SYM $ quantmod $ dd.d xxxx \n", + "3675 3 True MONEY SYM $ quantmod $ ddd xxxx \n", + "\n", + " isAlpha isStop \n", + "3777 False False \n", + "9259 False False \n", + "9067 False False \n", + "3252 False False \n", + "3675 False False " + ] + }, + "execution_count": 167, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "answersDf[(answersDf['POS'] == 'SYM')].sample(n=5, random_state=4)" ] @@ -4173,7 +5268,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 168, "metadata": {}, "outputs": [], "source": [ @@ -4209,14 +5304,27 @@ " highlightedText += paragraph[currentPlaceInText:len(paragraph)]\n", "\n", " #Diplay the highlighted text\n", - " display(Markdown(highlightedText))" + " display(Markdown(highlightedText)) #this format can make ** ** bold work" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 169, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/markdown": [ + "Located approximately 250 kilometres (**160** mi) east of Puerto Rico and the nearer Virgin Islands, St. Barthélemy lies immediately southeast of the islands of Saint Martin and Anguilla. It is one of **the Renaissance** Islands. St. Barthélemy is separated from Saint Martin by **the Saint-Barthélemy Channel**. It lies northeast of Saba and St Eustatius, and north of St Kitts. Some small **satellite islets** belong to St. Barthélemy including Île Chevreau (Île Bonhomme), Île Frégate, Île Toc Vers, Île Tortue and Gros Îlets (Îlots Syndare). A much bigger islet, Île Fourchue, lies on the north of the island, in the Saint-Barthélemy Channel. Other rocky islets which include Coco, the Roques (or **little Turtle rocks**), the Goat, and the Sugarloaf." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "titleId = 24\n", "paragraphId = 0\n", @@ -4226,9 +5334,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 170, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/markdown": [ + "**Inappropriate antibiotic treatment and overuse** of antibiotics have contributed to the emergence of antibiotic-resistant bacteria. **Self prescription** of antibiotics is an example of misuse. Many antibiotics are frequently prescribed to treat symptoms or diseases that do not respond to antibiotics or that are likely to resolve without treatment. Also, incorrect or suboptimal antibiotics are prescribed for certain bacterial infections. The **overuse of antibiotics**, like penicillin and erythromycin, has been associated with emerging antibiotic resistance since the 1950s. Widespread usage of antibiotics in hospitals has also been associated with increases in bacterial strains and species that no longer respond to treatment with the most common antibiotics." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "titleId = 4\n", "paragraphId = 12\n", @@ -4238,9 +5359,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 171, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/markdown": [ + "According to the **endurance running hypothesis**, long-distance running as in **persistence hunting**, a method still practiced by **some hunter-gatherer groups** in modern times, was likely the driving evolutionary force leading to the evolution of certain human characteristics. This hypothesis does not necessarily contradict the **scavenging hypothesis**: **both subsistence strategies** could have been in use – sequentially, alternating or even simultaneously." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "titleId = 52\n", "paragraphId = 4\n", @@ -4250,9 +5384,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 172, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/markdown": [ + "The first commercially successful true engine, in that it could generate power and transmit it to a machine, was the **atmospheric engine**, invented by **Thomas Newcomen** around **1712**. It was an improvement over Savery's **steam pump**, using a piston as proposed by **Papin**. Newcomen's engine was relatively inefficient, and in most cases was used for pumping water. It worked by creating a partial vacuum by condensing steam under a piston within a cylinder. It was employed for draining mine workings at depths hitherto impossible, and also for providing a reusable water supply for driving waterwheels at factories sited away from a suitable \"head\". Water that had passed over the wheel was pumped back up into a storage reservoir above the wheel." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "titleId = 453\n", "paragraphId = 1\n", @@ -4280,9 +5427,51 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 173, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "the school\n", + "a Catholic character\n", + "the Main Building's gold dome\n", + "a golden statue\n", + "the Virgin Mary\n", + "front\n", + "the Main Building\n", + "it\n", + "a copper statue\n", + "Christ\n", + "arms\n", + "the legend\n", + "\"Venite Ad Me Omnes\n", + "the Main Building\n", + "the Basilica\n", + "the Sacred Heart\n", + "the basilica\n", + "the Grotto\n", + "a Marian place\n", + "prayer\n", + "reflection\n", + "It\n", + "a replica\n", + "the grotto\n", + "Lourdes\n", + "France\n", + "the Virgin Mary\n", + "the end\n", + "the main drive\n", + "a direct line\n", + "that\n", + "3 statues\n", + "the Gold Dome\n", + "a simple, modern stone statue\n", + "Mary\n" + ] + } + ], "source": [ "text = df['data'][0]['paragraphs'][0]['context']\n", "doc = nlp(text)\n", @@ -4293,9 +5482,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 174, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/markdown": [ + "Architecturally, the school has a Catholic character. Atop the Main Building's gold dome is **a golden statue of the Virgin Mary**. Immediately in front of the Main Building and facing it, is **a copper statue of Christ** with arms upraised with the legend \"Venite Ad Me Omnes\". Next to **the Main Building** is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, **a Marian place of prayer and reflection**. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to **Saint Bernadette Soubirous** in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary." + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "titleId = 0\n", "paragraphId = 0\n", @@ -4348,7 +5550,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.11.7" } }, "nbformat": 4, diff --git a/02. Identify Keywords/01. Feature-Engineering.ipynb b/02. Identify Keywords/01. Feature-Engineering.ipynb index 97c8e1b..a49758e 100644 --- a/02. Identify Keywords/01. Feature-Engineering.ipynb +++ b/02. Identify Keywords/01. Feature-Engineering.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 75, "metadata": {}, "outputs": [], "source": [ @@ -33,7 +33,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 76, "metadata": {}, "outputs": [], "source": [ @@ -51,7 +51,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 77, "metadata": {}, "outputs": [], "source": [ @@ -60,14 +60,21 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 78, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|██████████████████████████████████████████████████████████████████████████████████| 10/10 [00:05<00:00, 1.97it/s]\n" + " 0%| | 0/10 [00:00= senStart and answerStart < (senStart + senLen)):\n", + " if (answerStart >= senStart and answerStart < (senStart + senLen)): #if answer falls within the range of current sentence\n", " answers.append({'sentenceId': senId, 'text': answer['answers'][0]['text']})\n", "\n", " senStart += senLen\n", @@ -269,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 85, "metadata": {}, "outputs": [ { @@ -282,7 +289,7 @@ " {'sentenceId': 5, 'text': 'Saint Bernadette Soubirous'}]" ] }, - "execution_count": 11, + "execution_count": 85, "metadata": {}, "output_type": "execute_result" } @@ -294,11 +301,10 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 86, "metadata": {}, "outputs": [], "source": [ - "#TODO - Clean answers from stopwords?\n", "def tokenIsAnswer(token, sentenceId, answers):\n", " for i in range(len(answers)):\n", " if (answers[i]['sentenceId'] == sentenceId):\n", @@ -309,7 +315,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 87, "metadata": {}, "outputs": [ { @@ -318,7 +324,7 @@ "False" ] }, - "execution_count": 13, + "execution_count": 87, "metadata": {}, "output_type": "execute_result" } @@ -329,7 +335,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 88, "metadata": {}, "outputs": [], "source": [ @@ -338,14 +344,14 @@ "def getNEStartIndexs(doc):\n", " neStarts = {}\n", " for ne in doc.ents:\n", - " neStarts[ne.start] = ne\n", + " neStarts[ne.start] = ne #position of each named entity\n", " \n", " return neStarts " ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 89, "metadata": {}, "outputs": [ { @@ -360,12 +366,12 @@ "currNeStarts = getNEStartIndexs(currDoc)\n", "\n", "if 6 in currNeStarts:\n", - " print(currNeStarts[6].label_)" + " print(currNeStarts[6].label_)\n" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 90, "metadata": {}, "outputs": [], "source": [ @@ -377,7 +383,7 @@ " \n", " return senStarts\n", " \n", - "def getSentenceForWordPosition(wordPos, senStarts):\n", + "def getSentenceForWordPosition(wordPos, senStarts): #through word position we find in which sentence does it lie\n", " for i in range(1, len(senStarts)):\n", " if (wordPos < senStarts[i]):\n", " return i - 1" @@ -385,7 +391,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 91, "metadata": {}, "outputs": [ { @@ -394,7 +400,7 @@ "[0, 9, 25, 55, 68, 84, 108]" ] }, - "execution_count": 17, + "execution_count": 91, "metadata": {}, "output_type": "execute_result" } @@ -406,7 +412,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 92, "metadata": {}, "outputs": [], "source": [ @@ -415,7 +421,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 93, "metadata": {}, "outputs": [ { @@ -463,7 +469,7 @@ "Index: []" ] }, - "execution_count": 19, + "execution_count": 93, "metadata": {}, "output_type": "execute_result" } @@ -491,7 +497,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 94, "metadata": {}, "outputs": [], "source": [ @@ -555,7 +561,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 95, "metadata": {}, "outputs": [], "source": [ @@ -564,7 +570,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 96, "metadata": {}, "outputs": [ { @@ -573,7 +579,7 @@ "[]" ] }, - "execution_count": 22, + "execution_count": 96, "metadata": {}, "output_type": "execute_result" } @@ -584,7 +590,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 97, "metadata": {}, "outputs": [], "source": [ @@ -593,7 +599,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 98, "metadata": {}, "outputs": [ { @@ -602,7 +608,7 @@ "['Architecturally', False, 0, 0, 0, 1, None, 'ADV', 'RB', 'advmod', 'Xxxxx']" ] }, - "execution_count": 24, + "execution_count": 98, "metadata": {}, "output_type": "execute_result" } @@ -613,7 +619,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 99, "metadata": {}, "outputs": [ { @@ -741,7 +747,7 @@ "4 None ADP IN prep Xxxx " ] }, - "execution_count": 25, + "execution_count": 99, "metadata": {}, "output_type": "execute_result" } @@ -753,7 +759,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 100, "metadata": {}, "outputs": [ { @@ -792,7 +798,7 @@ " \n", " \n", " \n", - " 22\n", + " 21\n", " the Main Building\n", " True\n", " 0\n", @@ -825,15 +831,15 @@ ], "text/plain": [ " text isAnswer titleId paragrapghId sentenceId \\\n", - "22 the Main Building True 0 0 3.0 \n", + "21 the Main Building True 0 0 3.0 \n", "38 Saint Bernadette Soubirous True 0 0 5.0 \n", "\n", " wordCount NER POS TAG DEP shape \n", - "22 3 FAC None None None xxx Xxxx Xxxxx \n", + "21 3 FAC None None None xxx Xxxx Xxxxx \n", "38 3 PERSON None None None Xxxxx Xxxxx Xxxxx " ] }, - "execution_count": 26, + "execution_count": 100, "metadata": {}, "output_type": "execute_result" } @@ -851,14 +857,21 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 101, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "100%|████████████████████████████████████████████████████████████████████████████████████| 2/2 [00:03<00:00, 1.84s/it]\n" + " 0%| | 0/2 [00:000.0\n", " 1\n", " Xxxxx\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 1\n", @@ -339,20 +340,20 @@ " 0.0\n", " 1\n", " xxxx\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 2\n", @@ -363,20 +364,20 @@ " 0.0\n", " 1\n", " Xxxxx\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 3\n", @@ -387,20 +388,20 @@ " 0.0\n", " 1\n", " xxxx\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 4\n", @@ -411,20 +412,20 @@ " 1.0\n", " 1\n", " Xxxx\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 1\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " True\n", + " False\n", + " False\n", " \n", " \n", "\n", @@ -440,30 +441,30 @@ "4 Atop False 0 0 1.0 1 \n", "\n", " shape NER_CARDINAL NER_DATE NER_EVENT ... DEP_nummod DEP_oprd \\\n", - "0 Xxxxx 0 0 0 ... 0 0 \n", - "1 xxxx 0 0 0 ... 0 0 \n", - "2 Xxxxx 0 0 0 ... 0 0 \n", - "3 xxxx 0 0 0 ... 0 0 \n", - "4 Xxxx 0 0 0 ... 0 0 \n", + "0 Xxxxx False False False ... False False \n", + "1 xxxx False False False ... False False \n", + "2 Xxxxx False False False ... False False \n", + "3 xxxx False False False ... False False \n", + "4 Xxxx False False False ... False False \n", "\n", " DEP_parataxis DEP_pcomp DEP_pobj DEP_poss DEP_predet DEP_prep \\\n", - "0 0 0 0 0 0 0 \n", - "1 0 0 0 0 0 0 \n", - "2 0 0 0 0 0 0 \n", - "3 0 0 0 0 0 0 \n", - "4 0 0 0 0 0 1 \n", + "0 False False False False False False \n", + "1 False False False False False False \n", + "2 False False False False False False \n", + "3 False False False False False False \n", + "4 False False False False False True \n", "\n", " DEP_relcl DEP_xcomp \n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", + "0 False False \n", + "1 False False \n", + "2 False False \n", + "3 False False \n", + "4 False False \n", "\n", "[5 rows x 83 columns]" ] }, - "execution_count": 11, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -482,7 +483,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ @@ -491,7 +492,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -500,7 +501,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 59, "metadata": {}, "outputs": [ { @@ -552,121 +553,121 @@ " 0\n", " False\n", " 1\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 1\n", " False\n", " 1\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 2\n", " False\n", " 1\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 3\n", " False\n", " 1\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 4\n", " False\n", " 1\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 1\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " True\n", + " False\n", + " False\n", " \n", " \n", "\n", @@ -675,30 +676,30 @@ ], "text/plain": [ " isAnswer wordCount NER_CARDINAL NER_DATE NER_EVENT NER_FAC NER_GPE \\\n", - "0 False 1 0 0 0 0 0 \n", - "1 False 1 0 0 0 0 0 \n", - "2 False 1 0 0 0 0 0 \n", - "3 False 1 0 0 0 0 0 \n", - "4 False 1 0 0 0 0 0 \n", + "0 False 1 False False False False False \n", + "1 False 1 False False False False False \n", + "2 False 1 False False False False False \n", + "3 False 1 False False False False False \n", + "4 False 1 False False False False False \n", "\n", " NER_LANGUAGE NER_LAW NER_LOC ... DEP_nummod DEP_oprd DEP_parataxis \\\n", - "0 0 0 0 ... 0 0 0 \n", - "1 0 0 0 ... 0 0 0 \n", - "2 0 0 0 ... 0 0 0 \n", - "3 0 0 0 ... 0 0 0 \n", - "4 0 0 0 ... 0 0 0 \n", + "0 False False False ... False False False \n", + "1 False False False ... False False False \n", + "2 False False False ... False False False \n", + "3 False False False ... False False False \n", + "4 False False False ... False False False \n", "\n", " DEP_pcomp DEP_pobj DEP_poss DEP_predet DEP_prep DEP_relcl DEP_xcomp \n", - "0 0 0 0 0 0 0 0 \n", - "1 0 0 0 0 0 0 0 \n", - "2 0 0 0 0 0 0 0 \n", - "3 0 0 0 0 0 0 0 \n", - "4 0 0 0 0 1 0 0 \n", + "0 False False False False False False False \n", + "1 False False False False False False False \n", + "2 False False False False False False False \n", + "3 False False False False False False False \n", + "4 False False False False True False False \n", "\n", "[5 rows x 78 columns]" ] }, - "execution_count": 14, + "execution_count": 59, "metadata": {}, "output_type": "execute_result" } @@ -716,7 +717,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 60, "metadata": {}, "outputs": [], "source": [ @@ -733,14 +734,122 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['wordCount', 'NER_CARDINAL', 'NER_DATE', 'NER_EVENT', 'NER_FAC',\n", + " 'NER_GPE', 'NER_LANGUAGE', 'NER_LAW', 'NER_LOC', 'NER_MONEY',\n", + " 'NER_NORP', 'NER_ORDINAL', 'NER_ORG', 'NER_PERCENT', 'NER_PERSON',\n", + " 'NER_PRODUCT', 'NER_QUANTITY', 'NER_TIME', 'NER_WORK_OF_ART', 'POS_ADJ',\n", + " 'POS_ADP', 'POS_ADV', 'POS_NOUN', 'POS_NUM', 'POS_PROPN', 'POS_SCONJ',\n", + " 'POS_VERB', 'TAG_CD', 'TAG_IN', 'TAG_JJ', 'TAG_JJR', 'TAG_JJS',\n", + " 'TAG_NN', 'TAG_NNP', 'TAG_NNPS', 'TAG_NNS', 'TAG_RB', 'TAG_RBR',\n", + " 'TAG_RBS', 'TAG_VB', 'TAG_VBD', 'TAG_VBG', 'TAG_VBN', 'TAG_VBP',\n", + " 'TAG_VBZ', 'DEP_ROOT', 'DEP_acl', 'DEP_acomp', 'DEP_advcl',\n", + " 'DEP_advmod', 'DEP_amod', 'DEP_appos', 'DEP_attr', 'DEP_aux',\n", + " 'DEP_auxpass', 'DEP_cc', 'DEP_ccomp', 'DEP_compound', 'DEP_conj',\n", + " 'DEP_csubj', 'DEP_dative', 'DEP_dep', 'DEP_dobj', 'DEP_nmod',\n", + " 'DEP_npadvmod', 'DEP_nsubj', 'DEP_nsubjpass', 'DEP_nummod', 'DEP_oprd',\n", + " 'DEP_parataxis', 'DEP_pcomp', 'DEP_pobj', 'DEP_poss', 'DEP_predet',\n", + " 'DEP_prep', 'DEP_relcl', 'DEP_xcomp'],\n", + " dtype='object')" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_data.columns\n" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "77" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_data.columns\n", + "len(x_data.columns)" + ] + }, + { + "cell_type": "code", + "execution_count": 63, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "7810\n", + " wordCount NER_CARDINAL NER_DATE NER_EVENT NER_FAC NER_GPE \\\n", + "4141 1 False False False False False \n", + "4069 1 False False False False False \n", + "5174 1 False False False False False \n", + "7195 1 False False False False False \n", + "8188 1 False False False False False \n", + "... ... ... ... ... ... ... \n", + "456 1 False False False False False \n", + "6017 2 False True False False False \n", + "709 1 False False False False False \n", + "8366 1 False False False False False \n", + "1146 1 False False False False False \n", + "\n", + " NER_LANGUAGE NER_LAW NER_LOC NER_MONEY ... DEP_nummod DEP_oprd \\\n", + "4141 False False False False ... False False \n", + "4069 False False False False ... False False \n", + "5174 False False False False ... False False \n", + "7195 False False False False ... False False \n", + "8188 False False False False ... False False \n", + "... ... ... ... ... ... ... ... \n", + "456 False False False False ... False False \n", + "6017 False False False False ... False False \n", + "709 False False False False ... False False \n", + "8366 False False False False ... False False \n", + "1146 False False False False ... False False \n", + "\n", + " DEP_parataxis DEP_pcomp DEP_pobj DEP_poss DEP_predet DEP_prep \\\n", + "4141 False False False False False False \n", + "4069 False False True False False False \n", + "5174 False False False False False False \n", + "7195 False False False False False False \n", + "8188 False False False False False False \n", + "... ... ... ... ... ... ... \n", + "456 False False True False False False \n", + "6017 False False False False False False \n", + "709 False False False False False False \n", + "8366 False False False False False False \n", + "1146 False False False False False False \n", + "\n", + " DEP_relcl DEP_xcomp \n", + "4141 False False \n", + "4069 False False \n", + "5174 False False \n", + "7195 False False \n", + "8188 False False \n", + "... ... ... \n", + "456 False False \n", + "6017 False False \n", + "709 False False \n", + "8366 False False \n", + "1146 False False \n", + "\n", + "[7810 rows x 77 columns]\n", "7810\n", "868\n", "868\n" @@ -748,7 +857,7 @@ } ], "source": [ - "print(len(x_train))\n", + "print(x_train)\n", "print(len(y_train))\n", "print(len(x_test))\n", "print(len(y_test))" @@ -756,7 +865,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 64, "metadata": {}, "outputs": [ { @@ -770,7 +879,7 @@ "Name: isAnswer, dtype: bool" ] }, - "execution_count": 17, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } @@ -788,7 +897,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 65, "metadata": {}, "outputs": [], "source": [ @@ -799,12 +908,12 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 66, "metadata": {}, "outputs": [], "source": [ "predictor = gnb.fit(x_train, y_train)\n", - "y_pred = predictor.predict(x_test)" + "y_pred = predictor.predict(x_test)\n" ] }, { @@ -816,7 +925,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 67, "metadata": {}, "outputs": [ { @@ -849,7 +958,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 68, "metadata": {}, "outputs": [ { @@ -859,7 +968,7 @@ " [ 2, 38]], dtype=int64)" ] }, - "execution_count": 21, + "execution_count": 68, "metadata": {}, "output_type": "execute_result" } @@ -879,7 +988,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 69, "metadata": {}, "outputs": [], "source": [ @@ -920,51 +1029,17 @@ }, { "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: matplotlib in d:\\code\\question-generation\\venv\\lib\\site-packages (3.3.4)\n", - "Requirement already satisfied: cycler>=0.10 in d:\\code\\question-generation\\venv\\lib\\site-packages (from matplotlib) (0.10.0)\n", - "Requirement already satisfied: kiwisolver>=1.0.1 in d:\\code\\question-generation\\venv\\lib\\site-packages (from matplotlib) (1.3.1)\n", - "Requirement already satisfied: numpy>=1.15 in d:\\code\\question-generation\\venv\\lib\\site-packages (from matplotlib) (1.20.1)\n", - "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.3 in d:\\code\\question-generation\\venv\\lib\\site-packages (from matplotlib) (2.4.7)\n", - "Requirement already satisfied: python-dateutil>=2.1 in d:\\code\\question-generation\\venv\\lib\\site-packages (from matplotlib) (2.8.1)\n", - "Requirement already satisfied: pillow>=6.2.0 in d:\\code\\question-generation\\venv\\lib\\site-packages (from matplotlib) (8.1.2)\n", - "Requirement already satisfied: six in d:\\code\\question-generation\\venv\\lib\\site-packages (from cycler>=0.10->matplotlib) (1.15.0)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "WARNING: You are using pip version 19.2.3, however version 21.0.1 is available.\n", - "You should consider upgrading via the 'python -m pip install --upgrade pip' command.\n" - ] - } - ], - "source": [ - "!pip install matplotlib" - ] - }, - { - "cell_type": "code", - "execution_count": 24, + "execution_count": 70, "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ - "
" + "
" ] }, - "metadata": { - "needs_background": "light" - }, + "metadata": {}, "output_type": "display_data" } ], @@ -974,18 +1049,19 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ + "isAnswer\n", "False 828\n", "True 40\n", - "Name: isAnswer, dtype: int64" + "Name: count, dtype: int64" ] }, - "execution_count": 25, + "execution_count": 71, "metadata": {}, "output_type": "execute_result" } @@ -996,7 +1072,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 72, "metadata": {}, "outputs": [], "source": [ @@ -1005,7 +1081,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 73, "metadata": {}, "outputs": [ { @@ -1013,10 +1089,10 @@ "text/plain": [ "True 657\n", "False 211\n", - "dtype: int64" + "Name: count, dtype: int64" ] }, - "execution_count": 27, + "execution_count": 73, "metadata": {}, "output_type": "execute_result" } @@ -1042,7 +1118,17 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "df.head()\n", + "df.drop(columns=['isAnswer'], inplace=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 75, "metadata": {}, "outputs": [], "source": [ @@ -1056,10 +1142,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 76, "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "data": { + "text/plain": [ + "77" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(df.columns)" + ] }, { "cell_type": "code", @@ -1085,7 +1184,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.11.7" } }, "nbformat": 4, diff --git a/02. Identify Keywords/03. Predict.ipynb b/02. Identify Keywords/03. Predict.ipynb index e469320..4d5d8f4 100644 --- a/02. Identify Keywords/03. Predict.ipynb +++ b/02. Identify Keywords/03. Predict.ipynb @@ -12,7 +12,7 @@ }, { "cell_type": "code", - "execution_count": 91, + "execution_count": 137, "metadata": {}, "outputs": [], "source": [ @@ -29,7 +29,7 @@ }, { "cell_type": "code", - "execution_count": 92, + "execution_count": 138, "metadata": {}, "outputs": [], "source": [ @@ -66,7 +66,7 @@ }, { "cell_type": "code", - "execution_count": 93, + "execution_count": 139, "metadata": {}, "outputs": [], "source": [ @@ -94,7 +94,7 @@ " for answer in qas:\n", " answerStart = answer['answers'][0]['answer_start']\n", "\n", - " if (answerStart >= senStart and answerStart < (senStart + senLen)):\n", + " if (answerStart >= senStart and answerStart < (senStart + senLen)): #if answer lies within the sentence range\n", " answers.append({'sentenceId': senId, 'text': answer['answers'][0]['text']})\n", "\n", " senStart += senLen\n", @@ -193,7 +193,7 @@ }, { "cell_type": "code", - "execution_count": 94, + "execution_count": 140, "metadata": {}, "outputs": [], "source": [ @@ -205,7 +205,7 @@ }, { "cell_type": "code", - "execution_count": 95, + "execution_count": 141, "metadata": {}, "outputs": [ { @@ -214,7 +214,7 @@ "'Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend \"Venite Ad Me Omnes\". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.'" ] }, - "execution_count": 95, + "execution_count": 141, "metadata": {}, "output_type": "execute_result" } @@ -229,7 +229,7 @@ }, { "cell_type": "code", - "execution_count": 96, + "execution_count": 142, "metadata": {}, "outputs": [], "source": [ @@ -239,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 97, + "execution_count": 143, "metadata": {}, "outputs": [ { @@ -361,7 +361,7 @@ "4 IN prep Xxxx " ] }, - "execution_count": 97, + "execution_count": 143, "metadata": {}, "output_type": "execute_result" } @@ -381,7 +381,7 @@ }, { "cell_type": "code", - "execution_count": 98, + "execution_count": 144, "metadata": {}, "outputs": [ { @@ -409,7 +409,7 @@ }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 145, "metadata": {}, "outputs": [ { @@ -444,6 +444,7 @@ " NER_FAC\n", " NER_GPE\n", " ...\n", + " DEP_amod\n", " DEP_appos\n", " DEP_attr\n", " DEP_compound\n", @@ -451,7 +452,6 @@ " DEP_dobj\n", " DEP_nsubj\n", " DEP_pobj\n", - " DEP_poss\n", " DEP_prep\n", " DEP_relcl\n", " \n", @@ -465,21 +465,21 @@ " 0.0\n", " 1\n", " Xxxxx\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 1\n", @@ -489,21 +489,21 @@ " 0.0\n", " 1\n", " xxxx\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 1\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " True\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 2\n", @@ -513,21 +513,21 @@ " 0.0\n", " 1\n", " Xxxxx\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 3\n", @@ -537,21 +537,21 @@ " 0.0\n", " 1\n", " xxxx\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 1\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " True\n", + " False\n", + " False\n", + " False\n", + " False\n", " \n", " \n", " 4\n", @@ -561,21 +561,21 @@ " 1.0\n", " 1\n", " Xxxx\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", " ...\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 1\n", - " 0\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " False\n", + " True\n", + " False\n", " \n", " \n", "\n", @@ -590,31 +590,31 @@ "3 character 0 0 0.0 1 xxxx \n", "4 Atop 0 0 1.0 1 Xxxx \n", "\n", - " NER_CARDINAL NER_DATE NER_FAC NER_GPE ... DEP_appos DEP_attr \\\n", - "0 0 0 0 0 ... 0 0 \n", - "1 0 0 0 0 ... 0 0 \n", - "2 0 0 0 0 ... 0 0 \n", - "3 0 0 0 0 ... 0 0 \n", - "4 0 0 0 0 ... 0 0 \n", + " NER_CARDINAL NER_DATE NER_FAC NER_GPE ... DEP_amod DEP_appos \\\n", + "0 False False False False ... False False \n", + "1 False False False False ... False False \n", + "2 False False False False ... False False \n", + "3 False False False False ... False False \n", + "4 False False False False ... False False \n", "\n", - " DEP_compound DEP_conj DEP_dobj DEP_nsubj DEP_pobj DEP_poss DEP_prep \\\n", - "0 0 0 0 0 0 0 0 \n", - "1 0 0 0 1 0 0 0 \n", - "2 0 0 0 0 0 0 0 \n", - "3 0 0 1 0 0 0 0 \n", - "4 0 0 0 0 0 0 1 \n", + " DEP_attr DEP_compound DEP_conj DEP_dobj DEP_nsubj DEP_pobj DEP_prep \\\n", + "0 False False False False False False False \n", + "1 False False False False True False False \n", + "2 False False False False False False False \n", + "3 False False False True False False False \n", + "4 False False False False False False True \n", "\n", " DEP_relcl \n", - "0 0 \n", - "1 0 \n", - "2 0 \n", - "3 0 \n", - "4 0 \n", + "0 False \n", + "1 False \n", + "2 False \n", + "3 False \n", + "4 False \n", "\n", "[5 rows x 43 columns]" ] }, - "execution_count": 99, + "execution_count": 145, "metadata": {}, "output_type": "execute_result" } @@ -632,17 +632,17 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 146, "metadata": {}, "outputs": [], "source": [ "predictorFeaturesName = '../data/pickles/nb-predictor-features.pkl'\n", - "predictorColumns = loadPickle(predictorFeaturesName)" + "predictorColumns = loadPickle(predictorFeaturesName)\n" ] }, { "cell_type": "code", - "execution_count": 101, + "execution_count": 147, "metadata": {}, "outputs": [], "source": [ @@ -651,7 +651,7 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 148, "metadata": {}, "outputs": [ { @@ -675,7 +675,6 @@ " \n", " \n", " \n", - " isAnswer\n", " wordCount\n", " NER_CARDINAL\n", " NER_DATE\n", @@ -685,6 +684,7 @@ " NER_LANGUAGE\n", " NER_LAW\n", " NER_LOC\n", + " NER_MONEY\n", " ...\n", " DEP_nummod\n", " DEP_oprd\n", @@ -701,18 +701,18 @@ " \n", " \n", "\n", - "

0 rows × 78 columns

\n", + "

0 rows × 77 columns

\n", "" ], "text/plain": [ "Empty DataFrame\n", - "Columns: [isAnswer, wordCount, NER_CARDINAL, NER_DATE, NER_EVENT, NER_FAC, NER_GPE, NER_LANGUAGE, NER_LAW, NER_LOC, NER_MONEY, NER_NORP, NER_ORDINAL, NER_ORG, NER_PERCENT, NER_PERSON, NER_PRODUCT, NER_QUANTITY, NER_TIME, NER_WORK_OF_ART, POS_ADJ, POS_ADP, POS_ADV, POS_NOUN, POS_NUM, POS_PROPN, POS_SCONJ, POS_VERB, TAG_CD, TAG_IN, TAG_JJ, TAG_JJR, TAG_JJS, TAG_NN, TAG_NNP, TAG_NNPS, TAG_NNS, TAG_RB, TAG_RBR, TAG_RBS, TAG_VB, TAG_VBD, TAG_VBG, TAG_VBN, TAG_VBP, TAG_VBZ, DEP_ROOT, DEP_acl, DEP_acomp, DEP_advcl, DEP_advmod, DEP_amod, DEP_appos, DEP_attr, DEP_aux, DEP_auxpass, DEP_cc, DEP_ccomp, DEP_compound, DEP_conj, DEP_csubj, DEP_dative, DEP_dep, DEP_dobj, DEP_nmod, DEP_npadvmod, DEP_nsubj, DEP_nsubjpass, DEP_nummod, DEP_oprd, DEP_parataxis, DEP_pcomp, DEP_pobj, DEP_poss, DEP_predet, DEP_prep, DEP_relcl, DEP_xcomp]\n", + "Columns: [wordCount, NER_CARDINAL, NER_DATE, NER_EVENT, NER_FAC, NER_GPE, NER_LANGUAGE, NER_LAW, NER_LOC, NER_MONEY, NER_NORP, NER_ORDINAL, NER_ORG, NER_PERCENT, NER_PERSON, NER_PRODUCT, NER_QUANTITY, NER_TIME, NER_WORK_OF_ART, POS_ADJ, POS_ADP, POS_ADV, POS_NOUN, POS_NUM, POS_PROPN, POS_SCONJ, POS_VERB, TAG_CD, TAG_IN, TAG_JJ, TAG_JJR, TAG_JJS, TAG_NN, TAG_NNP, TAG_NNPS, TAG_NNS, TAG_RB, TAG_RBR, TAG_RBS, TAG_VB, TAG_VBD, TAG_VBG, TAG_VBN, TAG_VBP, TAG_VBZ, DEP_ROOT, DEP_acl, DEP_acomp, DEP_advcl, DEP_advmod, DEP_amod, DEP_appos, DEP_attr, DEP_aux, DEP_auxpass, DEP_cc, DEP_ccomp, DEP_compound, DEP_conj, DEP_csubj, DEP_dative, DEP_dep, DEP_dobj, DEP_nmod, DEP_npadvmod, DEP_nsubj, DEP_nsubjpass, DEP_nummod, DEP_oprd, DEP_parataxis, DEP_pcomp, DEP_pobj, DEP_poss, DEP_predet, DEP_prep, DEP_relcl, DEP_xcomp]\n", "Index: []\n", "\n", - "[0 rows x 78 columns]" + "[0 rows x 77 columns]" ] }, - "execution_count": 102, + "execution_count": 148, "metadata": {}, "output_type": "execute_result" } @@ -723,29 +723,62 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 149, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 149, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "for column in wordsDf.columns:\n", - " if (column in df.columns):\n", - " wordsDf[column] = df[column]\n", - " else:\n", - " wordsDf[column] = 0" + "wordsDf.columns\n", + "len(wordsDf)" ] }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 150, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "54" + ] + }, + "execution_count": 150, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.columns\n", + "len(df)" + ] + }, + { + "cell_type": "code", + "execution_count": 151, "metadata": {}, "outputs": [], "source": [ - "wordsDf = wordsDf.drop(['isAnswer'], axis = 1)" + "for column in wordsDf.columns:\n", + " if (column in df.columns):\n", + " wordsDf[column] = df[column]\n", + " else:\n", + " wordsDf[column] = 0" ] }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 152, "metadata": {}, "outputs": [ { @@ -796,121 +829,121 @@ " \n", " 0\n", " 1\n", + " False\n", + " False\n", " 0\n", + " False\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", " 0\n", " ...\n", " 0\n", " 0\n", " 0\n", " 0\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", " 0\n", " \n", " \n", " 1\n", " 1\n", + " False\n", + " False\n", " 0\n", + " False\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", " 0\n", " ...\n", " 0\n", " 0\n", " 0\n", " 0\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", " 0\n", " \n", " \n", " 2\n", " 1\n", + " False\n", + " False\n", " 0\n", + " False\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", " 0\n", " ...\n", " 0\n", " 0\n", " 0\n", " 0\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", " 0\n", " \n", " \n", " 3\n", " 1\n", + " False\n", + " False\n", " 0\n", + " False\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", " 0\n", " ...\n", " 0\n", " 0\n", " 0\n", " 0\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", + " False\n", " 0\n", " \n", " \n", " 4\n", " 1\n", + " False\n", + " False\n", " 0\n", + " False\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", - " 0\n", + " False\n", " 0\n", " ...\n", " 0\n", " 0\n", " 0\n", " 0\n", + " False\n", " 0\n", " 0\n", - " 0\n", - " 1\n", - " 0\n", + " True\n", + " False\n", " 0\n", " \n", " \n", @@ -920,37 +953,37 @@ ], "text/plain": [ " wordCount NER_CARDINAL NER_DATE NER_EVENT NER_FAC NER_GPE \\\n", - "0 1 0 0 0 0 0 \n", - "1 1 0 0 0 0 0 \n", - "2 1 0 0 0 0 0 \n", - "3 1 0 0 0 0 0 \n", - "4 1 0 0 0 0 0 \n", + "0 1 False False 0 False False \n", + "1 1 False False 0 False False \n", + "2 1 False False 0 False False \n", + "3 1 False False 0 False False \n", + "4 1 False False 0 False False \n", "\n", " NER_LANGUAGE NER_LAW NER_LOC NER_MONEY ... DEP_nummod DEP_oprd \\\n", - "0 0 0 0 0 ... 0 0 \n", - "1 0 0 0 0 ... 0 0 \n", - "2 0 0 0 0 ... 0 0 \n", - "3 0 0 0 0 ... 0 0 \n", - "4 0 0 0 0 ... 0 0 \n", + "0 0 0 False 0 ... 0 0 \n", + "1 0 0 False 0 ... 0 0 \n", + "2 0 0 False 0 ... 0 0 \n", + "3 0 0 False 0 ... 0 0 \n", + "4 0 0 False 0 ... 0 0 \n", "\n", " DEP_parataxis DEP_pcomp DEP_pobj DEP_poss DEP_predet DEP_prep \\\n", - "0 0 0 0 0 0 0 \n", - "1 0 0 0 0 0 0 \n", - "2 0 0 0 0 0 0 \n", - "3 0 0 0 0 0 0 \n", - "4 0 0 0 0 0 1 \n", + "0 0 0 False 0 0 False \n", + "1 0 0 False 0 0 False \n", + "2 0 0 False 0 0 False \n", + "3 0 0 False 0 0 False \n", + "4 0 0 False 0 0 True \n", "\n", " DEP_relcl DEP_xcomp \n", - "0 0 0 \n", - "1 0 0 \n", - "2 0 0 \n", - "3 0 0 \n", - "4 0 0 \n", + "0 False 0 \n", + "1 False 0 \n", + "2 False 0 \n", + "3 False 0 \n", + "4 False 0 \n", "\n", "[5 rows x 77 columns]" ] }, - "execution_count": 105, + "execution_count": 152, "metadata": {}, "output_type": "execute_result" } @@ -959,6 +992,41 @@ "wordsDf.head()" ] }, + { + "cell_type": "code", + "execution_count": 153, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "Index(['wordCount', 'NER_CARDINAL', 'NER_DATE', 'NER_EVENT', 'NER_FAC',\n", + " 'NER_GPE', 'NER_LANGUAGE', 'NER_LAW', 'NER_LOC', 'NER_MONEY',\n", + " 'NER_NORP', 'NER_ORDINAL', 'NER_ORG', 'NER_PERCENT', 'NER_PERSON',\n", + " 'NER_PRODUCT', 'NER_QUANTITY', 'NER_TIME', 'NER_WORK_OF_ART', 'POS_ADJ',\n", + " 'POS_ADP', 'POS_ADV', 'POS_NOUN', 'POS_NUM', 'POS_PROPN', 'POS_SCONJ',\n", + " 'POS_VERB', 'TAG_CD', 'TAG_IN', 'TAG_JJ', 'TAG_JJR', 'TAG_JJS',\n", + " 'TAG_NN', 'TAG_NNP', 'TAG_NNPS', 'TAG_NNS', 'TAG_RB', 'TAG_RBR',\n", + " 'TAG_RBS', 'TAG_VB', 'TAG_VBD', 'TAG_VBG', 'TAG_VBN', 'TAG_VBP',\n", + " 'TAG_VBZ', 'DEP_ROOT', 'DEP_acl', 'DEP_acomp', 'DEP_advcl',\n", + " 'DEP_advmod', 'DEP_amod', 'DEP_appos', 'DEP_attr', 'DEP_aux',\n", + " 'DEP_auxpass', 'DEP_cc', 'DEP_ccomp', 'DEP_compound', 'DEP_conj',\n", + " 'DEP_csubj', 'DEP_dative', 'DEP_dep', 'DEP_dobj', 'DEP_nmod',\n", + " 'DEP_npadvmod', 'DEP_nsubj', 'DEP_nsubjpass', 'DEP_nummod', 'DEP_oprd',\n", + " 'DEP_parataxis', 'DEP_pcomp', 'DEP_pobj', 'DEP_poss', 'DEP_predet',\n", + " 'DEP_prep', 'DEP_relcl', 'DEP_xcomp'],\n", + " dtype='object')" + ] + }, + "execution_count": 153, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "wordsDf.columns" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -975,7 +1043,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": 154, "metadata": {}, "outputs": [], "source": [ @@ -985,30 +1053,66 @@ }, { "cell_type": "code", - "execution_count": 107, + "execution_count": 155, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "54\n" + ] + }, + { + "data": { + "text/plain": [ + "Index(['wordCount', 'NER_CARDINAL', 'NER_DATE', 'NER_EVENT', 'NER_FAC',\n", + " 'NER_GPE', 'NER_LANGUAGE', 'NER_LAW', 'NER_LOC', 'NER_MONEY',\n", + " 'NER_NORP', 'NER_ORDINAL', 'NER_ORG', 'NER_PERCENT', 'NER_PERSON',\n", + " 'NER_PRODUCT', 'NER_QUANTITY', 'NER_TIME', 'NER_WORK_OF_ART', 'POS_ADJ',\n", + " 'POS_ADP', 'POS_ADV', 'POS_NOUN', 'POS_NUM', 'POS_PROPN', 'POS_SCONJ',\n", + " 'POS_VERB', 'TAG_CD', 'TAG_IN', 'TAG_JJ', 'TAG_JJR', 'TAG_JJS',\n", + " 'TAG_NN', 'TAG_NNP', 'TAG_NNPS', 'TAG_NNS', 'TAG_RB', 'TAG_RBR',\n", + " 'TAG_RBS', 'TAG_VB', 'TAG_VBD', 'TAG_VBG', 'TAG_VBN', 'TAG_VBP',\n", + " 'TAG_VBZ', 'DEP_ROOT', 'DEP_acl', 'DEP_acomp', 'DEP_advcl',\n", + " 'DEP_advmod', 'DEP_amod', 'DEP_appos', 'DEP_attr', 'DEP_aux',\n", + " 'DEP_auxpass', 'DEP_cc', 'DEP_ccomp', 'DEP_compound', 'DEP_conj',\n", + " 'DEP_csubj', 'DEP_dative', 'DEP_dep', 'DEP_dobj', 'DEP_nmod',\n", + " 'DEP_npadvmod', 'DEP_nsubj', 'DEP_nsubjpass', 'DEP_nummod', 'DEP_oprd',\n", + " 'DEP_parataxis', 'DEP_pcomp', 'DEP_pobj', 'DEP_poss', 'DEP_predet',\n", + " 'DEP_prep', 'DEP_relcl', 'DEP_xcomp'],\n", + " dtype='object')" + ] + }, + "execution_count": 155, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "y_pred = predictor.predict(wordsDf)" + "y_pred = predictor.predict(wordsDf)\n", + "\n", + "print(len(wordsDf))\n", + "wordsDf.columns" ] }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 156, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ True, True, True, True, False, True, True, True, True,\n", - " True, False, True, True, True, False, True, True, True,\n", - " True, False, True, True, True, True, True, True, False,\n", + " False, True, True, True, False, True, False, True, True,\n", + " False, True, True, True, False, True, True, True, True,\n", " True, True, True, True, False, True, True, True, True,\n", " True, False, True, True, True, True, True, True, True,\n", " False, True, True, True, True, True, True, False, True])" ] }, - "execution_count": 108, + "execution_count": 156, "metadata": {}, "output_type": "execute_result" } @@ -1026,7 +1130,7 @@ }, { "cell_type": "code", - "execution_count": 109, + "execution_count": 157, "metadata": {}, "outputs": [ { @@ -1038,28 +1142,28 @@ "T Catholic\n", "T character\n", "F Atop\n", - "T Main\n", - "T Building\n", + "T the Main Building's\n", "T gold\n", "T dome\n", "T golden\n", "F statue\n", - "T the Virgin Mary\n", + "T the Virgin Mary.\n", "T Immediately\n", "T the Main Building\n", "F facing\n", "T copper\n", - "T statue\n", + "F statue\n", "T Christ\n", "T arms\n", "F upraised\n", "T legend\n", "T Venite Ad Me Omnes\n", "T the Main Building\n", - "T the Basilica of the Sacred Heart\n", + "F Basilica\n", + "T the Sacred Heart\n", "T Immediately\n", "T basilica\n", - "F Grotto\n", + "T Grotto\n", "T Marian\n", "T place\n", "T prayer\n", @@ -1107,7 +1211,7 @@ }, { "cell_type": "code", - "execution_count": 110, + "execution_count": 158, "metadata": {}, "outputs": [ { @@ -1117,8 +1221,9 @@ "Atop\n", "statue\n", "facing\n", + "statue\n", "upraised\n", - "Grotto\n", + "Basilica\n", "replica\n", "appeared\n", "connects\n", @@ -1172,7 +1277,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.11.7" } }, "nbformat": 4, diff --git a/03. Transform questions/Cloze Questions.ipynb b/03. Transform questions/Cloze Questions.ipynb index 07dc5c2..9a34f88 100644 --- a/03. Transform questions/Cloze Questions.ipynb +++ b/03. Transform questions/Cloze Questions.ipynb @@ -63,7 +63,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.2" + "version": "3.11.7" } }, "nbformat": 4, diff --git a/04. Generating incorrect answers/Incorrect-answers.ipynb b/04. Generating incorrect answers/Incorrect-answers.ipynb index 10f983e..3c2e366 100644 --- a/04. Generating incorrect answers/Incorrect-answers.ipynb +++ b/04. Generating incorrect answers/Incorrect-answers.ipynb @@ -24,7 +24,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -35,7 +35,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 32, "metadata": {}, "outputs": [], "source": [ @@ -45,7 +45,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 33, "metadata": {}, "outputs": [], "source": [ @@ -57,9 +57,18 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\ktmay\\AppData\\Local\\Temp\\ipykernel_28300\\2817985190.py:2: DeprecationWarning: Call to deprecated `glove2word2vec` (KeyedVectors.load_word2vec_format(.., binary=False, no_header=True) loads GLoVE text vectors.).\n", + " glove2word2vec(glove_file, tmp_file)\n" + ] + } + ], "source": [ "from gensim.scripts.glove2word2vec import glove2word2vec\n", "glove2word2vec(glove_file, tmp_file)\n", @@ -75,7 +84,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 35, "metadata": { "scrolled": true }, @@ -84,18 +93,18 @@ "data": { "text/plain": [ "[('probo', 0.5426342487335205),\n", - " ('koalas', 0.4729689359664917),\n", + " ('koalas', 0.4729689657688141),\n", " ('orangutan', 0.4557289779186249),\n", - " ('grizzly', 0.41816502809524536),\n", - " ('marsupial', 0.39361128211021423),\n", - " ('wombat', 0.3832378685474396),\n", - " ('cuddly', 0.3804110288619995),\n", + " ('grizzly', 0.418164998292923),\n", + " ('marsupial', 0.39361125230789185),\n", + " ('wombat', 0.3832378387451172),\n", + " ('cuddly', 0.3804109990596771),\n", " ('kodiak', 0.37843799591064453),\n", - " ('kade', 0.37742379307746887),\n", - " ('kangaroo', 0.3612629175186157)]" + " ('kade', 0.37742382287979126),\n", + " ('kangaroo', 0.3612629473209381)]" ] }, - "execution_count": 14, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -141,25 +150,25 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 36, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('hydrogen', 0.63267982006073),\n", - " ('nitrogen', 0.6251459717750549),\n", + " ('nitrogen', 0.6251460313796997),\n", " ('helium', 0.5435217022895813),\n", " ('nutrients', 0.5369840860366821),\n", - " ('breathing', 0.5023170709609985),\n", - " ('chlorine', 0.4946938157081604),\n", + " ('breathing', 0.5023170113563538),\n", + " ('chlorine', 0.494693785905838),\n", " ('monoxide', 0.4911428987979889),\n", - " ('dioxide', 0.4911195933818817),\n", - " ('ammonia', 0.49079084396362305),\n", + " ('dioxide', 0.4911196231842041),\n", + " ('ammonia', 0.4907909035682678),\n", " ('carbon', 0.4836854636669159)]" ] }, - "execution_count": 15, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -179,25 +188,25 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[('portugal', 0.6408252716064453),\n", - " ('porto', 0.5835250616073608),\n", - " ('benfica', 0.5504175424575806),\n", - " ('copenhagen', 0.5288481712341309),\n", + " ('porto', 0.5835251212120056),\n", + " ('benfica', 0.550417423248291),\n", + " ('copenhagen', 0.5288482308387756),\n", " ('portuguese', 0.5266897678375244),\n", " ('madrid', 0.5219067335128784),\n", - " ('brussels', 0.5173484683036804),\n", - " ('oporto', 0.5147969126701355),\n", + " ('brussels', 0.5173485279083252),\n", + " ('oporto', 0.5147968530654907),\n", " ('prague', 0.5037161707878113),\n", - " ('amsterdam', 0.5018222332000732)]" + " ('amsterdam', 0.501822292804718)]" ] }, - "execution_count": 16, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -215,25 +224,25 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[('faculty', 0.5288037061691284),\n", - " ('college', 0.523701012134552),\n", - " ('professor', 0.5193326473236084),\n", + "[('faculty', 0.5288036465644836),\n", + " ('college', 0.5237010717391968),\n", + " ('professor', 0.5193325877189636),\n", " ('graduate', 0.5135288834571838),\n", - " ('universities', 0.5098860859870911),\n", - " ('copenhagen', 0.5022274255752563),\n", + " ('universities', 0.5098860263824463),\n", + " ('copenhagen', 0.5022274851799011),\n", " ('campus', 0.4942850172519684),\n", - " ('prague', 0.4880773425102234),\n", + " ('prague', 0.48807740211486816),\n", " ('madrid', 0.4852182865142822),\n", - " ('portugal', 0.4788099527359009)]" + " ('portugal', 0.47880998253822327)]" ] }, - "execution_count": 17, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -253,25 +262,25 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[('porto', 0.6089159846305847),\n", - " ('portugal', 0.6070287823677063),\n", - " ('oporto', 0.5988742113113403),\n", + "[('porto', 0.6089159250259399),\n", + " ('portugal', 0.6070288419723511),\n", + " ('oporto', 0.5988742709159851),\n", " ('braga', 0.5796492099761963),\n", " ('benfica', 0.5514551401138306),\n", " ('leiria', 0.5170067548751831),\n", - " ('aveiro', 0.4983532428741455),\n", + " ('aveiro', 0.4983532130718231),\n", " ('viseu', 0.491713285446167),\n", - " ('évora', 0.4914955198764801),\n", - " ('são', 0.4868907928466797)]" + " ('évora', 0.4914955496788025),\n", + " ('são', 0.4868908226490021)]" ] }, - "execution_count": 18, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -296,25 +305,25 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[('writing', 0.6969849467277527),\n", + "[('writing', 0.6969848871231079),\n", " ('read', 0.6291235089302063),\n", " ('wrote', 0.6251993179321289),\n", - " ('written', 0.6065735816955566),\n", + " ('written', 0.6065736413002014),\n", " ('publish', 0.5670630931854248),\n", " (\"'d\", 0.5343195796012878),\n", " ('writes', 0.5341792702674866),\n", " ('tell', 0.5337096452713013),\n", - " ('you', 0.5316603779792786),\n", + " ('you', 0.5316604971885681),\n", " ('books', 0.5285096168518066)]" ] }, - "execution_count": 19, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -346,25 +355,25 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[('1943', 0.9581360220909119),\n", + "[('1943', 0.9581360816955566),\n", " ('1942', 0.9418259859085083),\n", " ('1941', 0.9256348609924316),\n", " ('1940', 0.8975383043289185),\n", - " ('1945', 0.8817087411880493),\n", - " ('1939', 0.8315708637237549),\n", - " ('1946', 0.8234671950340271),\n", - " ('1938', 0.781980574131012),\n", - " ('1937', 0.7764101028442383),\n", - " ('1935', 0.7516504526138306)]" + " ('1945', 0.8817086219787598),\n", + " ('1939', 0.8315709233283997),\n", + " ('1946', 0.8234673142433167),\n", + " ('1938', 0.7819805145263672),\n", + " ('1937', 0.7764102220535278),\n", + " ('1935', 0.7516503930091858)]" ] }, - "execution_count": 20, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -389,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -397,17 +406,17 @@ "text/plain": [ "[('clinton', 0.7889922261238098),\n", " ('obama', 0.7570987939834595),\n", - " ('gore', 0.6871949434280396),\n", - " ('w.', 0.6750580072402954),\n", + " ('gore', 0.6871948838233948),\n", + " ('w.', 0.6750579476356506),\n", " ('cheney', 0.6621242761611938),\n", " ('mccain', 0.6613168716430664),\n", " ('barack', 0.6568867564201355),\n", - " ('administration', 0.6468127965927124),\n", - " ('george', 0.6463572978973389),\n", + " ('administration', 0.6468126773834229),\n", + " ('george', 0.6463572382926941),\n", " ('kerry', 0.6004412174224854)]" ] }, - "execution_count": 21, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -418,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 43, "metadata": {}, "outputs": [ { @@ -427,16 +436,16 @@ "[('postulate', 0.4412064254283905),\n", " ('archimedes', 0.43941453099250793),\n", " ('n.e.', 0.39649108052253723),\n", - " ('pythagoras', 0.39116495847702026),\n", + " ('pythagoras', 0.39116498827934265),\n", " ('aristotle', 0.3895653486251831),\n", - " ('avenue', 0.38695406913757324),\n", + " ('avenue', 0.38695403933525085),\n", " ('proclus', 0.3855825662612915),\n", " ('greektown', 0.3836863040924072),\n", " ('ptolemy', 0.38028305768966675),\n", - " ('berea', 0.37123364210128784)]" + " ('berea', 0.37123367190361023)]" ] }, - "execution_count": 22, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -447,31 +456,31 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[('atanas', 0.6365466713905334),\n", - " ('fery', 0.4410214424133301),\n", - " ('simeonov', 0.4386071562767029),\n", - " ('atanassov', 0.4376071095466614),\n", - " ('mladenov', 0.4347333312034607),\n", - " ('sergeevich', 0.4314761757850647),\n", - " ('neophytos', 0.4266960620880127),\n", - " ('geleta', 0.419179230928421),\n", - " ('vassilev', 0.41890764236450195),\n", - " ('stoev', 0.414333313703537)]" + "[('savir', 0.5212430357933044),\n", + " ('geller', 0.47964778542518616),\n", + " ('lubrani', 0.43920308351516724),\n", + " ('avnery', 0.42534583806991577),\n", + " ('zvi', 0.4224642217159271),\n", + " ('dromi', 0.4120088219642639),\n", + " ('likud', 0.41067302227020264),\n", + " ('saguy', 0.408449649810791),\n", + " ('yosef', 0.39055609703063965),\n", + " ('moshe', 0.38498955965042114)]" ] }, - "execution_count": 23, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "model.most_similar(positive=['atanasov'], topn=10)" + "model.most_similar(positive=['uri'], topn=10)" ] }, { @@ -499,7 +508,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ @@ -521,27 +530,35 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "['hydrogen', 'nitrogen', 'helium', 'nutrients']" + "['red',\n", + " 'blue',\n", + " 'purple',\n", + " 'yellow',\n", + " 'brown',\n", + " 'bright',\n", + " 'dark',\n", + " 'orange',\n", + " 'black']" ] }, - "execution_count": 25, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "generate_distractors('oxygen', 4)" + "generate_distractors('green', 9)" ] }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 47, "metadata": {}, "outputs": [ { @@ -550,7 +567,7 @@ "['romania', 'hungary', 'ukraine', 'slovakia', 'bulgarian', 'macedonia']" ] }, - "execution_count": 26, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -584,7 +601,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.11.8" } }, "nbformat": 4, diff --git a/Demo.ipynb b/Demo.ipynb index 3cfcc33..1968137 100644 --- a/Demo.ipynb +++ b/Demo.ipynb @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 242, "metadata": {}, "outputs": [], "source": [ @@ -39,7 +39,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 243, "metadata": {}, "outputs": [], "source": [ @@ -76,7 +76,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 244, "metadata": {}, "outputs": [], "source": [ @@ -208,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 245, "metadata": {}, "outputs": [], "source": [ @@ -224,7 +224,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 246, "metadata": {}, "outputs": [], "source": [ @@ -242,16 +242,15 @@ " wordsDf[feature] = 0 \n", " \n", " #Drop unused columns\n", - " columnsToDrop = ['text', 'titleId', 'paragrapghId', 'sentenceId', 'shape', 'isAnswer']\n", + " columnsToDrop = ['text', 'titleId', 'paragrapghId', 'sentenceId', 'shape']\n", " wordsDf = wordsDf.drop(columnsToDrop, axis = 1)\n", "\n", - "\n", " return wordsDf" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 247, "metadata": {}, "outputs": [], "source": [ @@ -259,8 +258,31 @@ " \n", " predictorPickleName = 'data/pickles/nb-predictor.pkl'\n", " predictor = loadPickle(predictorPickleName)\n", + "\n", + " new=['wordCount', 'NER_CARDINAL', 'NER_DATE', 'NER_EVENT', 'NER_FAC',\n", + " 'NER_GPE', 'NER_LANGUAGE', 'NER_LAW', 'NER_LOC', 'NER_MONEY',\n", + " 'NER_NORP', 'NER_ORDINAL', 'NER_ORG', 'NER_PERCENT', 'NER_PERSON',\n", + " 'NER_PRODUCT', 'NER_QUANTITY', 'NER_TIME', 'NER_WORK_OF_ART', 'POS_ADJ',\n", + " 'POS_ADP', 'POS_ADV', 'POS_NOUN', 'POS_NUM', 'POS_PROPN', 'POS_SCONJ',\n", + " 'POS_VERB', 'TAG_CD', 'TAG_IN', 'TAG_JJ', 'TAG_JJR', 'TAG_JJS',\n", + " 'TAG_NN', 'TAG_NNP', 'TAG_NNPS', 'TAG_NNS', 'TAG_RB', 'TAG_RBR',\n", + " 'TAG_RBS', 'TAG_VB', 'TAG_VBD', 'TAG_VBG', 'TAG_VBN', 'TAG_VBP',\n", + " 'TAG_VBZ', 'DEP_ROOT', 'DEP_acl', 'DEP_acomp', 'DEP_advcl',\n", + " 'DEP_advmod', 'DEP_amod', 'DEP_appos', 'DEP_attr', 'DEP_aux',\n", + " 'DEP_auxpass', 'DEP_cc', 'DEP_ccomp', 'DEP_compound', 'DEP_conj',\n", + " 'DEP_csubj', 'DEP_dative', 'DEP_dep', 'DEP_dobj', 'DEP_nmod',\n", + " 'DEP_npadvmod', 'DEP_nsubj', 'DEP_nsubjpass', 'DEP_nummod', 'DEP_oprd',\n", + " 'DEP_parataxis', 'DEP_pcomp', 'DEP_pobj', 'DEP_poss', 'DEP_predet',\n", + " 'DEP_prep', 'DEP_relcl', 'DEP_xcomp']\n", + " \n", + " #I had to do this manually since the order of feature names and created wordsDf was not matching\n", + "\n", + " #reordering\n", + " wordsDf = wordsDf[new]\n", + "\n", + " \n", " \n", - " y_pred = predictor.predict_proba(wordsDf)\n", + " y_pred = predictor.predict_proba(wordsDf) \n", "\n", " labeledAnswers = []\n", " for i in range(len(y_pred)):\n", @@ -278,12 +300,12 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 248, "metadata": {}, "outputs": [], "source": [ "def blankAnswer(firstTokenIndex, lastTokenIndex, sentStart, sentEnd, doc):\n", - " leftPartStart = doc[sentStart].idx\n", + " leftPartStart = doc[sentStart].idx #character position\n", " leftPartEnd = doc[firstTokenIndex].idx\n", " rightPartStart = doc[lastTokenIndex].idx + len(doc[lastTokenIndex])\n", " rightPartEnd = doc[sentEnd - 1].idx + len(doc[sentEnd - 1])\n", @@ -295,7 +317,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 249, "metadata": {}, "outputs": [], "source": [ @@ -304,7 +326,7 @@ " currAnswerIndex = 0\n", " qaPair = []\n", "\n", - " #Check wheter each token is the next answer\n", + " #Check whether each token is the next answer\n", " for sent in doc.sents:\n", " for token in sent:\n", " \n", @@ -317,7 +339,7 @@ " answerIsFound = True\n", " \n", " for j in range(len(answerDoc)):\n", - " if token.i + j >= len(doc) or doc[token.i + j].text != answerDoc[j].text:\n", + " if token.i + j >= len(doc) or doc[token.i + j].text != answerDoc[j].text: #check both by index and value\n", " answerIsFound = False\n", " \n", " #If the current token is corresponding with the answer, add it \n", @@ -333,7 +355,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 250, "metadata": {}, "outputs": [], "source": [ @@ -353,9 +375,18 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 251, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "C:\\Users\\ktmay\\AppData\\Local\\Temp\\ipykernel_26468\\438181657.py:12: DeprecationWarning: Call to deprecated `glove2word2vec` (KeyedVectors.load_word2vec_format(.., binary=False, no_header=True) loads GLoVE text vectors.).\n", + " glove2word2vec(glove_file, tmp_file)\n" + ] + } + ], "source": [ "import os\n", "import gensim\n", @@ -376,7 +407,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 252, "metadata": {}, "outputs": [], "source": [ @@ -398,7 +429,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 253, "metadata": {}, "outputs": [], "source": [ @@ -422,7 +453,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 254, "metadata": {}, "outputs": [], "source": [ @@ -461,16 +492,9 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 255, "metadata": {}, "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Glove embeddings not found. Please download and place them in the following path: data/embeddings/glove.6B.300d.txt\n" - ] - }, { "data": { "text/markdown": [ @@ -487,7 +511,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Oxygen is a _____ element with symbol O and atomic number 8.\n" + "Diatomic oxygen gas constitutes _____ of the Earth's atmosphere.\n" ] }, { @@ -506,7 +530,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "chemical\n" + "20.8%\n" ] }, { @@ -544,7 +568,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Oxygen is a chemical element with symbol O and _____ number 8.\n" + "Diatomic oxygen gas constitutes 20.8% of the _____'s atmosphere.\n" ] }, { @@ -563,7 +587,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "atomic\n" + "Earth\n" ] }, { @@ -582,6 +606,10 @@ "name": "stdout", "output_type": "stream", "text": [ + "planet\n", + "mars\n", + "planets\n", + "orbit\n", "\n" ] }, @@ -601,7 +629,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "It is a member of the chalcogen group on the _____ table, a highly reactive nonmetal, and an oxidizing agent that readily forms oxides with most elements as well as with other compounds.\n" + "As compounds including oxides, the element makes up almost half of the _____'s crust.\n" ] }, { @@ -620,7 +648,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "periodic\n" + "Earth\n" ] }, { @@ -639,6 +667,10 @@ "name": "stdout", "output_type": "stream", "text": [ + "planet\n", + "mars\n", + "planets\n", + "orbit\n", "\n" ] }, @@ -658,7 +690,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "It is a member of the chalcogen group on the periodic table, a highly _____ nonmetal, and an oxidizing agent that readily forms oxides with most elements as well as with other compounds.\n" + "As compounds including oxides, the element makes up _____ of the Earth's crust.\n" ] }, { @@ -677,7 +709,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "reactive\n" + "almost half\n" ] }, { @@ -715,7 +747,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "By mass, oxygen is the third-most _____ element in the universe, after hydrogen and helium.\n" + "Oxygen is a chemical element with symbol O and atomic number _____.\n" ] }, { @@ -734,7 +766,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "abundant\n" + "8\n" ] }, { @@ -753,6 +785,10 @@ "name": "stdout", "output_type": "stream", "text": [ + "9\n", + "7\n", + "6\n", + "5\n", "\n" ] }, @@ -772,7 +808,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "At _____ temperature and pressure, two atoms of the element bind to form dioxygen, a colorless and odorless diatomic gas with the formula O2.\n" + "At standard temperature and pressure, _____ atoms of the element bind to form dioxygen, a colorless and odorless diatomic gas with the formula O2.\n" ] }, { @@ -791,7 +827,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "standard\n" + "two\n" ] }, { @@ -810,6 +846,10 @@ "name": "stdout", "output_type": "stream", "text": [ + "three\n", + "four\n", + "five\n", + "six\n", "\n" ] }, @@ -829,7 +869,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "At standard temperature and pressure, two atoms of the element bind to form dioxygen, a colorless and odorless _____ gas with the formula O2.\n" + "At standard temperature and pressure, two atoms of the element bind to form dioxygen, a colorless and odorless diatomic gas with the formula _____.\n" ] }, { @@ -848,7 +888,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "diatomic\n" + "O2\n" ] }, { @@ -867,6 +907,10 @@ "name": "stdout", "output_type": "stream", "text": [ + "nadh\n", + "nadph\n", + "vodafone\n", + "h2o\n", "\n" ] }, @@ -886,7 +930,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "_____ oxygen gas constitutes 20.8% of the Earth's atmosphere.\n" + "By mass, oxygen is the _____-most abundant element in the universe, after hydrogen and helium.\n" ] }, { @@ -905,7 +949,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Diatomic\n" + "third\n" ] }, { @@ -924,6 +968,10 @@ "name": "stdout", "output_type": "stream", "text": [ + "second\n", + "fourth\n", + "fifth\n", + "sixth\n", "\n" ] }, @@ -943,7 +991,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "It is a member of the _____ group on the periodic table, a highly reactive nonmetal, and an oxidizing agent that readily forms oxides with most elements as well as with other compounds.\n" + "Oxygen is a chemical element with symbol _____ and atomic number 8.\n" ] }, { @@ -962,7 +1010,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "chalcogen\n" + "O\n" ] }, { @@ -981,6 +1029,10 @@ "name": "stdout", "output_type": "stream", "text": [ + "y\n", + "n\n", + "te\n", + "[\n", "\n" ] }, @@ -1000,7 +1052,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Oxygen is a chemical element with symbol _____ and atomic number 8.\n" + "By _____, oxygen is the third-most abundant element in the universe, after hydrogen and helium.\n" ] }, { @@ -1019,7 +1071,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "O\n" + "mass\n" ] }, { @@ -1038,16 +1090,27 @@ "name": "stdout", "output_type": "stream", "text": [ + "masses\n", + "destruction\n", + "mass.\n", + "massive\n", "\n" ] } ], "source": [ - "text = \"Oxygen is a chemical element with symbol O and atomic number 8. It is a member of the chalcogen group on the periodic table, a highly reactive nonmetal, and an oxidizing agent that readily forms oxides with most elements as well as with other compounds. By mass, oxygen is the third-most abundant element in the universe, after hydrogen and helium. At standard temperature and pressure, two atoms of the element bind to form dioxygen, a colorless and odorless diatomic gas with the formula O2. Diatomic oxygen gas constitutes 20.8% of the Earth's atmosphere. As compounds including oxides, the element makes up almost half of the Earth's crust.\"\n", + "text =\"Oxygen is a chemical element with symbol O and atomic number 8. It is a member of the chalcogen group on the periodic table, a highly reactive nonmetal, and an oxidizing agent that readily forms oxides with most elements as well as with other compounds. By mass, oxygen is the third-most abundant element in the universe, after hydrogen and helium. At standard temperature and pressure, two atoms of the element bind to form dioxygen, a colorless and odorless diatomic gas with the formula O2. Diatomic oxygen gas constitutes 20.8% of the Earth's atmosphere. As compounds including oxides, the element makes up almost half of the Earth's crust.\"\n", "\n", - "generateQuestions(text, 10)" + "generateQuestions(text, 10)\n" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, @@ -1072,7 +1135,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.6" + "version": "3.11.8" } }, "nbformat": 4, diff --git a/data/pickles/nb-predictor-features.pkl b/data/pickles/nb-predictor-features.pkl index 72af04a2c19709acec7b8878d22644e4dedda216..c9ac6b0ec6c12d84359b0a403c549a01e6c0a07c 100644 GIT binary patch delta 23 bcmeBUZ)WFfV4YgQ%m4?_-y2V42#?%m4=U6%vwq zK_%G>VI-bBnrOUv_J1(p?q6X17xbI2vmo|B-+bTu-g`4;=I5=?3!|?`-+!Dr9&M6w zt4qVs2~D2Nd2uh;&s#oo@&Fyyv3PRb++lvN9q;TojGyq_Y37RjjPPU>C*a$T_5%mn zC-+9~FI6&!JQ-1W#0{R@+;M0WGspC34_rDP7|s7<)Qh`OhcZU@`SGvEgX$r7r<07n z#E;&+h520NsyjyrDgS{F{;4cSynXb7=aPw6KC@Ln_9C845zR1F#VD>3Wt}JEVp&ug z8c!w!)LI&8@Z_4ntBNX7sRn(VTvte`sg$&V?5r!BDbj(B8daTWTT+_nMh(tJ$myvk zit9#6)@z!fqUoey!K$v4v}NeUrV4q`d!wn4###fV2S9DCRUy`lnA+5him9)fiXp<+ z^t!1O%jXCZ$XW|xi7wHb;DJTbtU_*4tQmR@s)*~VPCx+3EzKzKWUQf-OtmP%U=5g9 zDhnUcE0^I{l&CJ7M7W41ArN9*BIwFu$`b}yG771PQAnGuwAm_vJyq3hyA1f*6MHaA3mFG#W77xhW3+x?zz%SnoG$PWTPOv_QkKyZNk zcn^Lki2}GCuxqih;5y)-Wueg&76HP)U@C9<-fqeY<2GQ7VAH76cVuGQft0un+ZPOk z9_AXLrWa5d8ST8G&<$aSc$f)=;U-<|%?}vlKwdx@jp$wnvZF>YjEq*ng)1BYFidd#iWwY5DTpomn${*>x!M%)Z0Ij_<+C_B6kk Jf5PK-{x2~J*DU}5 delta 360 zcmZ1}e@~pXfo1At?uo3SQha&wX{m`NrA4X5@tJw?Q@nk9I8qCWGjsAMzLb$+D^5<# zNi3Q&c}fp!UTJPYC6G=jsVqnZicDr=HR0h%&PgmT2I`%X!8w_QQJtz;A zu=3)}^jw0V0t_Iaz1IOu7nC}Hod(rhP?VWp zgimvHXqJ}cjCb~dtD+)vYnIuAH4Dhb7iZ_BCKlzzm!%dJXXfWk>0vX_GcwULoKl*k F2LL9!ex?8b