Spaces:
Sleeping
Sleeping
File size: 66,547 Bytes
4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 502f037 4db92d6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 |
{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\jaksh\\Desktop\\Programs\\Projects\\himym-analysis\\venv\\Lib\\site-packages\\tqdm\\auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n",
" from .autonotebook import tqdm as notebook_tqdm\n"
]
}
],
"source": [
"import nltk\n",
"import torch\n",
"import pandas as pd\n",
"import numpy as np\n",
"from glob import glob\n",
"from nltk import sent_tokenize\n",
"from transformers import pipeline"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[nltk_data] Downloading package punkt to\n",
"[nltk_data] C:\\Users\\jaksh\\AppData\\Roaming\\nltk_data...\n",
"[nltk_data] Package punkt is already up-to-date!\n",
"[nltk_data] Downloading package stopwords to\n",
"[nltk_data] C:\\Users\\jaksh\\AppData\\Roaming\\nltk_data...\n",
"[nltk_data] Package stopwords is already up-to-date!\n"
]
},
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"nltk.download('punkt')\n",
"nltk.download('stopwords')"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"device = 0 if torch.cuda.is_available() else \"cpu\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Load Model__"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\jaksh\\Desktop\\Programs\\Projects\\himym-analysis\\venv\\Lib\\site-packages\\transformers\\tokenization_utils_base.py:1601: FutureWarning: `clean_up_tokenization_spaces` was not set. It will be set to `True` by default. This behavior will be depracted in transformers v4.45, and will be then set to `False` by default. For more details check this issue: https://github.com/huggingface/transformers/issues/31884\n",
" warnings.warn(\n"
]
}
],
"source": [
"model = \"facebook/bart-large-mnli\"\n",
"clf = pipeline(\"zero-shot-classification\", \n",
" model=model, \n",
" device=device)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"test = \"I like your phone, does it even work?\"\n",
"classes = [\"Love\", \"Appreciation\", \"Sarcasm\", \"Anger\", \"Hunger\", \"Dialogue\"]"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'sequence': 'I like your phone, does it even work?',\n",
" 'labels': ['Sarcasm', 'Dialogue', 'Appreciation', 'Anger', 'Love', 'Hunger'],\n",
" 'scores': [0.9283308982849121,\n",
" 0.7683961391448975,\n",
" 0.6455283164978027,\n",
" 0.0011342098005115986,\n",
" 0.0003232487943023443,\n",
" 0.0002589166397228837]}"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clf(test, classes, multi_label=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Load Dataset__"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['../data/subs\\\\How I Met Your Mother - 01x01 - Pilot.1080p x265 Joy.English.C.updated.Addic7ed.com.srt',\n",
" '../data/subs\\\\How I Met Your Mother - 01x02 - Purple giraffe.720.HDTV.CORTEXiPHAN.English.C.updated.Addic7ed.com.srt',\n",
" '../data/subs\\\\How I Met Your Mother - 01x03 - The sweet taste of liberty.720.HDTV.CORTEXiPHAN.English.C.updated.Addic7ed.com.srt',\n",
" '../data/subs\\\\How I Met Your Mother - 01x04 - Return of the shirt.720.HDTV.CORTEXiPHAN.English.C.updated.Addic7ed.com.srt',\n",
" '../data/subs\\\\How I Met Your Mother - 01x05 - Okay awesome.720.HDTV.CORTEXiPHAN.English.C.updated.Addic7ed.com.srt']"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"subs = glob(\"../data/subs/*.srt\")\n",
"subs[:5]"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n",
"00:00:04,388 --> 00:00:07,588\n",
"Kids, I'm gonna tell\n",
"you an incredible story ;\n",
"\n",
"2\n",
"00:00:07,588 --> 00:00:09,828\n",
"the story of how I met your mother.\n",
"\n",
"\n"
]
}
],
"source": [
"# Understanding Data.\n",
"with open(subs[0], \"r\", encoding=\"utf-8\") as f:\n",
" con = f.read()\n",
" print(con[:150])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Ignored 929 lines out of 2006. Total lines 1077 now.\n"
]
}
],
"source": [
"with open(subs[0], \"r\", encoding=\"utf-8\") as f:\n",
" lines = f.readlines()\n",
" cnt = 0\n",
" con = []\n",
" for line in lines:\n",
" line = line.strip()\n",
" if line.isnumeric() or \"-->\" in line:\n",
" cnt += 1\n",
" else:\n",
" con.append(line)\n",
"\n",
"print(f\"Ignored {cnt} lines out of {len(lines)}. Total lines {len(con)} now.\")"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"../data/subs\\How I Met Your Mother - 01x01 - Pilot.1080p x265 Joy.English.C.updated.Addic7ed.com.srt\n"
]
},
{
"data": {
"text/plain": [
"'1'"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Episode\n",
"print(subs[0])\n",
"subs[0].split(\"-\")[1].strip()[-1]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"def load_subs():\n",
" subs = glob(\"../data/subs/*.srt\")\n",
" episodes = []\n",
" scripts = []\n",
"\n",
" for sub in subs:\n",
" with open(sub, \"r\", encoding=\"utf-8\") as f:\n",
" lines = f.readlines()\n",
" cnt = 0\n",
" con = []\n",
" for line in lines:\n",
" line = line.strip()\n",
" if line.isnumeric() or \"-->\" in line:\n",
" cnt += 1\n",
" else:\n",
" con.append(line)\n",
" \n",
" script = \" \".join(con)\n",
" epno = int(sub.split(\"-\")[1].strip()[-1])\n",
" episodes.append(epno)\n",
" scripts.append(script)\n",
"\n",
" df = pd.DataFrame({\"episode\": episodes, \"script\": scripts})\n",
" return df"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"df = load_subs()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>episode</th>\n",
" <th>script</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>1 Kids, I'm gonna tell you an incredible stor...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>Sync by vNaru - Okay, where was I? - You were...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>S Sy Syn Sync Sync b Sync by Sync by v ...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>Sync by vNaru Kids, when you're single, all y...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>Sync by vNaru So, kids, would you like to hea...</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" episode script\n",
"0 1 1 Kids, I'm gonna tell you an incredible stor...\n",
"1 2 Sync by vNaru - Okay, where was I? - You were...\n",
"2 3 S Sy Syn Sync Sync b Sync by Sync by v ...\n",
"3 4 Sync by vNaru Kids, when you're single, all y...\n",
"4 5 Sync by vNaru So, kids, would you like to hea..."
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Model Testing__"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'\\ufeff1 Kids, I\\'m gonna tell you an incredible story ; the story of how I met your mother. Are we being punished for something? No. Yeah, is this gonna take a while? Yes. 25 years ago, before I was Dad, I had this whole other life. It was way back in 2005. I was 27, just starting to make it as an architect and living in New York with Marshall, my best friend from college. My life was good. And then Uncle Marshall went and screwed the whole thing up. Will you marry me? Yes. Perfect! And then you\\'re engaged. You pop the champagne. You drink a toast. You have sex on the kitchen floor. Don\\'t have sex on our kitchen floor. Got it. Thanks for helping me plan this out, Ted. Dude, are you kidding ? It\\'s you and Lilly. I\\'ve been there for all the big moments of you and Lilly: night you met, your first date, other first things. Yeah, sorry. We thought you were asleep. It\\'s physics, Marshall. If the bottom bunk moves, the top bunk moves, too. My God. You\\'re getting engaged tonight. Yeah. What are you doin\\' tonight? What was I doing? Here Uncle Marshall was taking the biggest step of his life. And me? I\\'m calling up your Uncle Barney. Hey, so you know how I\\'ve always had a thing for half-Asian girls? Well, now I\\'ve got a new favorite... Lebanese girls. Lebanese girls are the new half-Asians. Hey, you want to do somethin\\' tonight? Okay, meet me at the bar in 15 minutes. And suit up! Where\\'s your suit? Just once, when I say suit up, I wish you\\'d put on a suit. I did that one time. It was a blazer! You know, ever since college it\\'s been, Marshall and Lilly and me. Now, it\\'s gonna be Marshall and Lilly... and me. They\\'ll get married, start a family. Before long, I\\'m that weird, middle-aged bachelor their kids call Uncle Ted. I see what this is about. Have you forgotten what I said to you the night we met? Ted, I\\'m gonna teach you how to live. Barney. We met at the urinal. Oh, right. Right. Lesson one: lose the goatee. It doesn\\'t go with your suit. - I\\'m not wearing a suit. - Lesson two: get a suit. Suits are cool. Exhibit \"A.\" Lesson three: don\\'t even think about getting married till you\\'re 30. 30. Right. You\\'re right. I guess it\\'s just, your best friend gets engaged, you start thinking about that stuff. I thought I was your best friend. Ted, say I\\'m your best friend. You\\'re my best friend, Barney. Good. Then, as your best friend, I suggest we play a little game I like to call - \"Have you met Ted?\" - Wait. No, no, no. We\\'re not playing \"Have you met Ted?\" Hi, have you met Ted? Hi, I\\'m Ted. Yasmine. That\\'s a very pretty name. Thanks. It\\'s Lebanese. I\\'m exhausted. It was finger-painting day at school, and a five year-old boy got to second base with me. Wow! You\\'re cooking? Yes, I am. Aw... Are you sure that\\'s a good idea? After last time, you looked really creepy without eyebrows. I can handle this. I think you\\'ll find I\\'m full of surprises tonight. So, there\\'s more surprises? Like what? Marshall was in his second year of law school, so he was pretty good at thinking on his feet. Boogedyboo! And that\\'s all of \\'em. I\\'m gonna go... cook. I\\'m so happy for Marshall, I really am. I just couldn\\'t imagine settling down right now. So, do you think you\\'ll ever get married? Well, maybe eventually... some fall day, possibly in Central Park. Simple ceremony. We\\'ll write our own vows. Band, no DJ. People will dance! I\\'m not gonna worry about it! Damn it, why did Marshall have to get engaged? Yeah, nothing hotter than a guy planning out his own imaginary wedding, huh? - Actually, I think it\\'s cute. - Well, you\\'re clearly drunk. One more for the lady! Oh, hey, look what I got. Oh, honey! Champagne. Yeah. No. You are too old to be scared to open a bottle of champagne. - I\\'m not scared. - Then open it. Fine. Please open it? You are unbelievable, Marshall. There are two big questions a man has to ask in life. One, you plan out for months. The other just slips out when you\\'re half drunk at some bar. Will you marry me? You wanna go out sometime? Of course, you idiot! I\\'m sorry, Carl\\'s my boyfriend. \\'Sup, Carl? I promised Ted we wouldn\\'t do that. Did you know there\\'s a Pop Tart under your fridge? No, but dibs. Where\\'s that champagne? I wanna drink a toast with my fiancée. I don\\'t know why I was so scared of this. It\\'s pretty easy, right? Why am I freaking out all of a sudden? This is crazy. I\\'m not ready to settle down. How does Carl land a Lebanese girl? The plan has always been don\\'t even think about it until you\\'re 30. Exactly. The guy doesn\\'t even own a suit. Plus, Marshall\\'s found the love of his life. Even if I was ready, which I\\'m not... but if I was, it\\'s, like, \"Okay, I\\'m ready. Where is she?\" And there she was. It was like something from an old movie, where the sailor sees the girl across the crowded dance floor, turns to his buddy and says, \"See that girl?\" I\\'m gonna marry her someday.\" Hey, Barney, see that girl? Oh, yeah. You just know she likes it dirty. Go say hi. I can\\'t just go say hi. I need a plan. I\\'m gonna wait until she goes to the bathroom, then I\\'ll strategically place myself by the jukebox... Hi, have you met Ted? Let me guess... Ted. Sorry, Lilly. I\\'m so sorry. - Take us to the hospital. - Whoa, whoa, whoa. Did you hit her? Hit me? Please! This guy can barely even spank me in bed for fun. He\\'s all like, \"Oh, honey. Did that hurt?\" And, I\\'m like, \"Come on! Let me have it, you pansy!\" - Wow, a complete stranger. - No, no, no, no! It\\'s okay. Go on. So, these, uh, spankings... you in pajamas or Au Naturel? So, what do you do? I\\'m a reporter for Metro News One. Well, kind of a reporter. I do those dumb little fluff pieces at the end of the news. You know, like, um... monkey who can play the ukulele. I\\'m hoping to get some bigger stories soon. Bigger, like, uh... gorilla with an upright bass? Sorry. You\\'re really pretty. Oh, your friends don\\'t seem too happy. Yeah, see, the one in the middle just got dumped by her boyfriend. So, tonight, every guy is \"the enemy.\" You know if it\\'ll make your friend feel better, you could throw a drink in my face. I don\\'t mind. She would love that! And it does look fun in the movies. Hey, you wanna have dinner with me Saturday night? Oh, I can\\'t. I\\'m going to Orlando for a week on Friday. Some guy\\'s attempting to make the world\\'s biggest pancake. Guess who\\'s covering it? That\\'s gonna take a week? Yeah, he\\'s gonna eat it, too. It\\'s another record. Hey! What\\'s takin\\' so long? Uh, I know this is a long shot, but how \\'bout tomorrow night? Yeah. What the hell? Jerk! That was fun. De... wait for it... nied! Denied! We\\'re goin\\' out tomorrow night. I thought we were playin\\' laser tag tomorrow night. Yeah, I was never gonna go play laser tag. The next night, I took her out to this little bistro in Brooklyn. That is one badass blue French horn. Yeah. Sort of looks like a Smurf penis. Son, a piece of advice: when you go on a first date, you really don\\'t wanna say \"Smurf penis\". Girls don\\'t ordinarily like that. But this was no ordinary girl. Lilly? How long have you been sitting there? Stupid eye patch. Mom, Dad, I have found the future Mrs. Ted Mosby. Marshall, how have I always described my perfect woman? Now, let\\'s see... she likes dogs? I\\'ve got five dogs. She drinks scotch? I love a scotch that\\'s old enough to order its own scotch. Can quote obscure lines from Ghostbusters? Ray! When someone asks you if you\\'re a god, you say \"Yes!\" And I\\'m saving the best for last. Do you want these? I hate olives. She hates olives! Awesome! The olive theory. The olive theory is based on my friends Marshall and Lilly. He hates olives, she loves them. In a weird way, that\\'s what makes them such a great couple. Perfect balance. You know, I\\'ve had a jar of olives just sitting in my fridge forever. I could take \\'em off your hands. They\\'re all yours. Oh, it is on! It is on till the break of dawn. But wait. It\\'s only the break of 10:30. What happened? I gotta get one of those blue French horns for over my fireplace. It\\'s gotta be blue. It\\'s gotta be French. - No green clarinet? - Nope. Come on. No purple tuba? It\\'s a Smurf penis or no dice. There you are! We got a jumper. Some crazy guy on the Manhattan Bridge. Come on. You\\'re coverin\\' it! Um... all right. I\\'ll be right there. I\\'m sorry. I had a really great time tonight. Yeah. So?! Did you kiss her? No. The moment wasn\\'t right. Look, this woman could actually be my future wife. I want our first kiss to be amazing. Aw, Ted, that is so sweet. So you chickened out like a little bitch. What? I did not chicken out. You know what? I don\\'t need to take first kiss advice from some pirate who hasn\\'t been single since the first week of college. Anyone who\\'s single would tell you the same thing, even the dumbest single person alive. And if you don\\'t believe me, call him. Hey, loser. How\\'s not playing laser tag? Because playing laser tag is awesome! - Oh, I killed you, Conner! - Don\\'t make me get your mom! Hey, listen. I need your opinion on something. Okay, meet me at the bar in 15 minutes. And suit up! So, these guys think I chickened out. What do you think? I can\\'t believe you\\'re still not wearing a suit. She didn\\'t even give me the signal. What, is she gonna, she gonna bat her eyes at you in Morse code? \"Ted... kiss me.\" No ! You just kiss her! Not if you don\\'t get the signal. Did Marshall give me the signal? No! I didn\\'t. I swear. But, see, at least tonight, I get to sleep knowing Marshall and me, never gonna happen. You should have kissed her. Oh, I should have kissed her. Well, maybe in a week when she gets back from Orlando. A week? That\\'s like a year in hot girl time. She\\'ll forget all about you. Mark my words... you will never see that one again. There she is. Ooh! She\\'s cute. Hey, Carl, turn it up. ...persuaded him to reconsider. At which point, the man came down off the ledge, giving this bizarre story a happy ending. - Reporting from Metro One News... - Guy didn\\'t jump. I\\'m gonna go kiss her. Right now. Look, dude. It\\'s midnight. As your future lawyer, I\\'m gonna advise you that\\'s freakin\\' crazy. I never do anything crazy. I\\'m always waiting for the moment, planning the moment. Well, she\\'s leaving tomorrow. This may be the only moment I\\'m gonna get. I gotta do what that guy couldn\\'t. I gotta take the leap! Okay, not a perfect metaphor, \\'cause for me it\\'s fall in love and get married, and for him it\\'s... death. Actually, that is a perfect metaphor. By the way, did I congratulate you two? I\\'m doing this. Let\\'s go. - Word up. - We\\'re coming with you. Barney? All right, but under one condition. Look at you, you beautiful bastard. You suited up! This is totally going in my blog! Stop the car. Uh, pull over right here. I gotta do something. Excuse me. Pardon me. Just a sec\\'. Enjoy your coffee. Go! Go! Go! Everybody brings flowers. Okay. Moment of truth. Wish me luck. Ted\\'s gonna get it on with a TV reporter. \"This just in.\" Okay. Kiss her, Ted! Kiss her good! Kiss the crap outta that girl! Marshall, remember this night. When you\\'re the best man at our wedding and you give a speech, you\\'re gonna tell this story. Why does he get to be the best man? I\\'m your best friend! As I walked up to that door, a million thoughts raced through my mind. Unfortunately, one particular thought did not. I\\'ve got five dogs. Not good. Not good. - No! - Get back in there! You\\'re wearing a suit! Ted? Hi. I was just, uh... Come on up. He\\'s in. So... Ranjit, you must have done it with a Lebanese girl? Okay, that\\'s my Barney limit. I\\'m gonna see if that bodega has a bathroom. Actually, I\\'m from Bangladesh. The women hot there? Here\\'s a picture of my wife. A simple \"no\" would have sufficed. She\\'s lovely. So, Ted, what brings you back to Brooklyn at 1:00 in the morning in a suit? I was just hoping to... get those olives... that you said I could have. Would you like those olives with some gin and vermouth? Are you trying to get me drunk? For starters. So, Marshall, this olive theory, based on you and Lilly? You hate olives. Lilly loves \\'em. You can\\'t stand \\'em. Yeah. Hate olives. Two weeks ago, Spanish bar on 79th street, dish of olives, you had some... what up? You have to swear that this does not leave this cab. - I swear. - I swear. On our first date, I ordered a Greek salad. Lilly asked if she could have my olives. - I said, \"Sure. I hate olives.\" - But, you like olives. Well, I was 18, okay? I was a virgin. Been waitin\\' my whole life for a pretty girl to want my olives. Marshall, I\\'m gonna give you an early wedding present. Don\\'t get married. I think I like your olive theory. I think I like your new French horn. I think I like your nose. I think I\\'m in love with you. - What?! - What?! - What?! Come on, man, you said your stomach\\'s been hurting, right? You know what that is. Hunger. You\\'re hungry for experience. Hungry for something new. Hungry for olives. But you\\'re too scared to do anything about it. Yeah, I\\'m scared, okay? But, when I think of spending the rest of my life with Lilly... committing, forever, no other women... doesn\\'t scare me at all. I\\'m marrying that girl. Lilly. Lilly, I like olives. We\\'ll make it work. So, Orlando. You gonna hit DisneyWorld? You love me?! I-I-I can\\'t believe I said that. Why did I say that? Who says that? I should just go. Hold on. Wait a minute. Promised you these. Olives. Thanks. I love you. What is wrong with me? Why are we still sitting here? Let\\'s go. We can still make last call. What do you say, Lil? Yo-ho-ho and a bottle of rum? \\'Cause you\\'re a pirate. Okay, eye patch, gone. And we can\\'t just abandon Ted. If it doesn\\'t go well up there, he\\'s gonna need some support. It\\'s been, like, 20 minutes. You think they\\'re doin\\' it? You think they\\'re doin\\' it in front of the dogs? Doggy style. Hey, there was a girl in college, she had this golden retriever... Okay, we can go to the bar. Just stop talking. Hit it, Ranjit. So, when you tell this story to your friends, could you avoid the word \"psycho?\" I\\'d prefer. \"eccentric.\" Good night... psycho. Great. Um, how do I get to the F train? Oh, um, two blocks that way and take a right. You know what? I\\'m done being single. I\\'m not good at it. Look, obviously, you can\\'t tell a woman you just met you love her. But... it sucks that you can\\'t. I\\'ll tell you something, though. If a woman... not you, just some hypothetical woman... were to bear with me through all this, I think I\\'d make a damn good husband. Because, that\\'s the stuff I\\'d be good at, stuff like making her laugh and being a good father. And walking her five hypothetical dogs. Being a good kisser. Everyone thinks they\\'re a good kisser. Oh, I\\'ve got references. Good night, Ted. And I\\'m a good handshaker. That\\'s a pretty great handshake. And that was it. I\\'ll probably never see her again. What? That was the signal. That long, lingering handshake? You should have kissed her. There\\'s no such thing as \"the signal.\" But, yeah, that was the signal. Signal. Ah, Carl, thank you. Something I gotta do. By the way, you should have kissed her. Carl! You guys weren\\'t there. I am so turned on right now. Guys, trust me. I\\'ve seen the signal. That was not the signal. Yeah, Ted, we\\'re not on you anymore. - To my fiancée. - To the future. To one hell of a night! That was not the signal. I asked her about it years later. And, yeah, that was the signal. I could have kissed her. But that\\'s the funny thing about destiny. It happens whether you plan it or not. I mean, I never thought I\\'d see that girl again, but it turns out I was just too close to the puzzle to see the picture that was forming. Because, that, kids, is the true story of how I met your Aunt Robin. Aunt Robin? I thought this was how you met mom! Will you relax? I\\'m getting to it. Like I said, it\\'s a long story. <font color=\"#ffff00\">~ Resync by AdyMcAwsum ~</font> <font color=\"#ff0080\">= Addic7ed =</font> '"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"script = df.iloc[0][\"script\"]\n",
"script"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[\"\\ufeff1 Kids, I'm gonna tell you an incredible story ; the story of how I met your mother.\",\n",
" 'Are we being punished for something?',\n",
" 'No.']"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"script_sentences = sent_tokenize(script)\n",
"script_sentences[:3]"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"# Batch sentences\n",
"sentence_batch_size = 20\n",
"script_batches = []\n",
"\n",
"for index in range(0, len(script_sentences), sentence_batch_size):\n",
" script_batches.append(\"\".join(script_sentences[index:index + sentence_batch_size]))"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"26"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(script_batches)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'sequence': \"\\ufeff1 Kids, I'm gonna tell you an incredible story ; the story of how I met your mother.Are we being punished for something?No.Yeah, is this gonna take a while?Yes.25 years ago, before I was Dad, I had this whole other life.It was way back in 2005.I was 27, just starting to make it as an architect and living in New York with Marshall, my best friend from college.My life was good.And then Uncle Marshall went and screwed the whole thing up.Will you marry me?Yes.Perfect!And then you're engaged.You pop the champagne.You drink a toast.You have sex on the kitchen floor.Don't have sex on our kitchen floor.Got it.Thanks for helping me plan this out, Ted.\",\n",
" 'labels': ['Dialogue', 'Sarcasm', 'Appreciation', 'Anger', 'Love', 'Hunger'],\n",
" 'scores': [0.24632984399795532,\n",
" 0.22967974841594696,\n",
" 0.19244104623794556,\n",
" 0.17093931138515472,\n",
" 0.021552560850977898,\n",
" 0.011540633626282215]},\n",
" {'sequence': \"Dude, are you kidding ?It's you and Lilly.I've been there for all the big moments of you and Lilly: night you met, your first date, other first things.Yeah, sorry.We thought you were asleep.It's physics, Marshall.If the bottom bunk moves, the top bunk moves, too.My God.You're getting engaged tonight.Yeah.What are you doin' tonight?What was I doing?Here Uncle Marshall was taking the biggest step of his life.And me?I'm calling up your Uncle Barney.Hey, so you know how I've always had a thing for half-Asian girls?Well, now I've got a new favorite... Lebanese girls.Lebanese girls are the new half-Asians.Hey, you want to do somethin' tonight?Okay, meet me at the bar in 15 minutes.\",\n",
" 'labels': ['Dialogue', 'Appreciation', 'Sarcasm', 'Love', 'Anger', 'Hunger'],\n",
" 'scores': [0.63577800989151,\n",
" 0.496595561504364,\n",
" 0.4210963547229767,\n",
" 0.2901376187801361,\n",
" 0.19846327602863312,\n",
" 0.1332704722881317]}]"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"theme_output = clf(\n",
" script_batches[:2],\n",
" classes,\n",
" multi_label=True\n",
")\n",
"\n",
"theme_output"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"themes = {}\n",
"for output in theme_output:\n",
" for label, score in zip(output[\"labels\"], output[\"scores\"]):\n",
" if label not in themes:\n",
" themes[label] = []\n",
" themes[label].append(score)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'Dialogue': [0.24632984399795532, 0.63577800989151],\n",
" 'Sarcasm': [0.22967974841594696, 0.4210963547229767],\n",
" 'Appreciation': [0.19244104623794556, 0.496595561504364],\n",
" 'Anger': [0.17093931138515472, 0.19846327602863312],\n",
" 'Love': [0.021552560850977898, 0.2901376187801361],\n",
" 'Hunger': [0.011540633626282215, 0.1332704722881317]}"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"themes"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"def get_theme_inference(script):\n",
"\n",
" classes = [\"Sarcasm\", \"Happy\", \"Friendship\", \"Vulgar\", \"Anger\", \"Sad\", \"Love\", \"Narration\"]\n",
" script_sentences = sent_tokenize(script)\n",
" sentence_batch_size = 20\n",
" script_batches = []\n",
" for index in range(0, len(script_sentences), sentence_batch_size):\n",
" script_batches.append(\"\".join(script_sentences[index:index + sentence_batch_size]))\n",
"\n",
" theme_output = clf(\n",
" script_batches[:2],\n",
" classes,\n",
" multi_label=True\n",
" )\n",
"\n",
" themes = {}\n",
" for output in theme_output:\n",
" for label, score in zip(output[\"labels\"], output[\"scores\"]):\n",
" if label not in themes:\n",
" themes[label] = []\n",
" themes[label].append(score)\n",
" \n",
" themes = {key:np.mean(np.array(value)) for key, value in themes.items()}\n",
" return themes"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"opdf = df.head(2)\n",
"temp = opdf[\"script\"].apply(get_theme_inference)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Narration</th>\n",
" <th>Dialogue</th>\n",
" <th>Sarcasm</th>\n",
" <th>Vulgar</th>\n",
" <th>Anger</th>\n",
" <th>Sad</th>\n",
" <th>Love</th>\n",
" <th>Friendship</th>\n",
" <th>Happy</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.478483</td>\n",
" <td>0.441054</td>\n",
" <td>0.325388</td>\n",
" <td>0.163250</td>\n",
" <td>0.184701</td>\n",
" <td>0.098930</td>\n",
" <td>0.155845</td>\n",
" <td>0.167654</td>\n",
" <td>0.049714</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.822459</td>\n",
" <td>0.632703</td>\n",
" <td>0.475984</td>\n",
" <td>0.281316</td>\n",
" <td>0.155183</td>\n",
" <td>0.291596</td>\n",
" <td>0.635413</td>\n",
" <td>0.113331</td>\n",
" <td>0.032668</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Narration Dialogue Sarcasm Vulgar Anger Sad Love \\\n",
"0 0.478483 0.441054 0.325388 0.163250 0.184701 0.098930 0.155845 \n",
"1 0.822459 0.632703 0.475984 0.281316 0.155183 0.291596 0.635413 \n",
"\n",
" Friendship Happy \n",
"0 0.167654 0.049714 \n",
"1 0.113331 0.032668 "
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"themes = pd.DataFrame(temp.tolist())\n",
"themes"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>episode</th>\n",
" <th>script</th>\n",
" <th>Narration</th>\n",
" <th>Dialogue</th>\n",
" <th>Sarcasm</th>\n",
" <th>Vulgar</th>\n",
" <th>Anger</th>\n",
" <th>Sad</th>\n",
" <th>Love</th>\n",
" <th>Friendship</th>\n",
" <th>Happy</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>1 Kids, I'm gonna tell you an incredible stor...</td>\n",
" <td>0.478483</td>\n",
" <td>0.441054</td>\n",
" <td>0.325388</td>\n",
" <td>0.163250</td>\n",
" <td>0.184701</td>\n",
" <td>0.098930</td>\n",
" <td>0.155845</td>\n",
" <td>0.167654</td>\n",
" <td>0.049714</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>Sync by vNaru - Okay, where was I? - You were...</td>\n",
" <td>0.822459</td>\n",
" <td>0.632703</td>\n",
" <td>0.475984</td>\n",
" <td>0.281316</td>\n",
" <td>0.155183</td>\n",
" <td>0.291596</td>\n",
" <td>0.635413</td>\n",
" <td>0.113331</td>\n",
" <td>0.032668</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" episode script Narration \\\n",
"0 1 1 Kids, I'm gonna tell you an incredible stor... 0.478483 \n",
"1 2 Sync by vNaru - Okay, where was I? - You were... 0.822459 \n",
"\n",
" Dialogue Sarcasm Vulgar Anger Sad Love Friendship \\\n",
"0 0.441054 0.325388 0.163250 0.184701 0.098930 0.155845 0.167654 \n",
"1 0.632703 0.475984 0.281316 0.155183 0.291596 0.635413 0.113331 \n",
"\n",
" Happy \n",
"0 0.049714 \n",
"1 0.032668 "
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"opdf.loc[:, themes.columns] = themes\n",
"opdf"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"__Visualize__"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>theme</th>\n",
" <th>score</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>Narration</td>\n",
" <td>1.300941</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Dialogue</td>\n",
" <td>1.073757</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>Sarcasm</td>\n",
" <td>0.801372</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>Vulgar</td>\n",
" <td>0.444566</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>Anger</td>\n",
" <td>0.339884</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>Sad</td>\n",
" <td>0.390525</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>Love</td>\n",
" <td>0.791258</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>Friendship</td>\n",
" <td>0.280985</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>Happy</td>\n",
" <td>0.082382</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" theme score\n",
"0 Narration 1.300941\n",
"1 Dialogue 1.073757\n",
"2 Sarcasm 0.801372\n",
"3 Vulgar 0.444566\n",
"4 Anger 0.339884\n",
"5 Sad 0.390525\n",
"6 Love 0.791258\n",
"7 Friendship 0.280985\n",
"8 Happy 0.082382"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"op = opdf.drop([\"episode\", 'script'], axis=1).sum().reset_index()\n",
"op.columns = [\"theme\", \"score\"]\n",
"op"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import seaborn as sns"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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FujQoUN65ZVXlJqaart6Kjg4WGFhYbbtX3nlFSUnJ2vQoEGKjY3VmjVrNHbsWPXv39+sXQAAAEWMqZeC9+jRQ7/++quGDx+uxMRENWnSRJGRkbZJxnFxcXJ2/l//ql69utauXavBgwerUaNG8vb21qBBg/T222+btQsAAKCIMbXcSNKAAQM0YMCAHF/btGlTtrHWrVtr+/btBZwKAAA4Koe6WgoAAOCfUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClUG4AAIClFDM7AIBbazZkodkRciXm38FmRwAAjtwAAABrodwAAABLodwAAABLodwAAABLodwAAABLodwAAABLodwAAABLKRLlZtq0afLx8ZGbm5sCAgK0Y8eO23rfkiVL5OTkpG7duhVsQAAA4DBMLzdLly5VaGiowsPDtWvXLjVu3FgdO3bUuXPn/vZ9p06d0ptvvqn77ruvkJICAABHYHq5iYiIUL9+/RQSEqL69etrxowZKlWqlObOnXvL92RkZKhXr14aMWKEfH19CzEtAAAo6kwtN9euXVNMTIwCAwNtY87OzgoMDFR0dPQt3zdy5Eh5enqqb9++//g10tLSlJKSkuUBAACsy9Ry89tvvykjI0NeXl5Zxr28vJSYmJjje3788UfNmTNHs2bNuq2vMW7cOJUtW9b2qF69er5zAwCAosv001K5cfHiRfXu3VuzZs1SxYoVb+s9YWFhunDhgu0RHx9fwCkBAICZTL0reMWKFeXi4qKkpKQs40lJSapcuXK27Y8fP65Tp04pKCjINpaZmSlJKlasmI4cOaK77747y3tcXV3l6upaAOkBAEBRZGq5KVGihJo1a6aoqCjb5dyZmZmKiorSgAEDsm1ft25d7d+/P8vYsGHDdPHiRU2ePJlTTgCKhGZDFpodIVdi/h1sdgTArkwtN5IUGhqqPn36qHnz5mrZsqUmTZqk1NRUhYSESJKCg4Pl7e2tcePGyc3NTQ0bNszy/nLlyklStnEAAHBnMr3c9OjRQ7/++quGDx+uxMRENWnSRJGRkbZJxnFxcXJ2dqipQQAAwESmlxtJGjBgQI6noSRp06ZNf/ve+fPn2z8QAABwWBwSAQAAlkK5AQAAlkK5AQAAlkK5AQAAlkK5AQAAlkK5AQAAlkK5AQAAlkK5AQAAlkK5AQAAllIkVigGcOfh5pIACgpHbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKVQbgAAgKUUMzsAAABFRbMhC82OkCsx/w42O0KRxJEbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKZQbAABgKUWi3EybNk0+Pj5yc3NTQECAduzYccttZ82apfvuu0/ly5dX+fLlFRgY+LfbAwCAO4vp5Wbp0qUKDQ1VeHi4du3apcaNG6tjx446d+5cjttv2rRJzzzzjDZu3Kjo6GhVr15dHTp0UEJCQiEnBwAARZHp5SYiIkL9+vVTSEiI6tevrxkzZqhUqVKaO3dujtsvWrRIr776qpo0aaK6detq9uzZyszMVFRUVCEnBwAARZGp5ebatWuKiYlRYGCgbczZ2VmBgYGKjo6+rc+4fPmyrl+/rrvuuivH19PS0pSSkpLlAQAArMvUcvPbb78pIyNDXl5eWca9vLyUmJh4W5/x9ttvq2rVqlkK0p+NGzdOZcuWtT2qV6+e79wAAKDoMv20VH588MEHWrJkib7++mu5ubnluE1YWJguXLhge8THxxdySgAAUJiKmfnFK1asKBcXFyUlJWUZT0pKUuXKlf/2vePHj9cHH3ygDRs2qFGjRrfcztXVVa6urnbJCwAAij5Tj9yUKFFCzZo1yzIZ+Obk4NatW9/yfR999JFGjRqlyMhINW/evDCiAgAAB2HqkRtJCg0NVZ8+fdS8eXO1bNlSkyZNUmpqqkJCQiRJwcHB8vb21rhx4yRJH374oYYPH67FixfLx8fHNjfH3d1d7u7upu0HAAAoGkwvNz169NCvv/6q4cOHKzExUU2aNFFkZKRtknFcXJycnf93gGn69Om6du2annjiiSyfEx4ervfff78wowMAgCLI9HIjSQMGDNCAAQNyfG3Tpk1Znp86dargAwEAAIfl0FdLAQAA/BXlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWArlBgAAWEoxswMAAICC12zIQrMj5ErMv4Pz/F6O3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEuh3AAAAEspEuVm2rRp8vHxkZubmwICArRjx46/3f7LL79U3bp15ebmJj8/P3333XeFlBQAABR1ppebpUuXKjQ0VOHh4dq1a5caN26sjh076ty5czluv23bNj3zzDPq27evdu/erW7duqlbt246cOBAIScHAABFkenlJiIiQv369VNISIjq16+vGTNmqFSpUpo7d26O20+ePFmdOnXSkCFDVK9ePY0aNUpNmzbV1KlTCzk5AAAoioqZ+cWvXbummJgYhYWF2cacnZ0VGBio6OjoHN8THR2t0NDQLGMdO3bUypUrc9w+LS1NaWlptucXLlyQJKWkpGTbNiPtSm53wVQ57cOtsG9FB/t2A/tWdFh53yRr79+dtG83nxuG8c9vNkyUkJBgSDK2bduWZXzIkCFGy5Ytc3xP8eLFjcWLF2cZmzZtmuHp6Znj9uHh4YYkHjx48ODBg4cFHvHx8f/YL0w9clMYwsLCshzpyczMVHJysipUqCAnJ6cC//opKSmqXr264uPj5eHhUeBfrzCxb46JfXNMVt43ydr7x77Zh2EYunjxoqpWrfqP25pabipWrCgXFxclJSVlGU9KSlLlypVzfE/lypVztb2rq6tcXV2zjJUrVy7vofPIw8PDcn+pb2LfHBP75pisvG+StfePfcu/smXL3tZ2pk4oLlGihJo1a6aoqCjbWGZmpqKiotS6desc39O6dess20vS+vXrb7k9AAC4s5h+Wio0NFR9+vRR8+bN1bJlS02aNEmpqakKCQmRJAUHB8vb21vjxo2TJA0aNEjt2rXThAkT1KVLFy1ZskQ7d+7UzJkzzdwNAABQRJhebnr06KFff/1Vw4cPV2Jiopo0aaLIyEh5eXlJkuLi4uTs/L8DTG3atNHixYs1bNgwvfPOO7rnnnu0cuVKNWzY0Kxd+Fuurq4KDw/PdmrMCtg3x8S+OSYr75tk7f1j3wqfk2HczjVVAAAAjsH0RfwAAADsiXIDAAAshXIDAAAshXIDAAAshXIDAAAshXIDWFh6eroWLlyYbVVvK7DyvgHIHy4FR55dvXpVbm5uZsewq59++kkbN27UuXPnlJmZmeW1iIgIk1LlT6lSpXTo0CHVrFnT7Ch2Z+V9u9NY8fuJVc2bN089evRQqVKlzI5yS6Yv4mdV58+f144dO3L8IRkcHGxSqvzLzMzUmDFjNGPGDCUlJSk2Nla+vr5677335OPjo759+5odMc/Gjh2rYcOGqU6dOvLy8spyY9XCuMlqQWnZsqX27NljyQJgxX0rX778bf99S05OLuA0BcvK308kKSMjQ19//bUOHTokSapXr566deumYsUc+0fv0KFDNWjQID355JPq27ev2rRpY3akbBz7/+EiatWqVerVq5cuXbokDw+PbD8kHbncjB49WgsWLNBHH32kfv362cYbNmyoSZMmOfQ3o8mTJ2vu3Ll67rnnzI5iV6+++qpCQ0MVHx+vZs2aqXTp0lleb9SokUnJ8s+K+zZp0iTbn3///XeNHj1aHTt2tN0/Lzo6WmvXrtV7771nUkL7sfL3k4MHD6pr165KTExUnTp1JEkffvihKlWqpFWrVhXZVfVvR0JCglatWqX58+erffv28vX1VUhIiPr06XPLm1gXOgN2d8899xiDBg0yUlNTzY5id3fffbexYcMGwzAMw93d3Th+/LhhGIZx6NAho1y5cmZGy7fKlSsbsbGxZsewOycnp2wPZ2dn2/86Mivvm2EYRvfu3Y2PP/442/jHH39sPPbYY4UfyM6s/P2kVatWRlBQkJGcnGwbS05ONrp27Wq0bt3axGT2lZiYaIwfP97w8/MzihcvbgQFBRkrV640MjIyTM3FkZsCkJCQoIEDBxbp85F5lZCQoNq1a2cbz8zM1PXr101IZD+DBw/WtGnTsvzmbAUnT540O0KBsfK+SdLatWv14YcfZhvv1KmThg4dakIi+7Ly95M9e/Zo586dKl++vG2sfPnyGjNmjFq0aGFiMvvy8vLSv/71L8XGxio2Nlb79+9Xnz59VL58ec2bN0/t27c3JRflpgB07NhRO3fulK+vr9lR7K5+/fr64Ycfss1xWL58ufz9/U1KZR9vvvmmunTporvvvlv169dX8eLFs7y+YsUKk5Llj5Xmo/yVlfdNkipUqKBvvvlGb7zxRpbxb775RhUqVDAplf1Y+fvJvffeq6SkJDVo0CDL+Llz53IsdI4mKSlJn332mebNm6cTJ06oW7duWr16tQIDA5WamqqRI0eqT58+On36tCn5KDcFoEuXLhoyZIh+/vln+fn5Zfsh2bVrV5OS5d/w4cPVp08fJSQkKDMzUytWrNCRI0e0cOFCrV692ux4+TJw4EBt3LhRDzzwgCpUqODQk4hz8vPPPysuLk7Xrl3LMu7Ifx8l6bPPPtOMGTN08uRJRUdHq2bNmpo0aZJq1aqlxx57zOx4+TJixAi98MIL2rRpkwICAiRJ//3vfxUZGalZs2aZnC7/rPz9ZNy4cRo4cKDef/99tWrVSpK0fft2jRw5Uh9++KFSUlJs23p4eJgVM0+CgoK0du1a3XvvverXr5+Cg4N111132V4vXbq03njjDf373/82L6SpJ8UsKqd5AH+eD+DotmzZYgQGBhqVKlUySpYsabRt29ZYu3at2bHyzd3d3Vi9erXZMezu+PHjRqNGjbLMR7n5Z0f/+/jJJ58YFStWNEaPHm2ULFnSNmdj3rx5Rvv27U1OZx/bt283evbsafj7+xv+/v5Gz549je3bt5sdy26s+v3kr9/3c/q356g/E55//nlj27Ztf7tNZmamcerUqUJKlB3r3AD/X82aNbV27VrVrVvX7Ch2FRQUJBcXF82ePVu1atXSjh079Pvvv+uNN97Q+PHjdd9995kdMc/q16+vsWPHqlu3bipTpoz27t0rX19fHThwQO3bt9dvv/1mdkTcoTZv3nzb27Zr164Ak9yZOC0F/H/vv/++wsPDNW/ePEtNBo+Ojtb333+vihUrytnZWc7OzvrXv/5lO2y+e/dusyPm2cmTJ3Ocm+Hq6qrU1FQTEhWcq1evZjul6GinM/7qhRde0LPPPmvapNOCZPXCEhUVpYkTJ2ZZw+f1119XYGCgycluoNwUkM2bN2v8+PG2//D169fXkCFDHPq3ZElydnb+27koGRkZhZjGvqZMmaLjx4/Ly8tLPj4+2eZK7dq1y6Rk+ZORkaEyZcpIkipWrKgzZ86oTp06qlmzpo4cOWJyuvypVatWjov4RUZGql69eialsp/Lly/rrbfe0rJly/T7779ne92R/71J0q+//qpOnTqpUqVKevrpp9WrVy81adLE7Fh5tm/fPjVs2FDOzs7at2/f327riGsw3fTJJ59o0KBBeuKJJzRo0CBJN+YTPfLII5o4caL69+9vckLKTYH4/PPPFRISou7du2vgwIGSpK1bt+qhhx7S/Pnz1bNnT5MT5t3XX3+d5fn169e1e/duLViwQCNGjDAplX1069bN7AgFomHDhtq7d69q1aqlgIAAffTRRypRooRmzpzp8Ff0hYaGqn///rp69aoMw9COHTv0xRdfaNy4cZo9e7bZ8fJtyJAh2rhxo6ZPn67evXtr2rRpSkhI0KeffqoPPvjA7Hj59s033+iPP/7Ql19+qcWLFysiIkJ169ZVr1691LNnT/n4+JgdMVeaNGmixMREeXp6qkmTJnJyclJOMz+cnJwcupiOHTtWEydO1IABA2xjAwcOVNu2bTV27NgiUW6YUFwA6tata0RERGQbnzBhglG3bl0TEhW8RYsWGV27djU7BnIQGRlpfPXVV4ZhGMbRo0eNOnXqGE5OTkbFihWNqKgok9Pl3+eff27Url3bNlnT29vbmD17ttmx7KJ69erGxo0bDcMwjDJlyhhHjx41DMMwFi5caHTu3NnEZAUjPj7e+Oijj4y6desaLi4uZsfJtVOnThmZmZm2P//dw5GVLl3a9nfxz2JjY43SpUubkCg7JhQXAFdXVx08eDDbWgbHjh1Tw4YNdfXqVZOSFZwTJ06oUaNGunTpktlR8iw+Pl5OTk6qVq2aJGnHjh1avHix6tevrxdffNHkdPaVnJycq3sYOYLLly/r0qVL8vT0NDuK3bi7u+vnn39WjRo1VK1aNa1YsUItW7bUyZMn5efn59D/3v7q+vXrWrNmjT7//HOtWbNGd911lxISEsyOhRz07NlT/v7+GjJkSJbx8ePHa+fOnVqyZIlJyf6H01IFoHr16oqKispWbjZs2KDq1aublKrgXLlyRVOmTJG3t7fZUfKlZ8+eevHFF9W7d28lJiYqMDBQDRs21KJFi5SYmKjhw4ebHdFu/rwmhVWUKlXKUhPBJcnX11cnT55UjRo1VLduXS1btkwtW7bUqlWrVK5cObPj2cXGjRu1ePFiffXVV8rMzFT37t21evVqPfjgg2ZHy7ejR49q48aNOd5A2ZG/n9SvX19jxozRpk2bbPc82759u7Zu3ao33nhDU6ZMsW17c2pGYePITQGYPn26Xn/9dT3//PO2u6Vu3bpV8+fP1+TJk/XSSy+ZnDDv/vrbvmEYunjxokqVKqXPP//coReEK1++vLZv3646depoypQpWrp0qbZu3ap169bp5Zdf1okTJ8yOmCePP/54jkdonJyc5Obmptq1a6tnz562m/s5En9//3/ct+eee04PPPCACenyb+LEiXJxcdHAgQO1YcMGBQUFyTAMXb9+XREREbbJnI7K29tbycnJ6tSpk3r16qWgoCC5urqaHcsuZs2apVdeeUUVK1ZU5cqVs91A2VEvUJBuTOS/HU5OTqZ936TcFJCvv/5aEyZMyHKZ3JAhQxx+xdT58+dn+Ufq7OysSpUqKSAgIMs9VByRu7u7Dhw4IB8fH3Xt2lVt27bV22+/rbi4ONWpU0dXrlwxO2KePPfcc1q5cqXKlSunZs2aSbpx5df58+fVoUMH7d27V6dOnVJUVJTatm1rctrcCQsL0/Tp0+Xn56eWLVtKkn766Sft27dPzz33nH7++WdFRUVpxYoVDv9vT5JOnz6tmJgY1a5d26Gvtrlp1qxZevLJJy1zFOrPatasqVdffVVvv/222VHuSJQb4P8LCAjQAw88oC5duqhDhw7avn27GjdurO3bt+uJJ57QL7/8YnbEPBk6dKhSUlI0depUOTs7S7pxY8JBgwapTJkyGjNmjF5++WUdPHhQP/74o8lpc6dfv36qUaOG3nvvvSzjo0eP1unTpzVr1iyFh4drzZo12rlzp0kpcy86Olq///67Hn30UdvYwoULFR4ertTUVHXr1k0ff/yxZY5ySLL9+7o5583ReXh4aM+ePQ5/ReI/uVkhitz8PZMmMsNB7d27N8fHvn37jNjYWOPq1atmR8yzjRs3GuXKlTOcnZ2NkJAQ23hYWJjx+OOPm5gsfypWrGgcOXIk2/iRI0eMChUqGIZhGPv27TPKli1byMnyz8PDI8erNo4ePWp4eHgYhmEYhw4dMtzd3Qs7Wr506tTJ+OCDD2zP9+3bZxQrVsx44YUXjIiICKNy5cpGeHi4eQHtJCMjwxgxYoTh4eFhuyVB2bJljZEjRxoZGRlmx8uX559/3pg+fbrZMQrM7NmzjQYNGhglSpQwSpQoYTRo0MCYNWuW2bFsmFBsJ3fddZdiY2NVsWLFf7wKJTk5uRCT2dfNtRuknBt78eLF1aNHD3366adyc3MzJWNe3VyuPyUlJcspthdffNGhJ6qmp6fr8OHDuvfee7OMHz582LbWhpubW9H7zes2uLm5adu2bdkm72/bts329y8zM9Ph/i7u2bNHo0aNsj1fsmSJAgICbDfLrFatmsLDw/X++++blNA+3n33Xc2ZM0cffPCB7ZTojz/+qPfff19Xr17VmDFjTE6YO3+eSFu7dm2999572r59e443UDZroq09DB8+XBEREXrttddsE4qjo6M1ePBgxcXFaeTIkSYn5Gopu5k4caJtFdiJEyc65A+K2/H111/r7bff1pAhQ2xzHHbs2KEJEyYoPDxc6enpGjp0qIYNG6bx48ebnDb3XFxcss0dcrSFxP6qd+/e6tu3r9555x21aNFC0o15KWPHjlVwcLCkGytqN2jQwMyYefLaa6/p5ZdfVkxMTJZ9mz17tt555x1J0tq1ax1u1ds//vhDXl5etuebN29W586dbc9btGih+Ph4M6LZ1YIFCzR79uwsFyI0atRI3t7eevXVVx2u3EycODHLc3d3d23evDnbfaacnJwcutxMnz5ds2bN0jPPPGMb69q1qxo1aqTXXnutSJQbTkshV1q0aGFERkZmG4+MjDRatGhhGIZhfP3114avr29hR7OLL7/80njyySeNgIAA212Ybz4cVXp6ujF69GijcuXKtoXuKleubIwZM8ZIT083DMMwTp8+bcTHx5ucNG8+//xzo1WrVkb58uWN8uXLG61atTIWLVpke/3y5cvGlStXTEyYezVq1DA2b95sGIZhpKWlGSVLljQ2bNhge33fvn1G+fLlzYpnN66urjmeMj18+LDh5uZmQiLcjrJlyxqxsbHZxo8cOVJkTm87m12urMjFxUXnzp3LNv7777/LxcXFhET2s3///mz38ZFuXBmwf/9+STdOXZ09e7awo+XblClTFBISIi8vL+3evVstW7ZUhQoVdOLEiSy/NTsaFxcXvfvuuzp79qzOnz+v8+fP6+zZs3rnnXdsfx9vLhLniHr16qXo6GglJycrOTlZ0dHRWW5xUrJkSYc7LfXII49o6NCh+uGHHxQWFqZSpUpluS/dvn37dPfdd5uY0D4aN26sqVOnZhufOnWqJa4G+7OMjAzt2bNHf/zxh9lR8q13796aPn16tvGZM2eqV69eJiTKjtNSBcC4xQVoaWlpKlGiRCGnsa+6devqgw8+0MyZM237cv36dX3wwQeqW7euJCkhISHLIXVH8cknn2jmzJl65plnNH/+fL311lvy9fXV8OHDHXqe1J85+l2kb+XatWs5LpRWo0YNkxLlz6hRo9S9e3e1a9dO7u7uWrBgQZbvHXPnzlWHDh1MTGgfH330kbp06aINGzZkmbsRHx+v7777zuR0+fP666/Lz89Pffv2VUZGhu6//35FR0erVKlSWr16tcPfCX3OnDlat26dWrVqJUn673//q7i4OAUHBys0NNS2XUREhCn5uBTcjm5OJhs8eLBGjRold3d322sZGRnasmWLTp06pd27d5sVMd+2bdumrl27ytnZ2fab1f79+5WRkaHVq1erVatW+uyzz5SYmJhtae6irlSpUjp06JBq1qwpT09PrV+/Xo0bN9bRo0fVqlWrHO/KXFTdanG7nDjyYmJHjx7V888/r23btmUZNwzD4W9OKEkXLlyQu7t7tiO+ycnJcnd3d/hfliTpzJkzmjZtmg4fPizpxppgL774okaPHq2ZM2eanC7vqlWrppUrV6p58+ZauXKl+vfvr40bN+qzzz7T999/r61bt5odMc9ud1FMJycnff/99wWc5hZfm3JjPzdXbTx9+rSqVauW5RtSiRIl5OPjo5EjRyogIMCsiHZx8eJFLVq0SLGxsZKkOnXqqGfPnrYJ1Y7K19dXX331lfz9/dW8eXP169dPL730ktatW6enn37aoY7e5OYO7eHh4QWYpGC1bdtWxYoV09ChQ1WlSpVsha5x48YmJUN+7N27V02bNnXocurm5qZjx46pWrVqtisuJ02apJMnT6px48ZKSUkxO6KlcVrKjk6ePCnpRqtdsWKFw6/YeytlypTRyy+/bHYMu3vwwQf17bffyt/fXyEhIRo8eLCWL1+unTt3qnv37mbHyxVHLiy5sWfPHsXExNhOiQJFhZeXl37++WdVqVJFkZGRtjkqly9fdvi5l46AclMANm7caHaEAnX8+HFNmjTJdmuJBg0aaODAgQ4/wXHmzJm2ORv9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",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"sns.barplot(x=\"theme\", y=\"score\", data=op)\n",
"plt.xticks(rotation=90)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "venv",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
|