python-101Đọc toàn bộ đề miễn phí
Trích xuất và chuẩn hóa văn bản có cấu trúc bằng Vectorized String và RegEx
Viết hàm extract_contact_info(df: pd.DataFrame, text_col: str) -> pd.DataFrame:
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: regex, str accessor.
Nội dung đề bài
Mục tiêu kiến thức
- Sử dụng thuộc tính chuỗi vector hóa
df['col'].strđể tăng tốc độ xử lý chuỗi nhanh hơn hàng chục lần so vớiapply(). - Áp dụng các biểu thức chính quy (RegEx) có nhóm chụp (Capture Groups) bằng
str.extract(). - Chuẩn hóa và làm sạch dữ liệu văn bản phi cấu trúc (Unstructured Text Logs).
Mô tả bài toán
Viết hàm extract_contact_info(df: pd.DataFrame, text_col: str) -> pd.DataFrame:
df: DataFrame chứa các chuỗi văn bản tự do trong cộttext_col.- Kiểm tra tính hợp lệ:
- Nếu
text_colkhông tồn tại trongdf.columns, raiseKeyError(f"Cot '{text_col}' khong ton tai"). - Trích xuất thông tin liên hệ và trả về DataFrame mới gồm 3 cột:
"email": Tìm địa chỉ email hợp lệ đầu tiên (dạnguser@domain.ext), chuyển toàn bộ về chữ thường (lower). Nếu không có, đểnp.nan."domain": Phần tên miền phía sau ký tự@của email đó (chữ thường). Nếu không có email, đểnp.nan."phone": Tìm chuỗi số điện thoại chứa đúng 10 chữ số (có thể xen kẽ dấu cách, dấu gạch ngang, ngoặc đơn như(090) 123-4567hoặc0901234567). Lấy 10 chữ số đó và định dạng lại thành chuỗi chuẩn"XXX-XXX-XXXX". Nếu không có hoặc không đủ 10 chữ số, đểnp.nan.- Trả về
pd.DataFramemới có cùng index vớidfvà chứa 3 cột:["email", "domain", "phone"].
Input
- Tham số:
df: pd.DataFrame,text_col: str.
Output
- Trả về:
pd.DataFramevới 3 cột chuẩn hóa.
Ràng buộc
- Thời gian chạy tối đa: 1000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
extract_contact_info(data=[{'raw': 'Contact John at john.doe@example.com or call (091) 234-5678.'}, {'raw': 'No info here.'}, {'raw': 'Admin: ADMIN@CORP.VN, phone 0987654321'}], text_col='raw')Output
[{'email': 'john.doe@example.com', 'domain': 'example.com', 'phone': '091-234-5678'}, {'email': None, 'domain': None, 'phone': None}, {'email': 'admin@corp.vn', 'domain': 'corp.vn', 'phone': '098-765-4321'}]Giải thích
Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.
Ví dụ 2
Input
extract_contact_info(data=[{'content': 'hello'}], text_col='unknown')Output
TrueGiải thích
Hàm được gọi với bộ tham số thứ hai và trả về kết quả tương ứng theo thiết kế.
3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
