├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE.md ├── PULL_REQUEST_TEMPLATE.md ├── feedback_data.csv └── workflows │ └── main.yml ├── .gitignore ├── CONTRIBUTING.md ├── Chapter 2 ├── Ch2_challenge.ipynb ├── Ch2_solution.ipynb └── sentiment_examples.txt ├── Chapter 3 ├── Ch3_challenge.ipynb ├── Ch3_solution.ipynb └── feedback_data.csv ├── Chapter 4 ├── Ch4_challenge.ipynb ├── Ch4_solution.ipynb └── ch4_feedback_data.csv ├── Chapter 5 ├── Ch5_challenge.ipynb └── Ch5_solution.ipynb ├── LICENSE ├── NOTICE └── README.md /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Codeowners for these exercise files: 2 | # * (asterisk) denotes "all files and folders" 3 | # Example: * @producer @instructor 4 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 7 | 8 | ## Issue Overview 9 | 10 | 11 | ## Describe your environment 12 | 13 | 14 | ## Steps to Reproduce 15 | 16 | 1. 17 | 2. 18 | 3. 19 | 4. 20 | 21 | ## Expected Behavior 22 | 23 | 24 | ## Current Behavior 25 | 26 | 27 | ## Possible Solution 28 | 29 | 30 | ## Screenshots / Video 31 | 32 | 33 | ## Related Issues 34 | 35 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.github/feedback_data.csv: -------------------------------------------------------------------------------- 1 | Your products are excellent. I really love the quality! However, delivery to my location in Los Angeles was a bit slow. abbey@email.com 2 | The customer service team in New York was helpful in resolving my issue. I appreciate the assistance. brian@email.com 3 | The new features in the latest release are fantastic! They have greatly improved the user experience in San Francisco. 4 | The product didn't meet my expectations, and I'm disappointed. I hope you can address the issues in Chicago. My email address is emailme@email.com 5 | The store was closed but the hours said it should have been open. I wasted gas and tme. helpme@email.com -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Copy To Branches 2 | on: 3 | workflow_dispatch: 4 | jobs: 5 | copy-to-branches: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v2 9 | with: 10 | fetch-depth: 0 11 | - name: Copy To Branches Action 12 | uses: planetoftheweb/copy-to-branches@v1.2 13 | env: 14 | key: main 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | .tmp 4 | npm-debug.log 5 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | 2 | Contribution Agreement 3 | ====================== 4 | 5 | This repository does not accept pull requests (PRs). All pull requests will be closed. 6 | 7 | However, if any contributions (through pull requests, issues, feedback or otherwise) are provided, as a contributor, you represent that the code you submit is your original work or that of your employer (in which case you represent you have the right to bind your employer). By submitting code (or otherwise providing feedback), you (and, if applicable, your employer) are licensing the submitted code (and/or feedback) to LinkedIn and the open source community subject to the BSD 2-Clause license. 8 | -------------------------------------------------------------------------------- /Chapter 2/Ch2_solution.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "deletable": true, 7 | "editable": true, 8 | "id": "vqKvqP6UJLUo" 9 | }, 10 | "source": [ 11 | "# Build a spaCy Processing Pipeline\n", 12 | "\n" 13 | ] 14 | }, 15 | { 16 | "cell_type": "markdown", 17 | "source": [ 18 | "Our use case is to perform a sentiment analysis using spaCy." 19 | ], 20 | "metadata": { 21 | "id": "oL0fn7Up5uyx" 22 | } 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "source": [ 27 | "![image.png](data:image/png;base64,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)" 28 | ], 29 | "metadata": { 30 | "id": "_yLfT1b55cx0" 31 | } 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "source": [ 36 | "#Exercise #1: Load Resources" 37 | ], 38 | "metadata": { 39 | "id": "RGDeqLD9pQS3" 40 | } 41 | }, 42 | { 43 | "cell_type": "code", 44 | "source": [ 45 | "# SOLUTION\n", 46 | "\n", 47 | "#Import pandas as pd\n", 48 | "import pandas as pd\n", 49 | "\n", 50 | "#Import spacy\n", 51 | "import spacy\n", 52 | "\n", 53 | "#Install spaCy\n", 54 | "!pip install spacy\n", 55 | "\n", 56 | "#Download the English langugage model for spaCy\n", 57 | "!python -m spacy download en_core_web_sm\n", 58 | "\n", 59 | "#Load the English model\n", 60 | "nlp = spacy.load(\"en_core_web_sm\") #Here, spacy.load, loads the English model and assigns it to variable nlp\n", 61 | "\n", 62 | "#When you execute nlp = spacy.load('en'), spaCy downloads and loads the pre-trained English language model\n", 63 | "#into memory and assigns it to the variable nlp.\n", 64 | "#This pre-trained model contains information about word vectors, part-of-speech tags, syntactic dependencies, and other linguistic features necessary for various NLP tasks." 65 | ], 66 | "metadata": { 67 | "id": "JYVceT0cBAK1", 68 | "colab": { 69 | "base_uri": "https://localhost:8080/" 70 | }, 71 | "outputId": "14c40dc8-8c88-416e-9407-4fa87ef01563" 72 | }, 73 | "execution_count": null, 74 | "outputs": [ 75 | { 76 | "output_type": "stream", 77 | "name": "stdout", 78 | "text": [ 79 | "Requirement already satisfied: spacy in /usr/local/lib/python3.10/dist-packages (3.7.4)\n", 80 | "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in /usr/local/lib/python3.10/dist-packages (from spacy) (3.0.12)\n", 81 | "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from spacy) (1.0.5)\n", 82 | "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.10/dist-packages (from spacy) (1.0.10)\n", 83 | "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.10/dist-packages (from spacy) (2.0.8)\n", 84 | "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.10/dist-packages (from spacy) (3.0.9)\n", 85 | "Requirement already satisfied: thinc<8.3.0,>=8.2.2 in /usr/local/lib/python3.10/dist-packages (from spacy) (8.2.3)\n", 86 | "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in /usr/local/lib/python3.10/dist-packages (from spacy) (1.1.2)\n", 87 | "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in /usr/local/lib/python3.10/dist-packages (from spacy) (2.4.8)\n", 88 | "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in /usr/local/lib/python3.10/dist-packages (from spacy) (2.0.10)\n", 89 | "Requirement already satisfied: weasel<0.4.0,>=0.1.0 in /usr/local/lib/python3.10/dist-packages (from spacy) (0.3.4)\n", 90 | "Requirement already satisfied: typer<0.10.0,>=0.3.0 in /usr/local/lib/python3.10/dist-packages (from spacy) (0.9.4)\n", 91 | "Requirement already satisfied: smart-open<7.0.0,>=5.2.1 in /usr/local/lib/python3.10/dist-packages (from spacy) (6.4.0)\n", 92 | "Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /usr/local/lib/python3.10/dist-packages (from spacy) (4.66.2)\n", 93 | "Requirement already satisfied: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from spacy) (2.31.0)\n", 94 | "Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in /usr/local/lib/python3.10/dist-packages (from spacy) (2.6.4)\n", 95 | "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from spacy) (3.1.3)\n", 96 | "Requirement already satisfied: setuptools in /usr/local/lib/python3.10/dist-packages (from spacy) (67.7.2)\n", 97 | "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from spacy) (24.0)\n", 98 | "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in /usr/local/lib/python3.10/dist-packages (from spacy) (3.3.0)\n", 99 | "Requirement already satisfied: numpy>=1.19.0 in /usr/local/lib/python3.10/dist-packages (from spacy) (1.25.2)\n", 100 | "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (0.6.0)\n", 101 | "Requirement already satisfied: pydantic-core==2.16.3 in /usr/local/lib/python3.10/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (2.16.3)\n", 102 | "Requirement already satisfied: typing-extensions>=4.6.1 in /usr/local/lib/python3.10/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy) (4.10.0)\n", 103 | "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (3.3.2)\n", 104 | "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (3.6)\n", 105 | "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (2.0.7)\n", 106 | "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy) (2024.2.2)\n", 107 | "Requirement already satisfied: blis<0.8.0,>=0.7.8 in /usr/local/lib/python3.10/dist-packages (from thinc<8.3.0,>=8.2.2->spacy) (0.7.11)\n", 108 | "Requirement already satisfied: confection<1.0.0,>=0.0.1 in /usr/local/lib/python3.10/dist-packages (from thinc<8.3.0,>=8.2.2->spacy) (0.1.4)\n", 109 | "Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer<0.10.0,>=0.3.0->spacy) (8.1.7)\n", 110 | "Requirement already satisfied: cloudpathlib<0.17.0,>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from weasel<0.4.0,>=0.1.0->spacy) (0.16.0)\n", 111 | "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->spacy) (2.1.5)\n", 112 | "Collecting en-core-web-sm==3.7.1\n", 113 | " Downloading https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.7.1/en_core_web_sm-3.7.1-py3-none-any.whl (12.8 MB)\n", 114 | "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m12.8/12.8 MB\u001b[0m \u001b[31m59.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", 115 | "\u001b[?25hRequirement already satisfied: spacy<3.8.0,>=3.7.2 in /usr/local/lib/python3.10/dist-packages (from en-core-web-sm==3.7.1) (3.7.4)\n", 116 | "Requirement already satisfied: spacy-legacy<3.1.0,>=3.0.11 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.0.12)\n", 117 | "Requirement already satisfied: spacy-loggers<2.0.0,>=1.0.0 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.0.5)\n", 118 | "Requirement already satisfied: murmurhash<1.1.0,>=0.28.0 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.0.10)\n", 119 | "Requirement already satisfied: cymem<2.1.0,>=2.0.2 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.0.8)\n", 120 | "Requirement already satisfied: preshed<3.1.0,>=3.0.2 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.0.9)\n", 121 | "Requirement already satisfied: thinc<8.3.0,>=8.2.2 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (8.2.3)\n", 122 | "Requirement already satisfied: wasabi<1.2.0,>=0.9.1 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.1.2)\n", 123 | "Requirement already satisfied: srsly<3.0.0,>=2.4.3 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.4.8)\n", 124 | "Requirement already satisfied: catalogue<2.1.0,>=2.0.6 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.0.10)\n", 125 | "Requirement already satisfied: weasel<0.4.0,>=0.1.0 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.3.4)\n", 126 | "Requirement already satisfied: typer<0.10.0,>=0.3.0 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.9.4)\n", 127 | "Requirement already satisfied: smart-open<7.0.0,>=5.2.1 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (6.4.0)\n", 128 | "Requirement already satisfied: tqdm<5.0.0,>=4.38.0 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (4.66.2)\n", 129 | "Requirement already satisfied: requests<3.0.0,>=2.13.0 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.31.0)\n", 130 | "Requirement already satisfied: pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.6.4)\n", 131 | "Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.1.3)\n", 132 | "Requirement already satisfied: setuptools in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (67.7.2)\n", 133 | "Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (24.0)\n", 134 | "Requirement already satisfied: langcodes<4.0.0,>=3.2.0 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.3.0)\n", 135 | "Requirement already satisfied: numpy>=1.19.0 in /usr/local/lib/python3.10/dist-packages (from spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (1.25.2)\n", 136 | "Requirement already satisfied: annotated-types>=0.4.0 in /usr/local/lib/python3.10/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.6.0)\n", 137 | "Requirement already satisfied: pydantic-core==2.16.3 in /usr/local/lib/python3.10/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.16.3)\n", 138 | "Requirement already satisfied: typing-extensions>=4.6.1 in /usr/local/lib/python3.10/dist-packages (from pydantic!=1.8,!=1.8.1,<3.0.0,>=1.7.4->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (4.10.0)\n", 139 | "Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.3.2)\n", 140 | "Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (3.6)\n", 141 | "Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.0.7)\n", 142 | "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests<3.0.0,>=2.13.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2024.2.2)\n", 143 | "Requirement already satisfied: blis<0.8.0,>=0.7.8 in /usr/local/lib/python3.10/dist-packages (from thinc<8.3.0,>=8.2.2->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.7.11)\n", 144 | "Requirement already satisfied: confection<1.0.0,>=0.0.1 in /usr/local/lib/python3.10/dist-packages (from thinc<8.3.0,>=8.2.2->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.1.4)\n", 145 | "Requirement already satisfied: click<9.0.0,>=7.1.1 in /usr/local/lib/python3.10/dist-packages (from typer<0.10.0,>=0.3.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (8.1.7)\n", 146 | "Requirement already satisfied: cloudpathlib<0.17.0,>=0.7.0 in /usr/local/lib/python3.10/dist-packages (from weasel<0.4.0,>=0.1.0->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (0.16.0)\n", 147 | "Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->spacy<3.8.0,>=3.7.2->en-core-web-sm==3.7.1) (2.1.5)\n", 148 | "\u001b[38;5;2m✔ Download and installation successful\u001b[0m\n", 149 | "You can now load the package via spacy.load('en_core_web_sm')\n", 150 | "\u001b[38;5;3m⚠ Restart to reload dependencies\u001b[0m\n", 151 | "If you are in a Jupyter or Colab notebook, you may need to restart Python in\n", 152 | "order to load all the package's dependencies. You can do this by selecting the\n", 153 | "'Restart kernel' or 'Restart runtime' option.\n" 154 | ] 155 | } 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "source": [ 161 | "##spaCy Procesing Pipeline" 162 | ], 163 | "metadata": { 164 | "id": "CynCZB2eSpk4" 165 | } 166 | }, 167 | { 168 | "cell_type": "markdown", 169 | "source": [ 170 | "In spaCy, the order of tasks in the processing pipeline generally follows a predefined sequence, although it's also customizable. By default, spaCy's processing pipeline includes the following components in the specified order:\n", 171 | "\n" 172 | ], 173 | "metadata": { 174 | "id": "E3lAMG68F3_F" 175 | } 176 | }, 177 | { 178 | "cell_type": "markdown", 179 | "source": [ 180 | "### Order of Tasks in the Processing Pipeline\n", 181 | "\n", 182 | "| Order | Name | Definition |\n", 183 | "| :-----| :------ |: ---- |\n", 184 | "| 1 | Tokenization | Input text is split into individual tokens, such as words and punctuation marks. |\n", 185 | "| 2 | Stop Words | Removes stop words from the text. |\n", 186 | "| 3 | POS Tagging | Assigns grammatical labels (e.g., noun, verb, adjective) to each token in the text based on its syntactic role within the sentence. |\n", 187 | "| 4 | Dependency Parsing| Analyzes the grammatical structure of the text by determining the relationships |\n", 188 | "| 5 |Lemmatization | Reduces tokens to their base or root form (lemmas) |\n", 189 | "| 6 | Named Entity Recognition| Identifies, categorizes persons, organizations, locations, dates, etc..|\n", 190 | "| 7 | Other Use Case Tasks| May be included in pipelne (Sentiment Analysis) |\n" 191 | ], 192 | "metadata": { 193 | "id": "9OZqsZCjD_Sh" 194 | } 195 | }, 196 | { 197 | "cell_type": "markdown", 198 | "source": [ 199 | "# Exercise #2: Build a Simple Processing Pipeline" 200 | ], 201 | "metadata": { 202 | "id": "01EyDupaWZ-U" 203 | } 204 | }, 205 | { 206 | "cell_type": "code", 207 | "source": [ 208 | "# Example text\n", 209 | "text = \"A customer in New York City wants to give a review.\"\n", 210 | "\n", 211 | "# Process the text using spaCy\n", 212 | "doc = nlp(text)\n", 213 | "\n", 214 | "# The nlp object is typically a loaded spaCy language model,\n", 215 | "# such as the English language model ('en') you loaded. When you pass\n", 216 | "# the text string to the nlp object, spaCy processes the text\n", 217 | "# through its NLP pipeline.\n", 218 | "\n", 219 | "# After executing doc = nlp(text), the variable doc contains a\n", 220 | "# spaCy Doc object, which represents the processed version of the input text.\n", 221 | "\n", 222 | "#-------------------------------------------------------------------------------\n", 223 | "# SOLUTION\n", 224 | "\n", 225 | "# Example text\n", 226 | "text = \"A customer in New York City wants to give a review.\"\n", 227 | "\n", 228 | "# Process the text using spaCy\n", 229 | "doc = nlp(text) #Recall that the Doc object represents the our sentence.\n", 230 | "\n", 231 | "\n", 232 | "# Tokenization\n", 233 | "print(\"Tokenization:\")\n", 234 | "for token in doc:\n", 235 | " # Iterate through each token in the processed text and print the token text\n", 236 | " print(token.text)\n", 237 | "\n", 238 | "print(\"\\n\") # Add a newline for separation\n", 239 | "\n", 240 | "# Filter out stop words\n", 241 | "print(\"Filtered Tokens (without stop words):\")\n", 242 | "filtered_tokens = [token.text for token in doc if not token.is_stop]\n", 243 | "# Create a list of tokens excluding stop words using list comprehension\n", 244 | "print(filtered_tokens)\n", 245 | "\n", 246 | "print(\"\\n\") # Add a newline for separation\n", 247 | "\n", 248 | "# Part-of-Speech Tagging (POS)\n", 249 | "print(\"Part-of-Speech Tagging (POS):\")\n", 250 | "for token in doc:\n", 251 | " # Iterate through each token and print the token text and its POS tag\n", 252 | " print(token.text, token.pos_)\n", 253 | "\n", 254 | "print(\"\\n\") # Add a newline for separation\n", 255 | "\n", 256 | "# Named Entity Recognition (NER)\n", 257 | "print(\"Named Entity Recognition (NER):\")\n", 258 | "for ent in doc.ents:\n", 259 | " # Iterate through each named entity in the processed text and print its text and label\n", 260 | " print(ent.text, ent.label_)\n", 261 | "\n", 262 | "print(\"\\n\") # Add a newline for separation\n", 263 | "\n", 264 | "# Lemmatization\n", 265 | "print(\"Lemmatization:\")\n", 266 | "lemmatized_tokens = [token.lemma_ for token in doc if not token.is_punct]\n", 267 | "# Create a list of lemmatized tokens excluding punctuation using list comprehension\n", 268 | "print(lemmatized_tokens)\n" 269 | ], 270 | "metadata": { 271 | "id": "55OLJ3mfrAwH", 272 | "colab": { 273 | "base_uri": "https://localhost:8080/" 274 | }, 275 | "outputId": "4cd10a4c-f19b-49e9-9b28-38b2417a1af6" 276 | }, 277 | "execution_count": null, 278 | "outputs": [ 279 | { 280 | "output_type": "stream", 281 | "name": "stdout", 282 | "text": [ 283 | "Tokenization:\n", 284 | "A\n", 285 | "customer\n", 286 | "in\n", 287 | "New\n", 288 | "York\n", 289 | "City\n", 290 | "wants\n", 291 | "to\n", 292 | "give\n", 293 | "a\n", 294 | "review\n", 295 | ".\n", 296 | "\n", 297 | "\n", 298 | "Filtered Tokens (without stop words):\n", 299 | "['customer', 'New', 'York', 'City', 'wants', 'review', '.']\n", 300 | "\n", 301 | "\n", 302 | "Part-of-Speech Tagging (POS):\n", 303 | "A DET\n", 304 | "customer NOUN\n", 305 | "in ADP\n", 306 | "New PROPN\n", 307 | "York PROPN\n", 308 | "City PROPN\n", 309 | "wants VERB\n", 310 | "to PART\n", 311 | "give VERB\n", 312 | "a DET\n", 313 | "review NOUN\n", 314 | ". PUNCT\n", 315 | "\n", 316 | "\n", 317 | "Named Entity Recognition (NER):\n", 318 | "New York City GPE\n", 319 | "\n", 320 | "\n", 321 | "Lemmatization:\n", 322 | "['a', 'customer', 'in', 'New', 'York', 'City', 'want', 'to', 'give', 'a', 'review']\n" 323 | ] 324 | } 325 | ] 326 | }, 327 | { 328 | "cell_type": "markdown", 329 | "source": [ 330 | "#Exercise #3: Build a Processing Pipeline with a File" 331 | ], 332 | "metadata": { 333 | "id": "5g2IwiXkT4Qj" 334 | } 335 | }, 336 | { 337 | "cell_type": "code", 338 | "source": [ 339 | "# Run this cell.\n", 340 | "\n", 341 | "file_path = '/content/sentiment_examples.txt'\n", 342 | "with open(file_path, 'r', encoding='utf-8') as file:\n", 343 | " sentiment_texts = file.readlines()\n", 344 | "\n", 345 | "# After this block of code executes, the 'sentiment_texts' list contains\n", 346 | "# all the lines of text read from the 'sentiment_examples.txt' file.\n", 347 | "\n", 348 | "# The 'with' statement is used to open the file in a way that ensures it is automatically closed after the block of code inside the 'with' statement is executed.\n", 349 | "\n", 350 | "# 'open(file_path, 'r', encoding='utf-8')' opens the file in read mode ('r') with UTF-8 encoding ('utf-8').\n", 351 | "# 'as file' assigns the opened file object to the variable 'file', which can be used to read from the file.\n", 352 | "\n", 353 | "# 'file.readlines()' reads all lines from the file and returns a list of strings, where each string corresponds to a line of text in the file.\n", 354 | "# These strings are stored in the 'sentiment_texts' list for further processing." 355 | ], 356 | "metadata": { 357 | "id": "UBSMP0lLrXRi" 358 | }, 359 | "execution_count": null, 360 | "outputs": [] 361 | }, 362 | { 363 | "cell_type": "code", 364 | "source": [ 365 | "# Initialize empty lists to store the results\n", 366 | "token_lists = [] # List to store tokens for each sentiment example\n", 367 | "filtered_token_lists = [] # List to store filtered tokens (after stop word removal) for each sentiment example\n", 368 | "pos_tag_lists = [] # List to store POS tags for each sentiment example\n", 369 | "ner_lists = [] # List to store named entities for each sentiment example\n", 370 | "\n", 371 | "# Process each sentiment example using spaCy and store the results\n", 372 | "for sentiment_text in sentiment_texts:\n", 373 | " doc = nlp(sentiment_text.strip()) # Strip any leading/trailing whitespace\n", 374 | " #The .strip() method is used to clean up the sentiment_text\n", 375 | " #before passing it to the spaCy nlp pipeline for processing.\n", 376 | " #This ensures that there are no unwanted spaces or newline characters\n", 377 | " #that could affect the processing of the text by spaCy.\n", 378 | "\n", 379 | "#-----------------------------------------------------------------------------\n", 380 | "# SOLUTION\n", 381 | "\n", 382 | " # Tokenization\n", 383 | " tokens = [token.text for token in doc] # Extract tokens from the processed text\n", 384 | " token_lists.append(tokens) # Append tokens list to token_lists\n", 385 | " #Creates a list of tokens and appending it to the token_lists list.\n", 386 | " #This is done to store the tokens for each sentiment example.\n", 387 | "\n", 388 | " # Stop Word Removal filter\n", 389 | " filtered_tokens = [token.text for token in doc if not token.is_stop] # Filter out stop words\n", 390 | " filtered_token_lists.append(filtered_tokens) # Append filtered tokens list to filtered_token_lists\n", 391 | "\n", 392 | "\n", 393 | " # Part-of-Speech Tagging (POS tagging)\n", 394 | " pos_tags = [(token.text, token.pos_) for token in doc] # Extract token text and POS tags\n", 395 | " pos_tag_lists.append(pos_tags) # Append POS tags list to pos_tag_lists\n", 396 | "\n", 397 | " # Named Entity Recognition (NER)\n", 398 | " ner_entities = [(ent.text, ent.label_) for ent in doc.ents] # Extract named entities and their labels\n", 399 | " ner_lists.append(ner_entities) # Append named entities list to ner_lists\n", 400 | "\n", 401 | "# Create a DataFrame to organize the results\n", 402 | "results_df = pd.DataFrame({\n", 403 | " 'Sentiment Example': sentiment_texts,\n", 404 | " 'Tokens': token_lists,\n", 405 | " 'Filtered Tokens': filtered_token_lists,\n", 406 | " 'POS Tags': pos_tag_lists,\n", 407 | " 'Named Entities': ner_lists\n", 408 | "})\n", 409 | "\n", 410 | "# Display the DataFrame\n", 411 | "print(results_df)\n" 412 | ], 413 | "metadata": { 414 | "id": "BzCjJnodmL_s", 415 | "colab": { 416 | "base_uri": "https://localhost:8080/" 417 | }, 418 | "outputId": "f75c1516-44e4-4d15-fc4c-91aeac1b0d4f" 419 | }, 420 | "execution_count": null, 421 | "outputs": [ 422 | { 423 | "output_type": "stream", 424 | "name": "stdout", 425 | "text": [ 426 | " Sentiment Example \\\n", 427 | "0 \"I love the new features of your product! It h... \n", 428 | "1 \"The customer support was exceptional in New Y... \n", 429 | "2 \"The quality of your service exceeded my expec... \n", 430 | "3 \"I'm extremely satisfied with my purchase. The... \n", 431 | "4 \"The user interface is intuitive and easy to n... \n", 432 | "5 \"I had a positive experience shopping on your ... \n", 433 | "6 \"Your company values customer feedback, and it... \n", 434 | "7 \"The pricing is fair, and the value I get in r... \n", 435 | "8 \"I appreciate the personalized recommendations... \n", 436 | "9 \"The delivery was prompt, and the packaging wa... \n", 437 | "\n", 438 | " Tokens \\\n", 439 | "0 [\", I, love, the, new, features, of, your, pro... \n", 440 | "1 [\", The, customer, support, was, exceptional, ... \n", 441 | "2 [\", The, quality, of, your, service, exceeded,... \n", 442 | "3 [\", I, 'm, extremely, satisfied, with, my, pur... \n", 443 | "4 [\", The, user, interface, is, intuitive, and, ... \n", 444 | "5 [\", I, had, a, positive, experience, shopping,... \n", 445 | "6 [\", Your, company, values, customer, feedback,... \n", 446 | "7 [\", The, pricing, is, fair, ,, and, the, value... \n", 447 | "8 [\", I, appreciate, the, personalized, recommen... \n", 448 | "9 [\", The, delivery, was, prompt, ,, and, the, p... \n", 449 | "\n", 450 | " Filtered Tokens \\\n", 451 | "0 [\", love, new, features, product, !, greatly, ... \n", 452 | "1 [\", customer, support, exceptional, New, York,... \n", 453 | "2 [\", quality, service, exceeded, expectations, ... \n", 454 | "3 [\", extremely, satisfied, purchase, ., product... \n", 455 | "4 [\", user, interface, intuitive, easy, navigate... \n", 456 | "5 [\", positive, experience, shopping, website, .... \n", 457 | "6 [\", company, values, customer, feedback, ,, sh... \n", 458 | "7 [\", pricing, fair, ,, value, return, fantastic... \n", 459 | "8 [\", appreciate, personalized, recommendations,... \n", 460 | "9 [\", delivery, prompt, ,, packaging, secure, .,... \n", 461 | "\n", 462 | " POS Tags Named Entities \n", 463 | "0 [(\", PUNCT), (I, PRON), (love, VERB), (the, DE... [] \n", 464 | "1 [(\", PUNCT), (The, DET), (customer, NOUN), (su... [(New York, GPE)] \n", 465 | "2 [(\", PUNCT), (The, DET), (quality, NOUN), (of,... [(Prague, GPE)] \n", 466 | "3 [(\", PUNCT), (I, PRON), ('m, AUX), (extremely,... [] \n", 467 | "4 [(\", PUNCT), (The, DET), (user, NOUN), (interf... [] \n", 468 | "5 [(\", PUNCT), (I, PRON), (had, VERB), (a, DET),... [] \n", 469 | "6 [(\", PUNCT), (Your, PRON), (company, NOUN), (v... [] \n", 470 | "7 [(\", PUNCT), (The, DET), (pricing, NOUN), (is,... [] \n", 471 | "8 [(\", PUNCT), (I, PRON), (appreciate, VERB), (t... [] \n", 472 | "9 [(\", PUNCT), (The, DET), (delivery, NOUN), (wa... [] \n" 473 | ] 474 | } 475 | ] 476 | }, 477 | { 478 | "cell_type": "markdown", 479 | "source": [ 480 | "Export Data to CSV to see the processed_data.csv" 481 | ], 482 | "metadata": { 483 | "id": "K3E8rVsOkWHr" 484 | } 485 | }, 486 | { 487 | "cell_type": "code", 488 | "source": [ 489 | "\n", 490 | "# Write the DataFrame to a CSV file named 'processed_data.csv' without including the index\n", 491 | "results_df.to_csv('processed_data.csv', index=False)\n", 492 | "\n", 493 | "# Read the CSV file 'processed_data.csv' into a Pandas DataFrame called processed_df\n", 494 | "# Specify the encoding as 'latin-1' to handle special characters if present\n", 495 | "processed_df = pd.read_csv('/content/processed_data.csv', encoding='latin-1')\n" 496 | ], 497 | "metadata": { 498 | "id": "xyVoHpxui5Za" 499 | }, 500 | "execution_count": null, 501 | "outputs": [] 502 | }, 503 | { 504 | "cell_type": "code", 505 | "source": [ 506 | "processed_df.head()" 507 | ], 508 | "metadata": { 509 | "id": "3YzY2O4MkYeq", 510 | "colab": { 511 | "base_uri": "https://localhost:8080/", 512 | "height": 310 513 | }, 514 | "outputId": "f7f4b7bf-f8e3-4524-b3f9-c2de3fe6d7cd" 515 | }, 516 | "execution_count": null, 517 | "outputs": [ 518 | { 519 | "output_type": "execute_result", 520 | "data": { 521 | "text/plain": [ 522 | " Sentiment Example \\\n", 523 | "0 \"I love the new features of your product! It h... \n", 524 | "1 \"The customer support was exceptional in New Y... \n", 525 | "2 \"The quality of your service exceeded my expec... \n", 526 | "3 \"I'm extremely satisfied with my purchase. The... \n", 527 | "4 \"The user interface is intuitive and easy to n... \n", 528 | "\n", 529 | " Tokens \\\n", 530 | "0 ['\"', 'I', 'love', 'the', 'new', 'features', '... \n", 531 | "1 ['\"', 'The', 'customer', 'support', 'was', 'ex... \n", 532 | "2 ['\"', 'The', 'quality', 'of', 'your', 'service... \n", 533 | "3 ['\"', 'I', \"'m\", 'extremely', 'satisfied', 'wi... \n", 534 | "4 ['\"', 'The', 'user', 'interface', 'is', 'intui... \n", 535 | "\n", 536 | " Filtered Tokens \\\n", 537 | "0 ['\"', 'love', 'new', 'features', 'product', '!... \n", 538 | "1 ['\"', 'customer', 'support', 'exceptional', 'N... \n", 539 | "2 ['\"', 'quality', 'service', 'exceeded', 'expec... \n", 540 | "3 ['\"', 'extremely', 'satisfied', 'purchase', '.... \n", 541 | "4 ['\"', 'user', 'interface', 'intuitive', 'easy'... \n", 542 | "\n", 543 | " POS Tags Named Entities \n", 544 | "0 [('\"', 'PUNCT'), ('I', 'PRON'), ('love', 'VERB... [] \n", 545 | "1 [('\"', 'PUNCT'), ('The', 'DET'), ('customer', ... [('New York', 'GPE')] \n", 546 | "2 [('\"', 'PUNCT'), ('The', 'DET'), ('quality', '... [('Prague', 'GPE')] \n", 547 | "3 [('\"', 'PUNCT'), ('I', 'PRON'), (\"'m\", 'AUX'),... [] \n", 548 | "4 [('\"', 'PUNCT'), ('The', 'DET'), ('user', 'NOU... [] " 549 | ], 550 | "text/html": [ 551 | "\n", 552 | "
\n", 553 | "
\n", 554 | "\n", 567 | "\n", 568 | " \n", 569 | " \n", 570 | " \n", 571 | " \n", 572 | " \n", 573 | " \n", 574 | " \n", 575 | " \n", 576 | " \n", 577 | " \n", 578 | " \n", 579 | " \n", 580 | " \n", 581 | " \n", 582 | " \n", 583 | " \n", 584 | " \n", 585 | " \n", 586 | " \n", 587 | " \n", 588 | " \n", 589 | " \n", 590 | " \n", 591 | " \n", 592 | " \n", 593 | " \n", 594 | " \n", 595 | " \n", 596 | " \n", 597 | " \n", 598 | " \n", 599 | " \n", 600 | " \n", 601 | " \n", 602 | " \n", 603 | " \n", 604 | " \n", 605 | " \n", 606 | " \n", 607 | " \n", 608 | " \n", 609 | " \n", 610 | " \n", 611 | " \n", 612 | " \n", 613 | " \n", 614 | " \n", 615 | " \n", 616 | " \n", 617 | " \n", 618 | " \n", 619 | " \n", 620 | "
Sentiment ExampleTokensFiltered TokensPOS TagsNamed Entities
0\"I love the new features of your product! It h...['\"', 'I', 'love', 'the', 'new', 'features', '...['\"', 'love', 'new', 'features', 'product', '!...[('\"', 'PUNCT'), ('I', 'PRON'), ('love', 'VERB...[]
1\"The customer support was exceptional in New Y...['\"', 'The', 'customer', 'support', 'was', 'ex...['\"', 'customer', 'support', 'exceptional', 'N...[('\"', 'PUNCT'), ('The', 'DET'), ('customer', ...[('New York', 'GPE')]
2\"The quality of your service exceeded my expec...['\"', 'The', 'quality', 'of', 'your', 'service...['\"', 'quality', 'service', 'exceeded', 'expec...[('\"', 'PUNCT'), ('The', 'DET'), ('quality', '...[('Prague', 'GPE')]
3\"I'm extremely satisfied with my purchase. The...['\"', 'I', \"'m\", 'extremely', 'satisfied', 'wi...['\"', 'extremely', 'satisfied', 'purchase', '....[('\"', 'PUNCT'), ('I', 'PRON'), (\"'m\", 'AUX'),...[]
4\"The user interface is intuitive and easy to n...['\"', 'The', 'user', 'interface', 'is', 'intui...['\"', 'user', 'interface', 'intuitive', 'easy'...[('\"', 'PUNCT'), ('The', 'DET'), ('user', 'NOU...[]
\n", 621 | "
\n", 622 | "
\n", 623 | "\n", 624 | "
\n", 625 | " \n", 633 | "\n", 634 | " \n", 674 | "\n", 675 | " \n", 699 | "
\n", 700 | "\n", 701 | "\n", 702 | "
\n", 703 | " \n", 714 | "\n", 715 | "\n", 804 | "\n", 805 | " \n", 827 | "
\n", 828 | "\n", 829 | "
\n", 830 | "
\n" 831 | ], 832 | "application/vnd.google.colaboratory.intrinsic+json": { 833 | "type": "dataframe", 834 | "variable_name": "processed_df", 835 | "summary": "{\n \"name\": \"processed_df\",\n \"rows\": 10,\n \"fields\": [\n {\n \"column\": \"Sentiment Example\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"\\\"I appreciate the personalized recommendations. It makes shopping more convenient.\\\"\\n\",\n \"\\\"The customer support was exceptional in New York. They resolved my issue promptly and professionally.\\\"\\n\",\n \"\\\"I had a positive experience shopping on your website. The checkout process was smooth.\\\"\\n\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Tokens\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"['\\\"', 'I', 'appreciate', 'the', 'personalized', 'recommendations', '.', 'It', 'makes', 'shopping', 'more', 'convenient', '.', '\\\"']\",\n \"['\\\"', 'The', 'customer', 'support', 'was', 'exceptional', 'in', 'New', 'York', '.', 'They', 'resolved', 'my', 'issue', 'promptly', 'and', 'professionally', '.', '\\\"']\",\n \"['\\\"', 'I', 'had', 'a', 'positive', 'experience', 'shopping', 'on', 'your', 'website', '.', 'The', 'checkout', 'process', 'was', 'smooth', '.', '\\\"']\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Filtered Tokens\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"['\\\"', 'appreciate', 'personalized', 'recommendations', '.', 'makes', 'shopping', 'convenient', '.', '\\\"']\",\n \"['\\\"', 'customer', 'support', 'exceptional', 'New', 'York', '.', 'resolved', 'issue', 'promptly', 'professionally', '.', '\\\"']\",\n \"['\\\"', 'positive', 'experience', 'shopping', 'website', '.', 'checkout', 'process', 'smooth', '.', '\\\"']\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"POS Tags\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 10,\n \"samples\": [\n \"[('\\\"', 'PUNCT'), ('I', 'PRON'), ('appreciate', 'VERB'), ('the', 'DET'), ('personalized', 'ADJ'), ('recommendations', 'NOUN'), ('.', 'PUNCT'), ('It', 'PRON'), ('makes', 'VERB'), ('shopping', 'VERB'), ('more', 'ADV'), ('convenient', 'ADJ'), ('.', 'PUNCT'), ('\\\"', 'PUNCT')]\",\n \"[('\\\"', 'PUNCT'), ('The', 'DET'), ('customer', 'NOUN'), ('support', 'NOUN'), ('was', 'AUX'), ('exceptional', 'ADJ'), ('in', 'ADP'), ('New', 'PROPN'), ('York', 'PROPN'), ('.', 'PUNCT'), ('They', 'PRON'), ('resolved', 'VERB'), ('my', 'PRON'), ('issue', 'NOUN'), ('promptly', 'ADV'), ('and', 'CCONJ'), ('professionally', 'ADV'), ('.', 'PUNCT'), ('\\\"', 'PUNCT')]\",\n \"[('\\\"', 'PUNCT'), ('I', 'PRON'), ('had', 'VERB'), ('a', 'DET'), ('positive', 'ADJ'), ('experience', 'NOUN'), ('shopping', 'VERB'), ('on', 'ADP'), ('your', 'PRON'), ('website', 'NOUN'), ('.', 'PUNCT'), ('The', 'DET'), ('checkout', 'NOUN'), ('process', 'NOUN'), ('was', 'AUX'), ('smooth', 'ADJ'), ('.', 'PUNCT'), ('\\\"', 'PUNCT')]\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Named Entities\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"[]\",\n \"[('New York', 'GPE')]\",\n \"[('Prague', 'GPE')]\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" 836 | } 837 | }, 838 | "metadata": {}, 839 | "execution_count": 7 840 | } 841 | ] 842 | } 843 | ], 844 | "metadata": { 845 | "kernelspec": { 846 | "display_name": "Python 2", 847 | "language": "python", 848 | "name": "python2" 849 | }, 850 | "language_info": { 851 | "codemirror_mode": { 852 | "name": "ipython", 853 | "version": 2 854 | }, 855 | "file_extension": ".py", 856 | "mimetype": "text/x-python", 857 | "name": "python", 858 | "nbconvert_exporter": "python", 859 | "pygments_lexer": "ipython2", 860 | "version": "2.7.13" 861 | }, 862 | "colab": { 863 | "provenance": [] 864 | } 865 | }, 866 | "nbformat": 4, 867 | "nbformat_minor": 0 868 | } -------------------------------------------------------------------------------- /Chapter 2/sentiment_examples.txt: -------------------------------------------------------------------------------- 1 | "I love the new features of your product! It has greatly improved my productivity." 2 | "The customer support was exceptional in New York. They resolved my issue promptly and professionally." 3 | "The quality of your service exceeded my expectations in Prague. I'm impressed!" 4 | "I'm extremely satisfied with my purchase. The product works flawlessly." 5 | "The user interface is intuitive and easy to navigate. Kudos to your design team!" 6 | "I had a positive experience shopping on your website. The checkout process was smooth." 7 | "Your company values customer feedback, and it shows in the improvements you've made." 8 | "The pricing is fair, and the value I get in return is fantastic." 9 | "I appreciate the personalized recommendations. It makes shopping more convenient." 10 | "The delivery was prompt, and the packaging was secure. Everything arrived in perfect condition." -------------------------------------------------------------------------------- /Chapter 3/Ch3_challenge.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "15EatDy5yxEI" 7 | }, 8 | "source": [ 9 | "#Analyze Customer Feedback\n", 10 | "\n", 11 | "In this exercise, we analyze customer feedback using spaCy and TextBlob." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "source": [ 17 | "#Exercise #1: Install Libraries and Modules\n", 18 | "\n" 19 | ], 20 | "metadata": { 21 | "id": "xfkLj86ioXxy" 22 | } 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": null, 27 | "metadata": { 28 | "id": "aQZzfNqQkdfW" 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "#Install Libraries and Modules\n", 33 | "\n", 34 | "\n", 35 | "\n", 36 | "\n" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "source": [ 42 | "#Exercise #2: Read in Feedback File and Create Output File for Results" 43 | ], 44 | "metadata": { 45 | "id": "TElJA9XWLMrm" 46 | } 47 | }, 48 | { 49 | "cell_type": "code", 50 | "source": [ 51 | "# EXERCISE - SCROLL DOWN TO THE \"START HERE\" SECTION BELOW.\n", 52 | "\n", 53 | "# Load the English NLP model\n", 54 | "nlp = spacy.load(\"en_core_web_sm\")\n", 55 | "\n", 56 | "\n", 57 | "#Define the path to the file containing feedback\n", 58 | "file_path = '/content/feedback_data.csv'\n", 59 | "\n", 60 | "# Read the file using open() with the specified parameters\n", 61 | "with open(file_path, \"r\", encoding=\"utf-8\") as file:\n", 62 | " # Step 2: Read the lines of the file\n", 63 | " feedback_data = file.readlines()\n", 64 | "\n", 65 | "# Add code to output feedback results to a file.\n", 66 | "output_csv_path = \"feedback_analysis_results.csv\"\n", 67 | "\n", 68 | "# Prepare CSV header\n", 69 | "csv_header = [\"Feedback Index\", \"Sentiment Polarity\", \"Sentiment Subjectivity\", \"Named Entities\", \"Preferred Contact Method\"]\n", 70 | "\n", 71 | "# Open CSV file for writing\n", 72 | "with open(output_csv_path, \"w\", newline=\"\", encoding=\"utf-8\") as csv_file:\n", 73 | " # Create CSV writer\n", 74 | " csv_writer = csv.writer(csv_file)\n", 75 | "\n", 76 | " # Write the header\n", 77 | " csv_writer.writerow(csv_header)\n", 78 | "\n", 79 | "#-----------------------------------------------------------------\n", 80 | "# START HERE\n", 81 | "\n", 82 | "# Process and analyze each feedback\n", 83 | "\n", 84 | "\n", 85 | "# Process the narrative using spaCy\n", 86 | "\n", 87 | "\n", 88 | "\n", 89 | "# Perform sentiment analysis using TextBlob\n", 90 | "\n", 91 | "\n", 92 | "\n", 93 | "# Extract named entities\n", 94 | "\n", 95 | "\n", 96 | "# Determine the preferred contact method\n", 97 | " preferred_contact_method = \"chat\" if \"email\" not in narrative.lower() else \"email\"\n", 98 | " print(f\"Preferred Contact Method: {preferred_contact_method}\")\n", 99 | "\n", 100 | "# Write the results to the CSV file\n", 101 | " csv_writer.writerow([idx, sentiment_polarity, sentiment_subjectivity, entities, preferred_contact_method])\n", 102 | "\n", 103 | "#-----------------------------------------------------------------" 104 | ], 105 | "metadata": { 106 | "id": "mjkLcZRHQk0t" 107 | }, 108 | "execution_count": null, 109 | "outputs": [] 110 | }, 111 | { 112 | "cell_type": "markdown", 113 | "metadata": { 114 | "id": "l7hiWdrojvK_" 115 | }, 116 | "source": [ 117 | "#Exercise #3: Exploratory Data Analysis on Customer Feedback" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": { 124 | "id": "c3VdXX05nCw0" 125 | }, 126 | "outputs": [], 127 | "source": [ 128 | "##Load results file into a Pandas Dataframe\n", 129 | "\n", 130 | "\n", 131 | "\n", 132 | "# Display the first rows of the DataFrame\n", 133 | "\n" 134 | ] 135 | }, 136 | { 137 | "cell_type": "code", 138 | "execution_count": null, 139 | "metadata": { 140 | "id": "CP2J1lkwnyYL" 141 | }, 142 | "outputs": [], 143 | "source": [ 144 | "df.info()" 145 | ] 146 | }, 147 | { 148 | "cell_type": "markdown", 149 | "source": [ 150 | "##Plot the Preferred Contact Method" 151 | ], 152 | "metadata": { 153 | "id": "HPcHpaS5nb2k" 154 | } 155 | }, 156 | { 157 | "cell_type": "code", 158 | "source": [ 159 | "# Example plot: Preferred Contact Method Count\n", 160 | "\n", 161 | "\n", 162 | "\n", 163 | "\n" 164 | ], 165 | "metadata": { 166 | "id": "1LKkuGxtfDOt" 167 | }, 168 | "execution_count": null, 169 | "outputs": [] 170 | }, 171 | { 172 | "cell_type": "markdown", 173 | "source": [ 174 | "##Plot the Sentiment Polarity and Sentiment Subjectivity" 175 | ], 176 | "metadata": { 177 | "id": "1ZN_mzufnh0S" 178 | } 179 | }, 180 | { 181 | "cell_type": "code", 182 | "source": [ 183 | "# Pair Plot: Pairwise relationships\n", 184 | "sns.pairplot(data=df[['Sentiment Polarity', 'Sentiment Subjectivity']],\n", 185 | " diag_kind='kde')\n", 186 | "plt.suptitle('Pair Plot: Pairwise relationships')\n", 187 | "plt.show()" 188 | ], 189 | "metadata": { 190 | "id": "WjYn8tEjgivQ" 191 | }, 192 | "execution_count": null, 193 | "outputs": [] 194 | } 195 | ], 196 | "metadata": { 197 | "colab": { 198 | "provenance": [] 199 | }, 200 | "kernelspec": { 201 | "display_name": "Python 3", 202 | "name": "python3" 203 | }, 204 | "language_info": { 205 | "name": "python" 206 | } 207 | }, 208 | "nbformat": 4, 209 | "nbformat_minor": 0 210 | } 211 | -------------------------------------------------------------------------------- /Chapter 3/Ch3_solution.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": { 6 | "id": "15EatDy5yxEI" 7 | }, 8 | "source": [ 9 | "#Analyze Customer Feedback\n", 10 | "\n", 11 | "In this exercise, we analyze customer feedback using spaCy and TextBlob." 12 | ] 13 | }, 14 | { 15 | "cell_type": "markdown", 16 | "source": [ 17 | "#Exercise #1: Install Libraries and Modules\n", 18 | "\n" 19 | ], 20 | "metadata": { 21 | "id": "xfkLj86ioXxy" 22 | } 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 1, 27 | "metadata": { 28 | "id": "aQZzfNqQkdfW" 29 | }, 30 | "outputs": [], 31 | "source": [ 32 | "# Install Libraries and Modules\n", 33 | "\n", 34 | "\n", 35 | "import spacy\n", 36 | "from textblob import TextBlob\n", 37 | "import pandas as pd\n", 38 | "import csv\n", 39 | "\n", 40 | "import seaborn as sns\n", 41 | "import matplotlib.pyplot as plt\n", 42 | "\n", 43 | "\n", 44 | "\n" 45 | ] 46 | }, 47 | { 48 | "cell_type": "markdown", 49 | "source": [ 50 | "#Exercise #2: Read in Feedback File and Create Output File for Results" 51 | ], 52 | "metadata": { 53 | "id": "TElJA9XWLMrm" 54 | } 55 | }, 56 | { 57 | "cell_type": "code", 58 | "source": [ 59 | "\n", 60 | "# Load the English NLP model\n", 61 | "nlp = spacy.load(\"en_core_web_sm\")\n", 62 | "\n", 63 | "\n", 64 | "#Define the path to the file containing feedback\n", 65 | "file_path = '/content/feedback_data.csv'\n", 66 | "\n", 67 | "# Read the file using open() with the specified parameters\n", 68 | "with open(file_path, \"r\", encoding=\"utf-8\") as file:\n", 69 | " # Step 2: Read the lines of the file\n", 70 | " feedback_data = file.readlines()\n", 71 | "\n", 72 | "# Add code to output feedback results to a file.\n", 73 | "output_csv_path = \"feedback_analysis_results.csv\"\n", 74 | "\n", 75 | "# Prepare CSV header\n", 76 | "csv_header = [\"Feedback Index\", \"Sentiment Polarity\", \"Sentiment Subjectivity\", \"Named Entities\", \"Preferred Contact Method\"]\n", 77 | "\n", 78 | "# Open CSV file for writing\n", 79 | "with open(output_csv_path, \"w\", newline=\"\", encoding=\"utf-8\") as csv_file:\n", 80 | " # Create CSV writer\n", 81 | " csv_writer = csv.writer(csv_file)\n", 82 | "\n", 83 | " # Write the header\n", 84 | " csv_writer.writerow(csv_header)\n", 85 | "\n", 86 | "#-----------------------------------------------------------------\n", 87 | "# SOLUTION\n", 88 | "\n", 89 | "# Process and analyze each feedback\n", 90 | " for idx, narrative in enumerate(feedback_data, start=1):\n", 91 | " print(f\"\\nProcessing Feedback {idx}:\")\n", 92 | " print(\"------------------------------\")\n", 93 | " print(narrative.strip())\n", 94 | "\n", 95 | "# Process the narrative using spaCy\n", 96 | " doc = nlp(narrative)\n", 97 | "\n", 98 | "# Perform sentiment analysis using TextBlob\n", 99 | " blob = TextBlob(narrative)\n", 100 | " sentiment_polarity = blob.sentiment.polarity\n", 101 | " sentiment_subjectivity = blob.sentiment.subjectivity\n", 102 | " print(f\"Sentiment: {sentiment_polarity} (Polarity), {sentiment_subjectivity} (Subjectivity)\")\n", 103 | "\n", 104 | "# Extract named entities\n", 105 | " entities = [(ent.text, ent.label_) for ent in doc.ents]\n", 106 | " print(\"Named Entities:\", entities)\n", 107 | "\n", 108 | "# Determine the preferred contact method\n", 109 | " preferred_contact_method = \"chat\" if \"email\" not in narrative.lower() else \"email\"\n", 110 | " print(f\"Preferred Contact Method: {preferred_contact_method}\")\n", 111 | "\n", 112 | "# Write the results to the CSV file\n", 113 | " csv_writer.writerow([idx, sentiment_polarity, sentiment_subjectivity, entities, preferred_contact_method])\n" 114 | ], 115 | "metadata": { 116 | "id": "mjkLcZRHQk0t", 117 | "colab": { 118 | "base_uri": "https://localhost:8080/" 119 | }, 120 | "outputId": "a718c770-f86d-4a13-e904-27f573393eb3" 121 | }, 122 | "execution_count": 2, 123 | "outputs": [ 124 | { 125 | "output_type": "stream", 126 | "name": "stdout", 127 | "text": [ 128 | "\n", 129 | "Processing Feedback 1:\n", 130 | "------------------------------\n", 131 | "Your products are excellent. I really love the quality! However, delivery to my location in Los Angeles was a bit slow. abbey@email.com\n", 132 | "Sentiment: 0.44166666666666665 (Polarity), 0.6666666666666666 (Subjectivity)\n", 133 | "Named Entities: [('Los Angeles', 'GPE')]\n", 134 | "Preferred Contact Method: email\n", 135 | "\n", 136 | "Processing Feedback 2:\n", 137 | "------------------------------\n", 138 | "The customer service team in New York was helpful in resolving my issue. I appreciate the assistance. brian@email.com\n", 139 | "Sentiment: 0.13636363636363635 (Polarity), 0.45454545454545453 (Subjectivity)\n", 140 | "Named Entities: [('New York', 'GPE')]\n", 141 | "Preferred Contact Method: email\n", 142 | "\n", 143 | "Processing Feedback 3:\n", 144 | "------------------------------\n", 145 | "The new features in the latest release are fantastic! They have greatly improved the user experience in San Francisco.\n", 146 | "Sentiment: 0.48409090909090907 (Polarity), 0.7511363636363636 (Subjectivity)\n", 147 | "Named Entities: [('San Francisco', 'GPE')]\n", 148 | "Preferred Contact Method: chat\n", 149 | "\n", 150 | "Processing Feedback 4:\n", 151 | "------------------------------\n", 152 | "The product didn't meet my expectations, and I'm disappointed. I hope you can address the issues in Chicago. My email address is emailme@email.com\n", 153 | "Sentiment: -0.75 (Polarity), 0.75 (Subjectivity)\n", 154 | "Named Entities: [('Chicago', 'GPE')]\n", 155 | "Preferred Contact Method: email\n" 156 | ] 157 | } 158 | ] 159 | }, 160 | { 161 | "cell_type": "markdown", 162 | "metadata": { 163 | "id": "l7hiWdrojvK_" 164 | }, 165 | "source": [ 166 | "#Exercise #3: Exploratory Data Analysis on Customer Feedback" 167 | ] 168 | }, 169 | { 170 | "cell_type": "code", 171 | "execution_count": 3, 172 | "metadata": { 173 | "id": "c3VdXX05nCw0", 174 | "colab": { 175 | "base_uri": "https://localhost:8080/", 176 | "height": 174 177 | }, 178 | "outputId": "7a630617-7e22-48ac-de31-514f2cd6a8cf" 179 | }, 180 | "outputs": [ 181 | { 182 | "output_type": "execute_result", 183 | "data": { 184 | "text/plain": [ 185 | " Feedback Index Sentiment Polarity Sentiment Subjectivity \\\n", 186 | "0 1 0.441667 0.666667 \n", 187 | "1 2 0.136364 0.454545 \n", 188 | "2 3 0.484091 0.751136 \n", 189 | "3 4 -0.750000 0.750000 \n", 190 | "\n", 191 | " Named Entities Preferred Contact Method \n", 192 | "0 [('Los Angeles', 'GPE')] email \n", 193 | "1 [('New York', 'GPE')] email \n", 194 | "2 [('San Francisco', 'GPE')] chat \n", 195 | "3 [('Chicago', 'GPE')] email " 196 | ], 197 | "text/html": [ 198 | "\n", 199 | "
\n", 200 | "
\n", 201 | "\n", 214 | "\n", 215 | " \n", 216 | " \n", 217 | " \n", 218 | " \n", 219 | " \n", 220 | " \n", 221 | " \n", 222 | " \n", 223 | " \n", 224 | " \n", 225 | " \n", 226 | " \n", 227 | " \n", 228 | " \n", 229 | " \n", 230 | " \n", 231 | " \n", 232 | " \n", 233 | " \n", 234 | " \n", 235 | " \n", 236 | " \n", 237 | " \n", 238 | " \n", 239 | " \n", 240 | " \n", 241 | " \n", 242 | " \n", 243 | " \n", 244 | " \n", 245 | " \n", 246 | " \n", 247 | " \n", 248 | " \n", 249 | " \n", 250 | " \n", 251 | " \n", 252 | " \n", 253 | " \n", 254 | " \n", 255 | " \n", 256 | " \n", 257 | " \n", 258 | " \n", 259 | "
Feedback IndexSentiment PolaritySentiment SubjectivityNamed EntitiesPreferred Contact Method
010.4416670.666667[('Los Angeles', 'GPE')]email
120.1363640.454545[('New York', 'GPE')]email
230.4840910.751136[('San Francisco', 'GPE')]chat
34-0.7500000.750000[('Chicago', 'GPE')]email
\n", 260 | "
\n", 261 | "
\n", 262 | "\n", 263 | "
\n", 264 | " \n", 272 | "\n", 273 | " \n", 313 | "\n", 314 | " \n", 338 | "
\n", 339 | "\n", 340 | "\n", 341 | "
\n", 342 | " \n", 353 | "\n", 354 | "\n", 443 | "\n", 444 | " \n", 466 | "
\n", 467 | "\n", 468 | "
\n", 469 | "
\n" 470 | ], 471 | "application/vnd.google.colaboratory.intrinsic+json": { 472 | "type": "dataframe", 473 | "variable_name": "df", 474 | "summary": "{\n \"name\": \"df\",\n \"rows\": 4,\n \"fields\": [\n {\n \"column\": \"Feedback Index\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 1,\n \"min\": 1,\n \"max\": 4,\n \"num_unique_values\": 4,\n \"samples\": [\n 2,\n 4,\n 1\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sentiment Polarity\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.5733392193304117,\n \"min\": -0.75,\n \"max\": 0.484090909090909,\n \"num_unique_values\": 4,\n \"samples\": [\n 0.1363636363636363,\n -0.75,\n 0.4416666666666666\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Sentiment Subjectivity\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0.13974256983521738,\n \"min\": 0.4545454545454545,\n \"max\": 0.7511363636363636,\n \"num_unique_values\": 4,\n \"samples\": [\n 0.4545454545454545,\n 0.75,\n 0.6666666666666666\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Named Entities\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"[('New York', 'GPE')]\",\n \"[('Chicago', 'GPE')]\",\n \"[('Los Angeles', 'GPE')]\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Preferred Contact Method\",\n \"properties\": {\n \"dtype\": \"string\",\n \"num_unique_values\": 2,\n \"samples\": [\n \"chat\",\n \"email\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" 475 | } 476 | }, 477 | "metadata": {}, 478 | "execution_count": 3 479 | } 480 | ], 481 | "source": [ 482 | "##Load results file into a Pandas Dataframe\n", 483 | "\n", 484 | "# Load data into a Pandas DataFrame\n", 485 | "df = pd.read_csv('/content/feedback_analysis_results.csv')\n", 486 | "\n", 487 | "# Display the DataFrame\n", 488 | "df.head()\n" 489 | ] 490 | }, 491 | { 492 | "cell_type": "code", 493 | "execution_count": 4, 494 | "metadata": { 495 | "id": "CP2J1lkwnyYL", 496 | "colab": { 497 | "base_uri": "https://localhost:8080/" 498 | }, 499 | "outputId": "934609e1-2538-49bf-b586-b03f4684688e" 500 | }, 501 | "outputs": [ 502 | { 503 | "output_type": "stream", 504 | "name": "stdout", 505 | "text": [ 506 | "\n", 507 | "RangeIndex: 4 entries, 0 to 3\n", 508 | "Data columns (total 5 columns):\n", 509 | " # Column Non-Null Count Dtype \n", 510 | "--- ------ -------------- ----- \n", 511 | " 0 Feedback Index 4 non-null int64 \n", 512 | " 1 Sentiment Polarity 4 non-null float64\n", 513 | " 2 Sentiment Subjectivity 4 non-null float64\n", 514 | " 3 Named Entities 4 non-null object \n", 515 | " 4 Preferred Contact Method 4 non-null object \n", 516 | "dtypes: float64(2), int64(1), object(2)\n", 517 | "memory usage: 288.0+ bytes\n" 518 | ] 519 | } 520 | ], 521 | "source": [ 522 | "df.info()" 523 | ] 524 | }, 525 | { 526 | "cell_type": "markdown", 527 | "source": [ 528 | "##Plot the Preferred Contact Method" 529 | ], 530 | "metadata": { 531 | "id": "HPcHpaS5nb2k" 532 | } 533 | }, 534 | { 535 | "cell_type": "code", 536 | "source": [ 537 | "# Example plot: Preferred Contact Method Count\n", 538 | "plt.figure(figsize=(10, 6))\n", 539 | "sns.countplot(data=df, x='Preferred Contact Method', palette='muted')\n", 540 | "plt.title('Preferred Contact Method Count')\n", 541 | "plt.xlabel('Preferred Contact Method')\n", 542 | "plt.ylabel('Count')\n", 543 | "plt.show()" 544 | ], 545 | "metadata": { 546 | "id": "1LKkuGxtfDOt", 547 | "colab": { 548 | "base_uri": "https://localhost:8080/", 549 | "height": 671 550 | }, 551 | "outputId": "f637ee60-99eb-4d6d-9ff7-ca6e7f7f3929" 552 | }, 553 | "execution_count": 6, 554 | "outputs": [ 555 | { 556 | "output_type": "stream", 557 | "name": "stderr", 558 | "text": [ 559 | ":3: FutureWarning: \n", 560 | "\n", 561 | "Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `x` variable to `hue` and set `legend=False` for the same effect.\n", 562 | "\n", 563 | " sns.countplot(data=df, x='Preferred Contact Method', palette='muted')\n" 564 | ] 565 | }, 566 | { 567 | "output_type": "display_data", 568 | "data": { 569 | "text/plain": [ 570 | "
" 571 | ], 572 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFVUlEQVR4nO3deVhV1f7H8c9xOoACTghIKDik4hxqoSVaJJkV1C2nSi21LM05b1bmVFGZU2WZdRXrStrkcNUsxaFSyjSxHHNCrQBtEBQTlbN/f/Rwfh0BFxB6MN6v5znP7ay99trfvQ9X/Lj2XsdmWZYlAAAAAECByrm7AAAAAAAo7QhOAAAAAGBAcAIAAAAAA4ITAAAAABgQnAAAAADAgOAEAAAAAAYEJwAAAAAwIDgBAAAAgAHBCQAAAAAMCE4AcIlMmTJF9erVU/ny5dWqVSt3l2MUHx8vm82mlJQUd5eCIgoJCdFtt912yY+zfv162Ww2rV+//pIfCwBKG4ITgDIjNxjkvjw8PHT11VdryJAhSk9PL9FjffbZZxozZow6dOigefPm6fnnny/R8UuD5ORk3XfffQoODpbdblf16tUVFRWlefPmKScn55Idd9OmTZowYYJOnDhxyY4hSQkJCZoxY0ah+4eEhMhmsykqKirf7W+99ZbzZ2/Lli1FrmfXrl2aMGHCFRVsDxw4oIcfflj16tWTh4eHfHx81KFDB82cOVN//PGHu8uTJL3++uuKj493dxkArgAV3F0AAFxukyZNUmhoqM6cOaMvv/xSb7zxhlauXKkdO3bIy8urRI6xdu1alStXTv/5z39UqVKlEhmzNHn77bc1aNAg+fv76/7771fDhg118uRJJSYmqn///kpNTdWTTz55SY69adMmTZw4Uf369VPVqlUvyTGkP4PTjh07NHz48ELv4+HhoXXr1iktLU0BAQEu2xYsWCAPDw+dOXOmWPXs2rVLEydOVKdOnRQSElKsMS6nFStW6J577pHdblefPn3UrFkznT17Vl9++aUef/xx7dy5U3PmzHF3mXr99ddVs2ZN9evXz92lACjlCE4AypyuXbuqTZs2kqQBAwaoRo0amjZtmpYuXapevXrlu09WVpYqV65c6GMcO3ZMnp6eJRqaTp8+nW+wO3/+vBwOx2ULaF999ZUGDRqkiIgIrVy5Ut7e3s5tw4cP15YtW7Rjx47LUktp06FDB33zzTdatGiRhg0b5mz/8ccf9cUXX+jOO+/URx995MYKL49Dhw6pZ8+eqlu3rtauXavAwEDntsGDB2v//v1asWKFGysEgKLjVj0AZd6NN94o6c+/7ElSv379VKVKFR04cEC33nqrvL29de+990qSHA6HZsyYoaZNm8rDw0P+/v56+OGH9fvvvzvHs9lsmjdvnrKyspy3Zv31VqD//ve/Cg8Pl6enp6pXr66ePXvq6NGjLjV16tRJzZo109atW9WxY0d5eXnpySefVEpKimw2m15++WXNmDFD9evXl91u165duyRJe/bs0d13363q1avLw8NDbdq00bJly/Kc886dO3XjjTfK09NTV111lZ599lk5HI5CXa+JEyfKZrNpwYIFLqEpV5s2bVz+9T4rK0ujRo1y3tLXqFEjvfzyy7Isy2U/m82mIUOGaMmSJWrWrJnsdruaNm2qVatWOftMmDBBjz/+uCQpNDTUeX1zb1+bN2+ebrzxRtWqVUt2u11hYWF644038j2PTz75RJGRkfL29paPj4/atm2rhIQE5/VfsWKFDh8+7DxGYWZ5PDw8dNdddznHyfXee++pWrVqio6Oznc/0+cWHx+ve+65R5LUuXNnZ00XPmv05Zdfql27dvLw8FC9evX0zjvv5DnWwYMHdc8996h69ery8vLSddddl2+I+fHHHxUbG6vKlSurVq1aGjFihLKzs43XQJJeeuklnTp1Sv/5z39cQlOuBg0auATL8+fPa/Lkyc6f55CQED355JN5jmez2TRhwoQ844WEhLj8zOXelrtx40aNHDlSfn5+qly5su68804dP37cZb+dO3dqw4YNzmvaqVOnQp0jgLKHGScAZd6BAwckSTVq1HC2nT9/XtHR0br++uv18ssvO2d6Hn74YcXHx+uBBx7Q0KFDdejQIb322mvatm2bNm7cqIoVK+rdd9/VnDlztHnzZr399tuSpPbt20uSnnvuOY0bN07du3fXgAEDdPz4cb366qvq2LGjtm3b5nLr2a+//qquXbuqZ8+euu++++Tv7+/cNm/ePJ05c0YPPfSQ8/minTt3qkOHDgoKCtITTzyhypUr6/3331dsbKw++ugj3XnnnZKktLQ0de7cWefPn3f2mzNnjjw9PY3X6vTp00pMTFTHjh1Vp04dY3/LsnTHHXdo3bp16t+/v1q1aqVPP/1Ujz/+uH766SdNnz7dpf+XX36pjz/+WI8++qi8vb31yiuv6F//+peOHDmiGjVq6K677tIPP/yg9957T9OnT1fNmjUlSX5+fpKkN954Q02bNtUdd9yhChUq6H//+58effRRORwODR482Hmc+Ph4Pfjgg2ratKnGjh2rqlWratu2bVq1apV69+6tp556ShkZGfrxxx+dNVapUsV4vpLUu3dvdenSRQcOHFD9+vUl/Xnb3913362KFSvm6V+Yz61jx44aOnSoXnnlFT355JNq0qSJJDn/V5L279+vu+++W/3791ffvn01d+5c9evXT+Hh4WratKkkKT09Xe3bt9fp06c1dOhQ1ahRQ/Pnz9cdd9yhDz/80Pkz8scff+imm27SkSNHNHToUNWuXVvvvvuu1q5dW6hr8L///U/16tVz/tybDBgwQPPnz9fdd9+tUaNG6euvv1ZcXJx2796txYsXF2qM/Dz22GOqVq2axo8fr5SUFM2YMUNDhgzRokWLJEkzZszQY489pipVquipp56SJJf/nwGACwsAyoh58+ZZkqw1a9ZYx48ft44ePWotXLjQqlGjhuXp6Wn9+OOPlmVZVt++fS1J1hNPPOGy/xdffGFJshYsWODSvmrVqjztffv2tSpXruzSLyUlxSpfvrz13HPPubR///33VoUKFVzaIyMjLUnW7NmzXfoeOnTIkmT5+PhYx44dc9l20003Wc2bN7fOnDnjbHM4HFb79u2thg0bOtuGDx9uSbK+/vprZ9uxY8csX19fS5J16NChAq/h9u3bLUnWsGHDCuzzV0uWLLEkWc8++6xL+913323ZbDZr//79zjZJVqVKlVzaco/36quvOtumTJlSYJ2nT5/O0xYdHW3Vq1fP+f7EiROWt7e3de2111p//PGHS1+Hw+H8727dull169Yt1HlalmXVrVvX6tatm3X+/HkrICDAmjx5smVZlrVr1y5LkrVhwwbnz+A333zj3K+wn9sHH3xgSbLWrVuX77ElWZ9//rmz7dixY5bdbrdGjRrlbMv97L/44gtn28mTJ63Q0FArJCTEysnJsSzLsmbMmGFJst5//31nv6ysLKtBgwYF1pArIyPDkmTFxMSYL5plWcnJyZYka8CAAS7to0ePtiRZa9eudbZJssaPH5/v+fft29f5Pvc6R0VFuXymI0aMsMqXL2+dOHHC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atu2rUJCQhQTE6O1a9eqc+fOkiSHw6FJkybpqquukt1uV6tWrbRq1ao85/Lxxx+rc+fO8vLyUsuWLZWUlCTpz9mZBx54QBkZGc4ZvwkTJkiS3n33XbVp00be3t4KCAhQ7969dezYMZc6d+7cqdtuu00+Pj7y9vbWDTfcoAMHDmjChAmaP3++li5d6hx3/fr1BZ7vNddco+DgYH388cfOto8//lh16tRR69atXfo6HA7FxcUpNDRUnp6eatmypT788EPn+eZem2rVquWZrXI4HBozZoyqV6+ugIAA57nmOnLkiGJiYlSlShX5+Pioe/fuSk9Pd+nzwgsvyN/fX97e3urfv7/OnDlT4HkBwJWK4AQAVxBPT0+XWZ3ExETt3btXq1ev1vLly3Xu3DlFR0fL29tbX3zxhTZu3KgqVarolltu0dmzZzV69GjNmzdPkpSamqrU1FRJ0oIFC/TMM8/oueee0+7du/X8889r3Lhxmj9/vsvxn3jiCQ0bNky7d+9WdHR0sWqQpKlTpyo+Pl5z587Vl19+qd9++02LFy++6LkvWLBAjRo1UkxMTJ5tNptNvr6+kqSZM2dq6tSpevnll/Xdd98pOjpad9xxh/bt2+eyz1NPPaXRo0crOTlZV199tXr16qXz58+rffv2mjFjhnx8fJzXaPTo0ZL+nGWbPHmytm/friVLliglJcUlhPz000/q2LGj7Ha71q5dq61bt+rBBx/U+fPnNXr0aHXv3t05i5iamqr27dtf9JwffPBB5+clSXPnztUDDzyQp19cXJzeeecdzZ49Wzt37tSIESN03333acOGDQoODtZHH30kSdq7d69SU1M1c+ZM577z589X5cqV9fXXX+ull17SpEmTtHr1akl/hqqYmBj99ttv2rBhg1avXq2DBw+qR48ezv3ff/99TZgwQc8//7y2bNmiwMBAl9ANAP8YFgCgVOrbt68VExNjWZZlORwOa/Xq1ZbdbrdGjx7t3O7v729lZ2c793n33XetRo0aWQ6Hw9mWnZ1teXp6Wp9++qllWZa1ePFi68I//uvXr28lJCS4tE2ePNmKiIiwLMuyDh06ZEmyZsyYkafG4tQQGBhovfTSS87t586ds6666irn+eanSZMm1h133FHg9ly1a9e2nnvuOZe2tm3bWo8++qjLubz99tvO7Tt37rQkWbt377Ysy7LmzZtn+fr6Go/1zTffWJKskydPWpZlWWPHjrVCQ0Ots2fP5tv/r5/pxeT2O3bsmGW3262UlBQrJSXF8vDwsI4fP27FxMRYffv2tSzLss6cOWN5eXlZmzZtchmjf//+Vq9evSzLsqx169ZZkqzff//dpU9kZKR1/fXXu7S1bdvW+ve//21ZlmV99tlnVvny5a0jR444t+deq82bN1uWZVkRERHOa5vr2muvtVq2bGk8TwC4klRwY2YDABgsX75cVapU0blz5+RwONS7d2+XW6maN2+uSpUqOd9v375d+/fvl7e3t8s4Z86ccT7bdKGsrCwdOHBA/fv318CBA53t58+fd87i5GrTpk2e/YtaQ0ZGhlJTU3Xttdc6t1WoUEFt2rS56O16F9uWKzMzUz///LM6dOjg0t6hQwdt377dpa1FixbO/w4MDJQkHTt2TI0bNy5w/K1bt2rChAnavn27fv/9dzkcDkl/3s4WFham5ORk3XDDDapYsaKx1sLw8/NTt27dFB8fL8uy1K1bN9WsWdOlz/79+3X69GndfPPNLu1nz57Nc0tffv56HaQ/r0Xu7Ye7d+9WcHCwgoODndvDwsJUtWpV7d69W23bttXu3bvzLGIRERGhdevWFelcAaC0IzgBQCnWuXNnvfHGG6pUqZJq166tChVc/9iuXLmyy/tTp04pPDxcCxYsyDOWn59fvsc4deqUJOmtt95yCTOSVL58+Yser6RqKIyrr75ae/bsKfb+F/pruMl91is3COUnKytL0dHRio6O1oIFC+Tn56cjR44oOjraeQuip6dnidWX68EHH9SQIUMkSbNmzcqzPffzW7FihYKCgly2FWbhjwtDns1mu+h1AICyiuAEAKVY5cqV1aBBg0L3v+aaa7Ro0SLVqlVLPj4+hdrH399ftWvX1sGDB3XvvfcWt9Qi1RAYGKivv/5aHTt2lPTn7NbWrVt1zTXXFDhu79691bNnTy1dujTPc06WZSkzM1O+vr6qXbu2Nm7cqMjISOf2jRs3ql27doU+h0qVKiknJ8elbc+ePfr111/1wgsvOGdgtmzZ4tKnRYsWmj9/vs6dO5fvrFN+45rkPhtms9mcz5X9VVhYmOx2u44cOeJyzhceV1KRj92kSRMdPXpUR48edZ7zrl27dOLECYWFhTn7fP311+rTp49zv6+++qpIxwGAKwGLQwDAP8i9996rmjVrKiYmRl988YUOHTqk9evXa+jQofrxxx8L3G/ixImKi4vTK6+8oh9++EHff/+95s2bp2nTpl2SGoYNG6YXXnhBS5Ys0Z49e/Too48av2Ooe/fu6tGjh3r16uVciODw4cNavny5oqKinLeGPf7443rxxRe1aNEi7d27V0888YSSk5M1bNiwQp9DSEiITp06pcTERP3yyy86ffq06tSpo0qVKunVV1/VwYMHtWzZMk2ePNllvyFDhigzM1M9e/bUli1btG/fPr377rvau3evc9zvvvtOe/fu1S+//JLvku4XKl++vHbv3q1du3blmQGUJG9vb40ePVojRozQ/PnzdeDAAX377bd69dVXnYt71K1bVzabTcuXL9fx48eds1QmUVFRat68ue699159++232rx5s/r06aPIyEjnbZvDhg3T3LlzNW/ePP3www8aP368du7cWajxAeBKQnACgH8QLy8vff7556pTp47uuusuNWnSxLk89MVmoAYMGKC3335b8+bNU/PmzRUZGan4+HiFhoZekhpGjRql+++/X3379lVERIS8vb115513XnRcm82mhIQETZs2TUuWLFFkZKRatGihCRMmKCYmxjkbM3ToUI0cOVKjRo1S8+bNtWrVKi1btkwNGzYs9Dm0b99egwYNUo8ePeTn56eXXnpJfn5+io+P1wcffKCwsDC98MILevnll132q1GjhtauXatTp04pMjJS4eHheuutt5yzTwMHDlSjRo3Upk0b+fn5aePGjYWqx8fH56Kf3+TJkzVu3DjFxcWpSZMmuuWWW7RixQrn5xcUFKSJEyfqiSeekL+/v/PWPxObzaalS5eqWrVq6tixo6KiolSvXj0tWrTI2adHjx4aN26cxowZo/DwcB0+fFiPPPJIocYHgCuJzSrM07YAAAAAUIYx4wQAAAAABgQnAAAAADAgOAEAAACAAcEJAAAAAAwITgAAAABgQHACAAAAAAOCEwAAAAAYEJwAAAAAwIDgBAAAAAAGBCcAAAAAMCA4AQAAAIDB/wHDq7mbCohUXwAAAABJRU5ErkJggg==\n" 573 | }, 574 | "metadata": {} 575 | } 576 | ] 577 | }, 578 | { 579 | "cell_type": "markdown", 580 | "source": [ 581 | "##Plot the Sentiment Polarity and Sentiment Subjectivity" 582 | ], 583 | "metadata": { 584 | "id": "1ZN_mzufnh0S" 585 | } 586 | }, 587 | { 588 | "cell_type": "code", 589 | "source": [ 590 | "# Pair Plot: Pairwise relationships\n", 591 | "sns.pairplot(data=df[['Sentiment Polarity', 'Sentiment Subjectivity']],\n", 592 | " diag_kind='kde')\n", 593 | "plt.suptitle('Pair Plot: Pairwise relationships')\n", 594 | "plt.show()" 595 | ], 596 | "metadata": { 597 | "id": "WjYn8tEjgivQ", 598 | "colab": { 599 | "base_uri": "https://localhost:8080/", 600 | "height": 515 601 | }, 602 | "outputId": "4b506cdc-4ce0-4f16-bf15-a5234f39da97" 603 | }, 604 | "execution_count": 7, 605 | "outputs": [ 606 | { 607 | "output_type": "display_data", 608 | "data": { 609 | "text/plain": [ 610 | "
" 611 | ], 612 | "image/png": "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\n" 613 | }, 614 | "metadata": {} 615 | } 616 | ] 617 | } 618 | ], 619 | "metadata": { 620 | "colab": { 621 | "provenance": [] 622 | }, 623 | "kernelspec": { 624 | "display_name": "Python 3", 625 | "name": "python3" 626 | }, 627 | "language_info": { 628 | "name": "python" 629 | } 630 | }, 631 | "nbformat": 4, 632 | "nbformat_minor": 0 633 | } 634 | -------------------------------------------------------------------------------- /Chapter 3/feedback_data.csv: -------------------------------------------------------------------------------- 1 | Your products are excellent. I really love the quality! However, delivery to my location in Los Angeles was a bit slow. abbey@email.com 2 | The customer service team in New York was helpful in resolving my issue. I appreciate the assistance. brian@email.com 3 | The new features in the latest release are fantastic! They have greatly improved the user experience in San Francisco. 4 | The product didn't meet my expectations, and I'm disappointed. I hope you can address the issues in Chicago. My email address is emailme@email.com 5 | -------------------------------------------------------------------------------- /Chapter 4/ch4_feedback_data.csv: -------------------------------------------------------------------------------- 1 | Your products are excellent. I really love the quality! However, delivery to my location in Los Angeles was a bit slow. abbey@email.com 2 | The customer service team in New York was helpful in resolving my issue. I appreciate the assistance. brian@email.com 3 | The new features in the latest release are fantastic! They have greatly improved the user experience in San Francisco. 4 | The product didn't meet my expectations, and I'm disappointed. I hope you can address the issues in Chicago. My email address is emailme@email.com 5 | Your products are not good. I really don't like the quality! However, delivery to my location in Los Angeles was a bit slow. abbey@email.com 6 | The customer service team in San Francisco was not helpful in resolving my issue. But, I appreciate the assistance. brian@email.com 7 | The new features in the latest release are not fantastic! They have not greatly improved the user experience in San Francisco. 8 | The product didn't meet my expectations, and I'm disappointed. I hope you can address the issues in London. My email address is emailme@email.com 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | LinkedIn Learning Exercise Files License Agreement 2 | ================================================== 3 | 4 | This License Agreement (the "Agreement") is a binding legal agreement 5 | between you (as an individual or entity, as applicable) and LinkedIn 6 | Corporation (“LinkedIn”). By downloading or using the LinkedIn Learning 7 | exercise files in this repository (“Licensed Materials”), you agree to 8 | be bound by the terms of this Agreement. If you do not agree to these 9 | terms, do not download or use the Licensed Materials. 10 | 11 | 1. License. 12 | - a. Subject to the terms of this Agreement, LinkedIn hereby grants LinkedIn 13 | members during their LinkedIn Learning subscription a non-exclusive, 14 | non-transferable copyright license, for internal use only, to 1) make a 15 | reasonable number of copies of the Licensed Materials, and 2) make 16 | derivative works of the Licensed Materials for the sole purpose of 17 | practicing skills taught in LinkedIn Learning courses. 18 | - b. Distribution. Unless otherwise noted in the Licensed Materials, subject 19 | to the terms of this Agreement, LinkedIn hereby grants LinkedIn members 20 | with a LinkedIn Learning subscription a non-exclusive, non-transferable 21 | copyright license to distribute the Licensed Materials, except the 22 | Licensed Materials may not be included in any product or service (or 23 | otherwise used) to instruct or educate others. 24 | 25 | 2. Restrictions and Intellectual Property. 26 | - a. You may not to use, modify, copy, make derivative works of, publish, 27 | distribute, rent, lease, sell, sublicense, assign or otherwise transfer the 28 | Licensed Materials, except as expressly set forth above in Section 1. 29 | - b. Linkedin (and its licensors) retains its intellectual property rights 30 | in the Licensed Materials. Except as expressly set forth in Section 1, 31 | LinkedIn grants no licenses. 32 | - c. You indemnify LinkedIn and its licensors and affiliates for i) any 33 | alleged infringement or misappropriation of any intellectual property rights 34 | of any third party based on modifications you make to the Licensed Materials, 35 | ii) any claims arising from your use or distribution of all or part of the 36 | Licensed Materials and iii) a breach of this Agreement. You will defend, hold 37 | harmless, and indemnify LinkedIn and its affiliates (and our and their 38 | respective employees, shareholders, and directors) from any claim or action 39 | brought by a third party, including all damages, liabilities, costs and 40 | expenses, including reasonable attorneys’ fees, to the extent resulting from, 41 | alleged to have resulted from, or in connection with: (a) your breach of your 42 | obligations herein; or (b) your use or distribution of any Licensed Materials. 43 | 44 | 3. Open source. This code may include open source software, which may be 45 | subject to other license terms as provided in the files. 46 | 47 | 4. Warranty Disclaimer. LINKEDIN PROVIDES THE LICENSED MATERIALS ON AN “AS IS” 48 | AND “AS AVAILABLE” BASIS. LINKEDIN MAKES NO REPRESENTATION OR WARRANTY, 49 | WHETHER EXPRESS OR IMPLIED, ABOUT THE LICENSED MATERIALS, INCLUDING ANY 50 | REPRESENTATION THAT THE LICENSED MATERIALS WILL BE FREE OF ERRORS, BUGS OR 51 | INTERRUPTIONS, OR THAT THE LICENSED MATERIALS ARE ACCURATE, COMPLETE OR 52 | OTHERWISE VALID. TO THE FULLEST EXTENT PERMITTED BY LAW, LINKEDIN AND ITS 53 | AFFILIATES DISCLAIM ANY IMPLIED OR STATUTORY WARRANTY OR CONDITION, INCLUDING 54 | ANY IMPLIED WARRANTY OR CONDITION OF MERCHANTABILITY OR FITNESS FOR A 55 | PARTICULAR PURPOSE, AVAILABILITY, SECURITY, TITLE AND/OR NON-INFRINGEMENT. 56 | YOUR USE OF THE LICENSED MATERIALS IS AT YOUR OWN DISCRETION AND RISK, AND 57 | YOU WILL BE SOLELY RESPONSIBLE FOR ANY DAMAGE THAT RESULTS FROM USE OF THE 58 | LICENSED MATERIALS TO YOUR COMPUTER SYSTEM OR LOSS OF DATA. NO ADVICE OR 59 | INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM US OR THROUGH OR 60 | FROM THE LICENSED MATERIALS WILL CREATE ANY WARRANTY OR CONDITION NOT 61 | EXPRESSLY STATED IN THESE TERMS. 62 | 63 | 5. Limitation of Liability. LINKEDIN SHALL NOT BE LIABLE FOR ANY INDIRECT, 64 | INCIDENTAL, SPECIAL, PUNITIVE, CONSEQUENTIAL OR EXEMPLARY DAMAGES, INCLUDING 65 | BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER 66 | INTANGIBLE LOSSES . IN NO EVENT WILL LINKEDIN'S AGGREGATE LIABILITY TO YOU 67 | EXCEED $100. THIS LIMITATION OF LIABILITY SHALL: 68 | - i. APPLY REGARDLESS OF WHETHER (A) YOU BASE YOUR CLAIM ON CONTRACT, TORT, 69 | STATUTE, OR ANY OTHER LEGAL THEORY, (B) WE KNEW OR SHOULD HAVE KNOWN ABOUT 70 | THE POSSIBILITY OF SUCH DAMAGES, OR (C) THE LIMITED REMEDIES PROVIDED IN THIS 71 | SECTION FAIL OF THEIR ESSENTIAL PURPOSE; AND 72 | - ii. NOT APPLY TO ANY DAMAGE THAT LINKEDIN MAY CAUSE YOU INTENTIONALLY OR 73 | KNOWINGLY IN VIOLATION OF THESE TERMS OR APPLICABLE LAW, OR AS OTHERWISE 74 | MANDATED BY APPLICABLE LAW THAT CANNOT BE DISCLAIMED IN THESE TERMS. 75 | 76 | 6. Termination. This Agreement automatically terminates upon your breach of 77 | this Agreement or termination of your LinkedIn Learning subscription. On 78 | termination, all licenses granted under this Agreement will terminate 79 | immediately and you will delete the Licensed Materials. Sections 2-7 of this 80 | Agreement survive any termination of this Agreement. LinkedIn may discontinue 81 | the availability of some or all of the Licensed Materials at any time for any 82 | reason. 83 | 84 | 7. Miscellaneous. This Agreement will be governed by and construed in 85 | accordance with the laws of the State of California without regard to conflict 86 | of laws principles. The exclusive forum for any disputes arising out of or 87 | relating to this Agreement shall be an appropriate federal or state court 88 | sitting in the County of Santa Clara, State of California. If LinkedIn does 89 | not act to enforce a breach of this Agreement, that does not mean that 90 | LinkedIn has waived its right to enforce this Agreement. The Agreement does 91 | not create a partnership, agency relationship, or joint venture between the 92 | parties. Neither party has the power or authority to bind the other or to 93 | create any obligation or responsibility on behalf of the other. You may not, 94 | without LinkedIn’s prior written consent, assign or delegate any rights or 95 | obligations under these terms, including in connection with a change of 96 | control. Any purported assignment and delegation shall be ineffective. The 97 | Agreement shall bind and inure to the benefit of the parties, their respective 98 | successors and permitted assigns. If any provision of the Agreement is 99 | unenforceable, that provision will be modified to render it enforceable to the 100 | extent possible to give effect to the parties’ intentions and the remaining 101 | provisions will not be affected. This Agreement is the only agreement between 102 | you and LinkedIn regarding the Licensed Materials, and supersedes all prior 103 | agreements relating to the Licensed Materials. 104 | 105 | Last Updated: March 2019 106 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | Copyright 2024 LinkedIn Corporation 2 | All Rights Reserved. 3 | 4 | Licensed under the LinkedIn Learning Exercise File License (the "License"). 5 | See LICENSE in the project root for license information. 6 | 7 | Please note, this project may automatically load third party code from external 8 | repositories (for example, NPM modules, Composer packages, or other dependencies). 9 | If so, such third party code may be subject to other license terms than as set 10 | forth above. In addition, such third party code may also depend on and load 11 | multiple tiers of dependencies. Please review the applicable licenses of the 12 | additional dependencies. 13 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Advanced NLP with Python for Machine Learning 2 | This is the repository for the LinkedIn Learning course `Advanced NLP with Python for Machine Learning`. The full course is available from [LinkedIn Learning][lil-course-url]. 3 | 4 | ![lil-thumbnail-url] 5 | 6 | This course is for anyone who wants to learn more advanced NLP methods. Instructor Gwendolyn Stripling, PhD, begins with a look at the fundamental concepts and principles of NLP, including the evolution and significance of natural language processing. She then reviews some NLP and Python basics—and introduces the NLP library spaCy—before jumping into more modern techniques and advancements in natural language processing using Transformer Models like GPT and BERT. Methods such as supervised fine-tuning, parameter efficient fine-tuning (PEFT), and retrieval-augmented generation (RAG) give you the foundational knowledge you need to improve large language model (LLM) performance. Learn the ways you can apply NLP in your applications and day-to-day, including how to analyze customer sentiments Each chapter ends with a challenge and solution, so you can test your knowledge as you go. 7 | 8 | 9 | ### Instructor 10 | 11 | ![avatar] 12 | 13 | Gwendolyn Stripling 14 | 15 | Machine Learning and Artificial Intelligence Content Developer 16 | 17 | 18 | Check out my other courses on [LinkedIn Learning](https://www.linkedin.com/learning/instructors/gwendolyn-stripling?u=104). 19 | 20 | 21 | [0]: # (Replace these placeholder URLs with actual course URLs) 22 | 23 | [lil-course-url]: https://www.linkedin.com/learning/advanced-nlp-with-python-for-machine-learning-revision-2024-q2 24 | [lil-thumbnail-url]: https://media.licdn.com/dms/image/D560DAQGTubKeur8sMA/learning-public-crop_675_1200/0/1716585791557?e=2147483647&v=beta&t=jYbEsmvdD9sYaBUmc_dtWym36Qn6-YkngoU68wEvvIc 25 | [avatar]: https://media.licdn.com/dms/image/D560DAQGkBuohyKFspw/learning-author-crop_200_200/0/1694723104809?e=1717192800&v=beta&t=UnBwX0YOnSKGAnsdvvkTlVRzdlSLPLTczeA8JacqFd0 26 | --------------------------------------------------------------------------------