Lectures: Nguyễn Tuấn Phong, Đào Việt Anh
Labs: Trịnh Ngọc Huỳnh, Phạm Tiến Du
Semester: 2025-2026-1
Institute for AI, VNU-UET
s = "Café ☕"
b = s.encode("utf-8")
print(type(s).__name__, type(b).__name__)
print(b.decode("utf-8"))
print(b[:-1].decode("utf-8", errors="replace"))
str bytes
Café ☕
Café �
import unicodedata
samples = ["Café", "Cafe\u0301", "FOO", "Straße"]
for x in samples:
n = unicodedata.normalize("NFKC", x)
print(x, "->", n, "->", n.casefold())
Café -> Café -> café
Café -> Café -> café
FOO -> FOO -> foo
Straße -> Straße -> strasse
import re, unicodedata
def normalize_text(s: str) -> str:
s = unicodedata.normalize("NFKC", s).casefold()
return re.sub(r"\s+", " ", s).strip()
print(normalize_text(" FOO Bar\t"))
foo bar
import re
email_re = re.compile(r"(?P<user>[\\w.+-]+)@(?P<domain>[A-Za-z0-9.-]+\\.[A-Za-z]{2,})")
m = email_re.search("contact: first.last+tag@uni.edu")
print(m.group("user"), m.group("domain"))
first.last+tag uni.edu
import pandas as pd, re
df = pd.DataFrame({"email":["alice@acme.io","bob.smith@uni.edu"]})
pat = re.compile(r".+@(?P<domain>[^@]+)$")
print(df["email"].str.extract(pat, expand=True).head())
domain
0 acme.io
1 uni.edu
import json, io
jsonl = '{"u":"a","r":5}\\n{"u":"b","r":3}'
records = [json.loads(line) for line in io.StringIO(jsonl)]
print(records)
[{'u': 'a', 'r': 5}, {'u': 'b', 'r': 3}]
text = "Email: a@b.com, Phone: +1 202 555 0199"
import re
text = re.sub(r"[\\w.+-]+@[\\w.-]+", "<EMAIL>", text)
text = re.sub(r"(?:\\+?\\d[\\d\\- ]{7,}\\d)", "<PHONE>", text)
print(text)
Email: <EMAIL>, Phone: <PHONE>