Simple Sentiment analysis with Databricks spark
from pyspark.sql import SparkSession
spark = SparkSession \
.builder \
.appName("Python Spark Sentiment Analysis example") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
df.display()
text
id
pubdate
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
10 Things Missing In The New Twitter Interface http://bit.ly/bLZXI3 #NewTwitter
2602860537
18536
RT @_NATURALBWINNER OH AND I DONT LIKE THIS #NEWTWITTER SHIT < seeeeeee nobody likes this #newtwitter bullsh** . . eat a dick new twitter !
2602850443
18536
RT @HBO24 yo the #newtwitter is better.. YUPP I SAID IT!<What is new twitter...i m still waitin for su?1 2 fill me in
2602761852
18535
Aaaaaaaand I have the new twitter! Yay! I should have checked sooner, but I have been busy. I like it! #NewTwitter
2602738438
18535
can I please have the new twitter? #twitter #newtwitter
2602684185
18535
Seriously, still no new Twitter layout? How many weeks is this suppose to take?! #newtwitter
2602678435
18535
"Confieso q el #NewTwitter no me mata, c/vez que veo ""psst the new twitter is here"" (o como sea que dice) lo ignoro esperando a q desaparezc"
2602600751
18535
I have the new twitter. Who else? :) #NewTwitter
2602585892
18535
HOW DO I DOWNLOAD NEW TWITTER? #newtwitter #help #knowledge #thisISshit
2602548822
18535
same here- urs fixed yet? RT @tamarafarley Hrm, my #lists function doesn't work on the new Twitter. What gives? #newTwitter #fail
2602529998
18535
When is the new twitter going to rollout to me? #newtwitter
2602486242
18535
Stage 2 RT @celeryjacket: Omg New Twitter is beautiful :O *designgasm* #newtwitter
2602434234
18535
ps, er, what happened to new twitter embedding pictures? just saying... #newtwitter
2602427093
18535
I loved writing about #newtwitter with @mikeschaffer & @nakeva (http://bit.ly/cEMBl3) but can I PLEASE get upgraded @twitter? Thx!
2602382610
18535
@adactio hopefully he has the Twitter iPad app by now. I like it even better than the new Twitter :) #newtwitter
2602351386
18535
7 Really Cool Things About The #NewTwitter http://ow.ly/1qYuwg
2602304053
18535
How To Make Backgrounds for #NewTwitter http://bit.ly/9h1c9B via @askdebra @GautamGhosh @shilpiiz @SocialSideMedia
2602293760
18535
Showing the first 1000 rows.
## install python nltk package
!pip install nltk
Collecting nltk
Downloading nltk-3.5.zip (1.4 MB)
|▎ | 10 kB 18.9 MB/s eta 0:00:01
|▌ | 20 kB 23.7 MB/s eta 0:00:01
|▊ | 30 kB 16.3 MB/s eta 0:00:01
|█ | 40 kB 11.2 MB/s eta 0:00:01
|█▏ | 51 kB 7.8 MB/s eta 0:00:01
|█▍ | 61 kB 6.6 MB/s eta 0:00:01
|█▋ | 71 kB 6.9 MB/s eta 0:00:01
|█▉ | 81 kB 7.4 MB/s eta 0:00:01
|██ | 92 kB 7.1 MB/s eta 0:00:01
|██▎ | 102 kB 6.1 MB/s eta 0:00:01
|██▌ | 112 kB 6.1 MB/s eta 0:00:01
|██▊ | 122 kB 6.1 MB/s eta 0:00:01
|███ | 133 kB 6.1 MB/s eta 0:00:01
|███▏ | 143 kB 6.1 MB/s eta 0:00:01
|███▍ | 153 kB 6.1 MB/s eta 0:00:01
|███▋ | 163 kB 6.1 MB/s eta 0:00:01
|███▉ | 174 kB 6.1 MB/s eta 0:00:01
|████▏ | 184 kB 6.1 MB/s eta 0:00:01
|████▍ | 194 kB 6.1 MB/s eta 0:00:01
|████▋ | 204 kB 6.1 MB/s eta 0:00:01
|████▉ | 215 kB 6.1 MB/s eta 0:00:01
|█████ | 225 kB 6.1 MB/s eta 0:00:01
|█████▎ | 235 kB 6.1 MB/s eta 0:00:01
|█████▌ | 245 kB 6.1 MB/s eta 0:00:01
|█████▊ | 256 kB 6.1 MB/s eta 0:00:01
|██████ | 266 kB 6.1 MB/s eta 0:00:01
|██████▏ | 276 kB 6.1 MB/s eta 0:00:01
|██████▍ | 286 kB 6.1 MB/s eta 0:00:01
|██████▋ | 296 kB 6.1 MB/s eta 0:00:01
|██████▉ | 307 kB 6.1 MB/s eta 0:00:01
|███████ | 317 kB 6.1 MB/s eta 0:00:01
|███████▎ | 327 kB 6.1 MB/s eta 0:00:01
|███████▌ | 337 kB 6.1 MB/s eta 0:00:01
|███████▊ | 348 kB 6.1 MB/s eta 0:00:01
|████████ | 358 kB 6.1 MB/s eta 0:00:01
|████████▎ | 368 kB 6.1 MB/s eta 0:00:01
|████████▌ | 378 kB 6.1 MB/s eta 0:00:01
|████████▊ | 389 kB 6.1 MB/s eta 0:00:01
|█████████ | 399 kB 6.1 MB/s eta 0:00:01
|█████████▏ | 409 kB 6.1 MB/s eta 0:00:01
|█████████▍ | 419 kB 6.1 MB/s eta 0:00:01
|█████████▋ | 430 kB 6.1 MB/s eta 0:00:01
|█████████▉ | 440 kB 6.1 MB/s eta 0:00:01
|██████████ | 450 kB 6.1 MB/s eta 0:00:01
|██████████▎ | 460 kB 6.1 MB/s eta 0:00:01
|██████████▌ | 471 kB 6.1 MB/s eta 0:00:01
|██████████▊ | 481 kB 6.1 MB/s eta 0:00:01
|███████████ | 491 kB 6.1 MB/s eta 0:00:01
|███████████▏ | 501 kB 6.1 MB/s eta 0:00:01
|███████████▍ | 512 kB 6.1 MB/s eta 0:00:01
|███████████▋ | 522 kB 6.1 MB/s eta 0:00:01
|███████████▉ | 532 kB 6.1 MB/s eta 0:00:01
|████████████▏ | 542 kB 6.1 MB/s eta 0:00:01
|████████████▍ | 552 kB 6.1 MB/s eta 0:00:01
|████████████▋ | 563 kB 6.1 MB/s eta 0:00:01
|████████████▉ | 573 kB 6.1 MB/s eta 0:00:01
|█████████████ | 583 kB 6.1 MB/s eta 0:00:01
|█████████████▎ | 593 kB 6.1 MB/s eta 0:00:01
|█████████████▌ | 604 kB 6.1 MB/s eta 0:00:01
|█████████████▊ | 614 kB 6.1 MB/s eta 0:00:01
|██████████████ | 624 kB 6.1 MB/s eta 0:00:01
|██████████████▏ | 634 kB 6.1 MB/s eta 0:00:01
|██████████████▍ | 645 kB 6.1 MB/s eta 0:00:01
|██████████████▋ | 655 kB 6.1 MB/s eta 0:00:01
|██████████████▉ | 665 kB 6.1 MB/s eta 0:00:01
|███████████████ | 675 kB 6.1 MB/s eta 0:00:01
|███████████████▎ | 686 kB 6.1 MB/s eta 0:00:01
|███████████████▌ | 696 kB 6.1 MB/s eta 0:00:01
|███████████████▊ | 706 kB 6.1 MB/s eta 0:00:01
|████████████████ | 716 kB 6.1 MB/s eta 0:00:01
|████████████████▎ | 727 kB 6.1 MB/s eta 0:00:01
|████████████████▌ | 737 kB 6.1 MB/s eta 0:00:01
|████████████████▊ | 747 kB 6.1 MB/s eta 0:00:01
|█████████████████ | 757 kB 6.1 MB/s eta 0:00:01
|█████████████████▏ | 768 kB 6.1 MB/s eta 0:00:01
|█████████████████▍ | 778 kB 6.1 MB/s eta 0:00:01
|█████████████████▋ | 788 kB 6.1 MB/s eta 0:00:01
|█████████████████▉ | 798 kB 6.1 MB/s eta 0:00:01
|██████████████████ | 808 kB 6.1 MB/s eta 0:00:01
|██████████████████▎ | 819 kB 6.1 MB/s eta 0:00:01
|██████████████████▌ | 829 kB 6.1 MB/s eta 0:00:01
|██████████████████▊ | 839 kB 6.1 MB/s eta 0:00:01
|███████████████████ | 849 kB 6.1 MB/s eta 0:00:01
|███████████████████▏ | 860 kB 6.1 MB/s eta 0:00:01
|███████████████████▍ | 870 kB 6.1 MB/s eta 0:00:01
|███████████████████▋ | 880 kB 6.1 MB/s eta 0:00:01
|███████████████████▉ | 890 kB 6.1 MB/s eta 0:00:01
|████████████████████▏ | 901 kB 6.1 MB/s eta 0:00:01
|████████████████████▍ | 911 kB 6.1 MB/s eta 0:00:01
|████████████████████▋ | 921 kB 6.1 MB/s eta 0:00:01
|████████████████████▉ | 931 kB 6.1 MB/s eta 0:00:01
|█████████████████████ | 942 kB 6.1 MB/s eta 0:00:01
|█████████████████████▎ | 952 kB 6.1 MB/s eta 0:00:01
|█████████████████████▌ | 962 kB 6.1 MB/s eta 0:00:01
|█████████████████████▊ | 972 kB 6.1 MB/s eta 0:00:01
|██████████████████████ | 983 kB 6.1 MB/s eta 0:00:01
|██████████████████████▏ | 993 kB 6.1 MB/s eta 0:00:01
|██████████████████████▍ | 1.0 MB 6.1 MB/s eta 0:00:01
|██████████████████████▋ | 1.0 MB 6.1 MB/s eta 0:00:01
|██████████████████████▉ | 1.0 MB 6.1 MB/s eta 0:00:01
|███████████████████████ | 1.0 MB 6.1 MB/s eta 0:00:01
|███████████████████████▎ | 1.0 MB 6.1 MB/s eta 0:00:01
|███████████████████████▌ | 1.1 MB 6.1 MB/s eta 0:00:01
|███████████████████████▊ | 1.1 MB 6.1 MB/s eta 0:00:01
|████████████████████████ | 1.1 MB 6.1 MB/s eta 0:00:01
|████████████████████████▎ | 1.1 MB 6.1 MB/s eta 0:00:01
|████████████████████████▌ | 1.1 MB 6.1 MB/s eta 0:00:01
|████████████████████████▊ | 1.1 MB 6.1 MB/s eta 0:00:01
|█████████████████████████ | 1.1 MB 6.1 MB/s eta 0:00:01
|█████████████████████████▏ | 1.1 MB 6.1 MB/s eta 0:00:01
|█████████████████████████▍ | 1.1 MB 6.1 MB/s eta 0:00:01
|█████████████████████████▋ | 1.1 MB 6.1 MB/s eta 0:00:01
|█████████████████████████▉ | 1.2 MB 6.1 MB/s eta 0:00:01
|██████████████████████████ | 1.2 MB 6.1 MB/s eta 0:00:01
|██████████████████████████▎ | 1.2 MB 6.1 MB/s eta 0:00:01
|██████████████████████████▌ | 1.2 MB 6.1 MB/s eta 0:00:01
|██████████████████████████▊ | 1.2 MB 6.1 MB/s eta 0:00:01
|███████████████████████████ | 1.2 MB 6.1 MB/s eta 0:00:01
|███████████████████████████▏ | 1.2 MB 6.1 MB/s eta 0:00:01
|███████████████████████████▍ | 1.2 MB 6.1 MB/s eta 0:00:01
|███████████████████████████▋ | 1.2 MB 6.1 MB/s eta 0:00:01
|███████████████████████████▉ | 1.2 MB 6.1 MB/s eta 0:00:01
|████████████████████████████▏ | 1.3 MB 6.1 MB/s eta 0:00:01
|████████████████████████████▍ | 1.3 MB 6.1 MB/s eta 0:00:01
|████████████████████████████▋ | 1.3 MB 6.1 MB/s eta 0:00:01
|████████████████████████████▉ | 1.3 MB 6.1 MB/s eta 0:00:01
|█████████████████████████████ | 1.3 MB 6.1 MB/s eta 0:00:01
|█████████████████████████████▎ | 1.3 MB 6.1 MB/s eta 0:00:01
|█████████████████████████████▌ | 1.3 MB 6.1 MB/s eta 0:00:01
|█████████████████████████████▊ | 1.3 MB 6.1 MB/s eta 0:00:01
|██████████████████████████████ | 1.3 MB 6.1 MB/s eta 0:00:01
|██████████████████████████████▏ | 1.4 MB 6.1 MB/s eta 0:00:01
|██████████████████████████████▍ | 1.4 MB 6.1 MB/s eta 0:00:01
|██████████████████████████████▋ | 1.4 MB 6.1 MB/s eta 0:00:01
|██████████████████████████████▉ | 1.4 MB 6.1 MB/s eta 0:00:01
|███████████████████████████████ | 1.4 MB 6.1 MB/s eta 0:00:01
|███████████████████████████████▎| 1.4 MB 6.1 MB/s eta 0:00:01
|███████████████████████████████▌| 1.4 MB 6.1 MB/s eta 0:00:01
|███████████████████████████████▊| 1.4 MB 6.1 MB/s eta 0:00:01
|████████████████████████████████| 1.4 MB 6.1 MB/s
Collecting click
Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
|████ | 10 kB 24.6 MB/s eta 0:00:01
|████████ | 20 kB 30.0 MB/s eta 0:00:01
|███████████▉ | 30 kB 35.2 MB/s eta 0:00:01
|███████████████▉ | 40 kB 38.4 MB/s eta 0:00:01
|███████████████████▉ | 51 kB 28.3 MB/s eta 0:00:01
|███████████████████████▊ | 61 kB 30.3 MB/s eta 0:00:01
|███████████████████████████▊ | 71 kB 26.0 MB/s eta 0:00:01
|███████████████████████████████▊| 81 kB 27.9 MB/s eta 0:00:01
|████████████████████████████████| 82 kB 2.0 MB/s
Requirement already satisfied: joblib in /databricks/python3/lib/python3.7/site-packages (from nltk) (0.14.1)
Collecting regex
Downloading regex-2020.11.13-cp37-cp37m-manylinux2014_x86_64.whl (719 kB)
|▌ | 10 kB 4.6 MB/s eta 0:00:01
|█ | 20 kB 6.6 MB/s eta 0:00:01
|█▍ | 30 kB 9.2 MB/s eta 0:00:01
|█▉ | 40 kB 9.6 MB/s eta 0:00:01
|██▎ | 51 kB 10.1 MB/s eta 0:00:01
|██▊ | 61 kB 11.7 MB/s eta 0:00:01
|███▏ | 71 kB 11.7 MB/s eta 0:00:01
|███▋ | 81 kB 13.0 MB/s eta 0:00:01
|████ | 92 kB 13.1 MB/s eta 0:00:01
|████▌ | 102 kB 12.8 MB/s eta 0:00:01
|█████ | 112 kB 12.8 MB/s eta 0:00:01
|█████▌ | 122 kB 12.8 MB/s eta 0:00:01
|██████ | 133 kB 12.8 MB/s eta 0:00:01
|██████▍ | 143 kB 12.8 MB/s eta 0:00:01
|██████▉ | 153 kB 12.8 MB/s eta 0:00:01
|███████▎ | 163 kB 12.8 MB/s eta 0:00:01
|███████▊ | 174 kB 12.8 MB/s eta 0:00:01
|████████▏ | 184 kB 12.8 MB/s eta 0:00:01
|████████▋ | 194 kB 12.8 MB/s eta 0:00:01
|█████████ | 204 kB 12.8 MB/s eta 0:00:01
|█████████▋ | 215 kB 12.8 MB/s eta 0:00:01
|██████████ | 225 kB 12.8 MB/s eta 0:00:01
|██████████▌ | 235 kB 12.8 MB/s eta 0:00:01
|███████████ | 245 kB 12.8 MB/s eta 0:00:01
|███████████▍ | 256 kB 12.8 MB/s eta 0:00:01
|███████████▉ | 266 kB 12.8 MB/s eta 0:00:01
|████████████▎ | 276 kB 12.8 MB/s eta 0:00:01
|████████████▊ | 286 kB 12.8 MB/s eta 0:00:01
|█████████████▏ | 296 kB 12.8 MB/s eta 0:00:01
|█████████████▋ | 307 kB 12.8 MB/s eta 0:00:01
|██████████████▏ | 317 kB 12.8 MB/s eta 0:00:01
|██████████████▋ | 327 kB 12.8 MB/s eta 0:00:01
|███████████████ | 337 kB 12.8 MB/s eta 0:00:01
|███████████████▌ | 348 kB 12.8 MB/s eta 0:00:01
|████████████████ | 358 kB 12.8 MB/s eta 0:00:01
|████████████████▍ | 368 kB 12.8 MB/s eta 0:00:01
|████████████████▉ | 378 kB 12.8 MB/s eta 0:00:01
|█████████████████▎ | 389 kB 12.8 MB/s eta 0:00:01
|█████████████████▊ | 399 kB 12.8 MB/s eta 0:00:01
|██████████████████▏ | 409 kB 12.8 MB/s eta 0:00:01
|██████████████████▋ | 419 kB 12.8 MB/s eta 0:00:01
|███████████████████▏ | 430 kB 12.8 MB/s eta 0:00:01
|███████████████████▋ | 440 kB 12.8 MB/s eta 0:00:01
|████████████████████ | 450 kB 12.8 MB/s eta 0:00:01
|████████████████████▌ | 460 kB 12.8 MB/s eta 0:00:01
|█████████████████████ | 471 kB 12.8 MB/s eta 0:00:01
|█████████████████████▍ | 481 kB 12.8 MB/s eta 0:00:01
|█████████████████████▉ | 491 kB 12.8 MB/s eta 0:00:01
|██████████████████████▎ | 501 kB 12.8 MB/s eta 0:00:01
|██████████████████████▊ | 512 kB 12.8 MB/s eta 0:00:01
|███████████████████████▏ | 522 kB 12.8 MB/s eta 0:00:01
|███████████████████████▊ | 532 kB 12.8 MB/s eta 0:00:01
|████████████████████████▏ | 542 kB 12.8 MB/s eta 0:00:01
|████████████████████████▋ | 552 kB 12.8 MB/s eta 0:00:01
|█████████████████████████ | 563 kB 12.8 MB/s eta 0:00:01
|█████████████████████████▌ | 573 kB 12.8 MB/s eta 0:00:01
|██████████████████████████ | 583 kB 12.8 MB/s eta 0:00:01
|██████████████████████████▍ | 593 kB 12.8 MB/s eta 0:00:01
|██████████████████████████▉ | 604 kB 12.8 MB/s eta 0:00:01
|███████████████████████████▎ | 614 kB 12.8 MB/s eta 0:00:01
|███████████████████████████▊ | 624 kB 12.8 MB/s eta 0:00:01
|████████████████████████████▎ | 634 kB 12.8 MB/s eta 0:00:01
|████████████████████████████▊ | 645 kB 12.8 MB/s eta 0:00:01
|█████████████████████████████▏ | 655 kB 12.8 MB/s eta 0:00:01
|█████████████████████████████▋ | 665 kB 12.8 MB/s eta 0:00:01
|██████████████████████████████ | 675 kB 12.8 MB/s eta 0:00:01
|██████████████████████████████▌ | 686 kB 12.8 MB/s eta 0:00:01
|███████████████████████████████ | 696 kB 12.8 MB/s eta 0:00:01
|███████████████████████████████▍| 706 kB 12.8 MB/s eta 0:00:01
|███████████████████████████████▉| 716 kB 12.8 MB/s eta 0:00:01
|████████████████████████████████| 719 kB 12.8 MB/s
Collecting tqdm
Downloading tqdm-4.54.1-py2.py3-none-any.whl (69 kB)
|████▊ | 10 kB 29.9 MB/s eta 0:00:01
|█████████▍ | 20 kB 34.6 MB/s eta 0:00:01
|██████████████ | 30 kB 40.1 MB/s eta 0:00:01
|██████████████████▉ | 40 kB 43.2 MB/s eta 0:00:01
|███████████████████████▌ | 51 kB 41.0 MB/s eta 0:00:01
|████████████████████████████▏ | 61 kB 43.4 MB/s eta 0:00:01
|████████████████████████████████| 69 kB 12.6 MB/s
Building wheels for collected packages: nltk
Building wheel for nltk (setup.py) ... - \ | / - \ | done
Created wheel for nltk: filename=nltk-3.5-py3-none-any.whl size=1434675 sha256=4e83bb58be05dac06041ee9f164619e830dfb1bafa71bf4482bf195e16ea01ce
Stored in directory: /root/.cache/pip/wheels/45/6c/46/a1865e7ba706b3817f5d1b2ff7ce8996aabdd0d03d47ba0266
Successfully built nltk
Installing collected packages: click, regex, tqdm, nltk
Successfully installed click-7.1.2 nltk-3.5 regex-2020.11.13 tqdm-4.54.1
WARNING: You are using pip version 20.0.2; however, version 20.3.1 is available.
You should consider upgrading via the '/databricks/python3/bin/python3.7 -m pip install --upgrade pip' command.
## check
df = df.withColumn('text_non_asci',strip_non_ascii_udf(df['text']))
df.show(5,True)
+--------------------+----------+-------+--------------------+
| text| id|pubdate| text_non_asci|
+--------------------+----------+-------+--------------------+
|10 Things Missing...|2602860537| 18536|10 Things Missing...|
|RT @_NATURALBWINN...|2602850443| 18536|RT @_NATURALBWINN...|
|RT @HBO24 yo the ...|2602761852| 18535|RT @HBO24 yo the ...|
|Aaaaaaaand I have...|2602738438| 18535|Aaaaaaaand I have...|
|can I please have...|2602684185| 18535|can I please have...|
+--------------------+----------+-------+--------------------+
only showing top 5 rows
# fixed abbreviation
def fix_abbreviation(data_str):
data_str = data_str.lower() ## normalizted to lower case letter
data_str = re.sub(r'\bthats\b', 'that is', data_str)
data_str = re.sub(r'\bive\b', 'i have', data_str)
data_str = re.sub(r'\bim\b', 'i am', data_str)
data_str = re.sub(r'\bya\b', 'yeah', data_str)
data_str = re.sub(r'\bcant\b', 'can not', data_str)
data_str = re.sub(r'\bdont\b', 'do not', data_str)
data_str = re.sub(r'\bwont\b', 'will not', data_str)
data_str = re.sub(r'\bid\b', 'i would', data_str)
data_str = re.sub(r'wtf', 'what the fuck', data_str)
data_str = re.sub(r'\bwth\b', 'what the hell', data_str)
data_str = re.sub(r'\br\b', 'are', data_str)
data_str = re.sub(r'\bu\b', 'you', data_str)
data_str = re.sub(r'\bk\b', 'OK', data_str)
data_str = re.sub(r'\bsux\b', 'sucks', data_str)
data_str = re.sub(r'\bno+\b', 'no', data_str)
data_str = re.sub(r'\bcoo+\b', 'cool', data_str)
data_str = re.sub(r'rt\b', '', data_str)
data_str = data_str.strip()
return data_str
fix_abbreviation_udf = udf(fix_abbreviation, StringType())
## create fixed_abbrev column
df = df.withColumn('fixed_abbrev',fix_abbreviation_udf(df['text_non_asci']))
df.show(5,True)
+--------------------+----------+-------+--------------------+--------------------+
| text| id|pubdate| text_non_asci| fixed_abbrev|
+--------------------+----------+-------+--------------------+--------------------+
|10 Things Missing...|2602860537| 18536|10 Things Missing...|10 things missing...|
|RT @_NATURALBWINN...|2602850443| 18536|RT @_NATURALBWINN...|@_naturalbwinner ...|
|RT @HBO24 yo the ...|2602761852| 18535|RT @HBO24 yo the ...|@hbo24 yo the #ne...|
|Aaaaaaaand I have...|2602738438| 18535|Aaaaaaaand I have...|aaaaaaaand i have...|
|can I please have...|2602684185| 18535|can I please have...|can i please have...|
+--------------------+----------+-------+--------------------+--------------------+
only showing top 5 rows
## remove irrelevant
def remove_features(data_str):
# compile regex
url_re = re.compile('https?://(www.)?\w+\.\w+(/\w+)*/?')
punc_re = re.compile('[%s]' % re.escape(string.punctuation))
num_re = re.compile('(\\d+)')
mention_re = re.compile('@(\w+)')
alpha_num_re = re.compile("^[a-z0-9_.]+$")
# convert to lowercase
data_str = data_str.lower()
# remove hyperlinks
data_str = url_re.sub(' ', data_str)
# remove @mentions
data_str = mention_re.sub(' ', data_str)
# remove puncuation
data_str = punc_re.sub(' ', data_str)
# remove numeric 'words'
data_str = num_re.sub(' ', data_str)
# remove non a-z 0-9 characters and words shorter than 1 characters
list_pos = 0
cleaned_str = ''
for word in data_str.split():
if list_pos == 0:
if alpha_num_re.match(word) and len(word) > 1:
cleaned_str = word
else:
cleaned_str = ' '
else:
if alpha_num_re.match(word) and len(word) > 1:
cleaned_str = cleaned_str + ' ' + word
else:
cleaned_str += ' '
list_pos += 1
# remove unwanted space, *.split() will automatically split on
# whitespace and discard duplicates, the " ".join() joins the
# resulting list into one string.
return " ".join(cleaned_str.split())
# setup pyspark udf function
remove_features_udf = udf(remove_features, StringType())
## create column removed irrelevant
df = df.withColumn('removed',remove_features_udf(df['fixed_abbrev']))
df.show(5,True)
+--------------------+----------+-------+--------------------+--------------------+--------------------+
| text| id|pubdate| text_non_asci| fixed_abbrev| removed|
+--------------------+----------+-------+--------------------+--------------------+--------------------+
|10 Things Missing...|2602860537| 18536|10 Things Missing...|10 things missing...|things missing in...|
|RT @_NATURALBWINN...|2602850443| 18536|RT @_NATURALBWINN...|@_naturalbwinner ...|oh and do not lik...|
|RT @HBO24 yo the ...|2602761852| 18535|RT @HBO24 yo the ...|@hbo24 yo the #ne...|yo the newtwitter...|
|Aaaaaaaand I have...|2602738438| 18535|Aaaaaaaand I have...|aaaaaaaand i have...|aaaaaaaand have t...|
|can I please have...|2602684185| 18535|can I please have...|can i please have...|can please have t...|
+--------------------+----------+-------+--------------------+--------------------+--------------------+
only showing top 5 rows
## install textblob
## Use textblob to do sentiment score
!pip install textblob
Collecting textblob
Downloading textblob-0.15.3-py2.py3-none-any.whl (636 kB)
|▌ | 10 kB 21.8 MB/s eta 0:00:01
|█ | 20 kB 24.3 MB/s eta 0:00:01
|█▌ | 30 kB 15.5 MB/s eta 0:00:01
|██ | 40 kB 10.8 MB/s eta 0:00:01
|██▋ | 51 kB 7.9 MB/s eta 0:00:01
|███ | 61 kB 6.5 MB/s eta 0:00:01
|███▋ | 71 kB 6.9 MB/s eta 0:00:01
|████▏ | 81 kB 7.1 MB/s eta 0:00:01
|████▋ | 92 kB 7.1 MB/s eta 0:00:01
|█████▏ | 102 kB 6.1 MB/s eta 0:00:01
|█████▋ | 112 kB 6.1 MB/s eta 0:00:01
|██████▏ | 122 kB 6.1 MB/s eta 0:00:01
|██████▊ | 133 kB 6.1 MB/s eta 0:00:01
|███████▏ | 143 kB 6.1 MB/s eta 0:00:01
|███████▊ | 153 kB 6.1 MB/s eta 0:00:01
|████████▎ | 163 kB 6.1 MB/s eta 0:00:01
|████████▊ | 174 kB 6.1 MB/s eta 0:00:01
|█████████▎ | 184 kB 6.1 MB/s eta 0:00:01
|█████████▉ | 194 kB 6.1 MB/s eta 0:00:01
|██████████▎ | 204 kB 6.1 MB/s eta 0:00:01
|██████████▉ | 215 kB 6.1 MB/s eta 0:00:01
|███████████▎ | 225 kB 6.1 MB/s eta 0:00:01
|███████████▉ | 235 kB 6.1 MB/s eta 0:00:01
|████████████▍ | 245 kB 6.1 MB/s eta 0:00:01
|████████████▉ | 256 kB 6.1 MB/s eta 0:00:01
|█████████████▍ | 266 kB 6.1 MB/s eta 0:00:01
|██████████████ | 276 kB 6.1 MB/s eta 0:00:01
|██████████████▍ | 286 kB 6.1 MB/s eta 0:00:01
|███████████████ | 296 kB 6.1 MB/s eta 0:00:01
|███████████████▍ | 307 kB 6.1 MB/s eta 0:00:01
|████████████████ | 317 kB 6.1 MB/s eta 0:00:01
|████████████████▌ | 327 kB 6.1 MB/s eta 0:00:01
|█████████████████ | 337 kB 6.1 MB/s eta 0:00:01
|█████████████████▌ | 348 kB 6.1 MB/s eta 0:00:01
|██████████████████ | 358 kB 6.1 MB/s eta 0:00:01
|██████████████████▌ | 368 kB 6.1 MB/s eta 0:00:01
|███████████████████ | 378 kB 6.1 MB/s eta 0:00:01
|███████████████████▋ | 389 kB 6.1 MB/s eta 0:00:01
|████████████████████ | 399 kB 6.1 MB/s eta 0:00:01
|████████████████████▋ | 409 kB 6.1 MB/s eta 0:00:01
|█████████████████████ | 419 kB 6.1 MB/s eta 0:00:01
|█████████████████████▋ | 430 kB 6.1 MB/s eta 0:00:01
|██████████████████████▏ | 440 kB 6.1 MB/s eta 0:00:01
|██████████████████████▋ | 450 kB 6.1 MB/s eta 0:00:01
|███████████████████████▏ | 460 kB 6.1 MB/s eta 0:00:01
|███████████████████████▊ | 471 kB 6.1 MB/s eta 0:00:01
|████████████████████████▏ | 481 kB 6.1 MB/s eta 0:00:01
|████████████████████████▊ | 491 kB 6.1 MB/s eta 0:00:01
|█████████████████████████▎ | 501 kB 6.1 MB/s eta 0:00:01
|█████████████████████████▊ | 512 kB 6.1 MB/s eta 0:00:01
|██████████████████████████▎ | 522 kB 6.1 MB/s eta 0:00:01
|██████████████████████████▊ | 532 kB 6.1 MB/s eta 0:00:01
|███████████████████████████▎ | 542 kB 6.1 MB/s eta 0:00:01
|███████████████████████████▉ | 552 kB 6.1 MB/s eta 0:00:01
|████████████████████████████▎ | 563 kB 6.1 MB/s eta 0:00:01
|████████████████████████████▉ | 573 kB 6.1 MB/s eta 0:00:01
|█████████████████████████████▍ | 583 kB 6.1 MB/s eta 0:00:01
|█████████████████████████████▉ | 593 kB 6.1 MB/s eta 0:00:01
|██████████████████████████████▍ | 604 kB 6.1 MB/s eta 0:00:01
|██████████████████████████████▉ | 614 kB 6.1 MB/s eta 0:00:01
|███████████████████████████████▍| 624 kB 6.1 MB/s eta 0:00:01
|████████████████████████████████| 634 kB 6.1 MB/s eta 0:00:01
|████████████████████████████████| 636 kB 6.1 MB/s
Requirement already satisfied: nltk>=3.1 in /databricks/python3/lib/python3.7/site-packages (from textblob) (3.5)
Requirement already satisfied: joblib in /databricks/python3/lib/python3.7/site-packages (from nltk>=3.1->textblob) (0.14.1)
Requirement already satisfied: tqdm in /databricks/python3/lib/python3.7/site-packages (from nltk>=3.1->textblob) (4.54.1)
Requirement already satisfied: regex in /databricks/python3/lib/python3.7/site-packages (from nltk>=3.1->textblob) (2020.11.13)
Requirement already satisfied: click in /databricks/python3/lib/python3.7/site-packages (from nltk>=3.1->textblob) (7.1.2)
Installing collected packages: textblob
Successfully installed textblob-0.15.3
WARNING: You are using pip version 20.0.2; however, version 20.3.1 is available.
You should consider upgrading via the '/databricks/python3/bin/python3.7 -m pip install --upgrade pip' command.
df = df.withColumn("sentiment_score", sentiment_analysis_udf( df['removed'] ))
df.show(5,True)
+--------------------+----------+-------+--------------------+--------------------+--------------------+---------------+
| text| id|pubdate| text_non_asci| fixed_abbrev| removed|sentiment_score|
+--------------------+----------+-------+--------------------+--------------------+--------------------+---------------+
|10 Things Missing...|2602860537| 18536|10 Things Missing...|10 things missing...|things missing in...| -0.03181818|
|RT @_NATURALBWINN...|2602850443| 18536|RT @_NATURALBWINN...|@_naturalbwinner ...|oh and do not lik...| -0.03181818|
|RT @HBO24 yo the ...|2602761852| 18535|RT @HBO24 yo the ...|@hbo24 yo the #ne...|yo the newtwitter...| 0.3181818|
|Aaaaaaaand I have...|2602738438| 18535|Aaaaaaaand I have...|aaaaaaaand i have...|aaaaaaaand have t...| 0.11818182|
|can I please have...|2602684185| 18535|can I please have...|can i please have...|can please have t...| 0.13636364|
+--------------------+----------+-------+--------------------+--------------------+--------------------+---------------+
only showing top 5 rows
0 Comments