Kembali kepada contoh kedai makan kita yang lepas. Kita hari ini perlu buat 2 analisa data untuk kedai kita:
Apakah hashtag yang digunakan oleh pelanggan ?
Mengenal pasti komen yang mengandungi perkataan tertentu
Seperti biasa mari mulakan dengan create table:
Table: customer_comments
CREATE TABLE customer_comments (
username VARCHAR (50),
comments VARCHAR (256),
created_at TIMESTAMP default current_timestamp
);
Seterusnya masukkan data dalam table
insert into customer_comments(username, comments) values ('hasbullah','#nasilemak sedap betul');
insert into customer_comments(username, comments) values ('adib','Makan kena tunggu 1 jam baru sampai. #service slow');
insert into customer_comments(username, comments) values ('hinata','#jus mangga dia mengancam betul. sedap!');
insert into customer_comments(username, comments) values ('hana','sambal #nasilemak dia power');
insert into customer_comments(username, comments) values ('hasbullah','kena datang awal');
insert into customer_comments(username, comments) values ('juragan','#beratur panjang. #ayamgoreng power');
insert into customer_comments(username, comments) values ('malik','banyak pilihan #lauk');
insert into customer_comments(username, comments) values ('hana','anda kena cuba #nasilemak ayam goreng dia');
insert into customer_comments(username, comments) values ('adib','#nasilemak terbaik');
Hasil query
Analisa
Apakah hashtag yang digunakan oleh pelanggan
Dalam analisa ini , kita cuba mencari perkataan menggunakan hashtag (#) seperti #sedap #trending #fyp . Jadi dengan menggunakan regex merupakan salah satu cara untuk mengesan pattern dalam string. Berikut adalah regex untuk mendapatkan string yang bermula dengan hashtag.
#([A-Za-z0-9_]+)
Tidak percaya?
Mari kita cuba periksa dengan regex101 .
Dalam postgres ada satu function yang menggunakan regex iaitu REGEXP_MATCHES()
Sebelum itu mari kita lihat anatomi function ini
REGEXP_MATCHES(string, pattern [, flags])
string
- column atau string yang kita letakkan
pattern
- ini berkaitan dengan pattern regex . Anda boleh gunakan tools sepert regex101 untuk belajar mengenainya.
flag
- Parameter tambahan . Sebagai contoh i
untuk mencari padanan yang tidak case-sensitive. g
digunakan untuk global search.
Mari kita query.
select REGEXP_MATCHES(comments,
'#([A-Za-z0-9_]+)',
'g') hashtag, comments from customer_comments;
Dan ini adalah hasil SQL query tersebut
Mari kita count berapakah hashtag keyword yang ada.
WITH CTE_cust_hashtag as (
select REGEXP_MATCHES(comments,
'#([A-Za-z0-9_]+)',
'g') hashtag, comments from customer_comments)
select hashtag, count(*)
from CTE_cust_hashtag
group by hashtag
;
Hasilnya
Ramai sebut pasal nasi lemak. hehe
Selamat makan . Eh.
Selamat mencuba!
xxx
Rujukan:
https://www.postgresqltutorial.com/postgresql-string-functions/postgresql-regexp_matches/