Skip to content

Instantly share code, notes, and snippets.

@aeyage
Last active February 1, 2024 10:07
Show Gist options
  • Select an option

  • Save aeyage/a8c6faf754472fdf71c9f930783af886 to your computer and use it in GitHub Desktop.

Select an option

Save aeyage/a8c6faf754472fdf71c9f930783af886 to your computer and use it in GitHub Desktop.
PoS Tagging of DBS Bank
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"collapsed_sections": [
"csVW2IbEphTu",
"wPHqHd3iO4F6",
"pkSHayO8PlVF",
"HdxkSFXKQKqa",
"Uh_cLIaU0Grv",
"CH-PEAWuR35n"
],
"authorship_tag": "ABX9TyOouSMNGePRpDAqoes0mDae",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/aeyage/a8c6faf754472fdf71c9f930783af886/cpc353-pos-tagging-of-dbs-bank.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"# Text and Sentiment Analysis of DBS Bank Ltd. Banking Performance Using Part-of-Speech Tagging\n",
"\n",
"![dbs.png](data:image/png;base64,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)"
],
"metadata": {
"id": "qcShyLmum8A-"
}
},
{
"cell_type": "markdown",
"source": [
"**Project Overview:**\n",
"\n",
"This project aims to study the text analysis of DBS Bank performance feedback by labelling words in a set of reviews as nouns, adjectives, verb using PoS Tagging on a total of 107 consumer reviews from Jul 2019 to Nov 2023 extracted from:\n",
"\n",
" i. *Trustpilot* <br>\n",
" ii. *BankQuality* <br>\n",
"```\n",
"Author: Aiman Hakimi (153153)\n",
"```\n"
],
"metadata": {
"id": "LbvPeYfsnHoS"
}
},
{
"cell_type": "markdown",
"source": [
"Suggestion: Best viewed on *Google Colab*."
],
"metadata": {
"id": "vdy0WaNJn_C5"
}
},
{
"cell_type": "markdown",
"source": [
"##**Import Necesssary Libraries**"
],
"metadata": {
"id": "csVW2IbEphTu"
}
},
{
"cell_type": "code",
"source": [
"%config Completer.use_jedi=False\n",
"\n",
"import pandas as pd\n",
"import spacy\n",
"from nltk.tag import pos_tag\n",
"\n",
"import re\n",
"\n",
"import warnings\n",
"warnings.filterwarnings(\"ignore\")"
],
"metadata": {
"id": "8yLHzWc2pksy"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"##**Load The Sample Dataset**"
],
"metadata": {
"id": "wPHqHd3iO4F6"
}
},
{
"cell_type": "code",
"source": [
"dbs_pos_rev = pd.read_csv(\"dbs_pos_reviews.csv\", na_values=\"?\")\n",
"dbs_neg_rev = pd.read_csv(\"dbs_neg_reviews.csv\", na_values=\"?\")"
],
"metadata": {
"id": "dfwl_eJ4slmX"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"##**Data Pre-processing**"
],
"metadata": {
"id": "pkSHayO8PlVF"
}
},
{
"cell_type": "code",
"source": [
"# Load spaCy model\n",
"nlp = spacy.load(\"en_core_web_sm\")\n",
"\n",
"\"\"\"\n",
"Helper function to remove punctuation, lowercase conversion,\n",
"and removing unnecessary characters.\n",
"\"\"\"\n",
"def clean_reviews(Review):\n",
" crev = str(Review).lower()\n",
" crev = re.sub(r'[^\\w\\s]', '', crev)\n",
" crev = re.sub(r'\\s{2,}', ' ', crev)\n",
" return crev\n",
"\n",
"dbs_pos_rev[\"Cleaned_Review\"] = dbs_pos_rev[\"Review\"].apply(clean_reviews)\n",
"dbs_neg_rev[\"Cleaned_Review\"] = dbs_neg_rev[\"Review\"].apply(clean_reviews)"
],
"metadata": {
"id": "DKCnaSXfsX6w"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"##**Part-of-Speech Tagging**"
],
"metadata": {
"id": "HdxkSFXKQKqa"
}
},
{
"cell_type": "code",
"source": [
"# Helper function to perform PoS Tagging\n",
"def perform_pos_tagging(Review):\n",
" doc = nlp(Review)\n",
" pos_tags = [(token.text, token.pos_) for token in doc]\n",
" return pos_tags\n",
"\n",
"# Perform POS tagging\n",
"dbs_pos_rev[\"POS_Tags\"] = dbs_pos_rev[\"Cleaned_Review\"].apply(perform_pos_tagging)\n",
"dbs_neg_rev[\"POS_Tags\"] = dbs_neg_rev[\"Cleaned_Review\"].apply(perform_pos_tagging)"
],
"metadata": {
"id": "S4S4KRN7s8UU"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"# Print sample tagged reviews\n",
"print(\"Positive Reviews:\")\n",
"print(dbs_pos_rev[[\"Review\", \"Cleaned_Review\", \"POS_Tags\"]].head(10))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "PVNrsSpTtIP2",
"outputId": "8a44c9c4-89da-4e21-fe61-811290bee343"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Positive Reviews:\n",
" Review \\\n",
"0 Pretty good. Just ATM can be crowded at times. \n",
"1 A great bank for us Singaporeans!! The smart p... \n",
"2 I've been a customer for four years and have n... \n",
"3 Moved to Singapore from the UK a couple of yea... \n",
"4 wow ...bhumi meri hai \n",
"5 Called recently to organise a new loan, expect... \n",
"6 Internet banking is best in the world \n",
"7 Thank you for yr kind assistance .very service... \n",
"8 Customer service adviser Yanty was very helpfu... \n",
"9 Dear Head of DBS Bank, Westgate Branch,I, Hazl... \n",
"\n",
" Cleaned_Review \\\n",
"0 pretty good just atm can be crowded at times \n",
"1 a great bank for us singaporeans the smart pho... \n",
"2 ive been a customer for four years and have no... \n",
"3 moved to singapore from the uk a couple of yea... \n",
"4 wow bhumi meri hai \n",
"5 called recently to organise a new loan expecte... \n",
"6 internet banking is best in the world \n",
"7 thank you for yr kind assistance very service ... \n",
"8 customer service adviser yanty was very helpfu... \n",
"9 dear head of dbs bank westgate branchi hazlind... \n",
"\n",
" POS_Tags \n",
"0 [(pretty, ADV), (good, ADJ), (just, ADV), (atm... \n",
"1 [(a, DET), (great, ADJ), (bank, NOUN), (for, A... \n",
"2 [(i, PRON), (ve, AUX), (been, AUX), (a, DET), ... \n",
"3 [(moved, VERB), (to, ADP), (singapore, PROPN),... \n",
"4 [(wow, INTJ), (bhumi, PROPN), (meri, PROPN), (... \n",
"5 [(called, VERB), (recently, ADV), (to, PART), ... \n",
"6 [(internet, NOUN), (banking, NOUN), (is, AUX),... \n",
"7 [(thank, VERB), (you, PRON), (for, ADP), (yr, ... \n",
"8 [(customer, NOUN), (service, NOUN), (adviser, ... \n",
"9 [(dear, ADJ), (head, NOUN), (of, ADP), (dbs, A... \n"
]
}
]
},
{
"cell_type": "code",
"source": [
"from collections import Counter\n",
"\n",
"\"\"\"\n",
"Helper function to analyse the top 10 most frequent words\n",
"by POS tag in a set of POS-tagged reviews.\n",
"\"\"\"\n",
"def analyze_top_words_by_pos(pos_tagged_reviews):\n",
"\n",
" # Define a list of POS tags to track\n",
" pos_tags_to_track = [\"VERB\", \"ADJ\", \"NOUN\"]\n",
"\n",
" # Create a dictionary to store tag counts\n",
" tag_counts = {tag: Counter() for tag in pos_tags_to_track}\n",
"\n",
" # Iterate through all reviews and count POS occurrences\n",
" for review_id, pos_tags in pos_tagged_reviews.items():\n",
" for token, tag in pos_tags:\n",
" if tag in tag_counts:\n",
" tag_counts[tag][token] += 1\n",
"\n",
" # Extract top 10 words for each tag\n",
" top_words_by_tag = {}\n",
" for tag, tag_counter in tag_counts.items():\n",
" top_words_by_tag[tag] = tag_counter.most_common(10)\n",
"\n",
" return top_words_by_tag"
],
"metadata": {
"id": "wxISwWTpCV_Y"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"###Positive Reviews"
],
"metadata": {
"id": "Uh_cLIaU0Grv"
}
},
{
"cell_type": "code",
"source": [
"# Analyse positive reviews\n",
"pos_top_words_by_tag = analyze_top_words_by_pos(dbs_pos_rev[\"POS_Tags\"])\n",
"\n",
"# Print top 10 words for each POS tag\n",
"for sentiment, top_words in [(\"Positive\", pos_top_words_by_tag)]:\n",
" print(f\"\\nTop 10 words by POS tag in {sentiment} Reviews:\")\n",
" for tag, top_words in top_words.items():\n",
" print(f\"\\n{tag}:\")\n",
" for word, count in top_words:\n",
" print(f\"\\t{word}: {count}\")"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "TxUEok8XLW_0",
"outputId": "5432d6bb-ecfd-4951-b476-32c5f2a7f19c"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"Top 10 words by POS tag in Positive Reviews:\n",
"\n",
"VERB:\n",
"\thave: 7\n",
"\tadvised: 6\n",
"\tthank: 5\n",
"\tmade: 4\n",
"\tdid: 3\n",
"\thad: 3\n",
"\tgo: 3\n",
"\tcalled: 3\n",
"\tassisted: 3\n",
"\tdo: 3\n",
"\n",
"ADJ:\n",
"\tnew: 6\n",
"\tgood: 4\n",
"\tbest: 4\n",
"\tonline: 4\n",
"\tgreat: 3\n",
"\table: 3\n",
"\tmultiplier: 2\n",
"\tfast: 2\n",
"\thappy: 2\n",
"\tlong: 2\n",
"\n",
"NOUN:\n",
"\taccount: 12\n",
"\tbranch: 9\n",
"\tservice: 9\n",
"\tbank: 8\n",
"\tcustomer: 6\n",
"\tyears: 5\n",
"\tcard: 5\n",
"\tcall: 5\n",
"\tdbs: 4\n",
"\tdays: 4\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"###Negative Reviews"
],
"metadata": {
"id": "CH-PEAWuR35n"
}
},
{
"cell_type": "code",
"source": [
"# Analyse negative reviews\n",
"neg_top_words_by_tag = analyze_top_words_by_pos(dbs_neg_rev[\"POS_Tags\"])\n",
"\n",
"# Print top 10 words for each POS tag\n",
"for sentiment, top_words in [(\"Negative\", neg_top_words_by_tag)]:\n",
" print(f\"\\nTop 10 words by POS tag in {sentiment} Reviews:\")\n",
" for tag, top_words in top_words.items():\n",
" print(f\"\\n{tag}:\")\n",
" for word, count in top_words:\n",
" print(f\"\\t{word}: {count}\")"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "ZsjnkZlHR7Xf",
"outputId": "e7a25de3-c461-4b91-8dc0-2291ce1cb676"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"\n",
"Top 10 words by POS tag in Negative Reviews:\n",
"\n",
"VERB:\n",
"\thave: 31\n",
"\tget: 15\n",
"\tcalled: 12\n",
"\thad: 11\n",
"\topen: 11\n",
"\tgo: 10\n",
"\tdo: 10\n",
"\tdbs: 9\n",
"\tsaid: 9\n",
"\tis: 8\n",
"\n",
"ADJ:\n",
"\tother: 20\n",
"\tworst: 17\n",
"\tmore: 11\n",
"\tmultiple: 11\n",
"\tmany: 10\n",
"\tsame: 9\n",
"\tbad: 9\n",
"\tterrible: 8\n",
"\tpoor: 8\n",
"\tdbs: 8\n",
"\n",
"NOUN:\n",
"\tbank: 95\n",
"\tcustomer: 50\n",
"\tservice: 49\n",
"\taccount: 41\n",
"\tdbs: 32\n",
"\tcard: 29\n",
"\ttime: 21\n",
"\tmonth: 15\n",
"\tamount: 14\n",
"\tmoney: 13\n"
]
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment