Yêu cầu: Mục này yêu cầu bạn cần có hiểu biết cơ bản về regex, bạn có thể đọc bài viết regex là gì trước khi tiếp tục nếu chưa rõ nhé.
Để sử dụng regex trong Python 3 với tiếng Việt, bạn có một số lưu ý như sau:
1. Để so khớp một từ tiếng Việt bất kỳ, bạn không thể sử dụng \b[a-zA-Z]+\b được. Bởi vì tiếng Việt của chúng ta có những ký tự có thanh sắc. Đây là danh sách đầy đủ ở dạng viết thường cho bạn:
áàảãạăắằẳẵặâấầẩẫậéèẻẽẹêếềểễệóòỏõọôốồổỗộơớờởỡợíìỉĩịúùủũụưứừửữựýỳỷỹỵđ
Do đó, nếu bạn muốn so khớp một từ sử dụng thư viện re, hãy sử dụng regex này:
\b[a-záàảãạăắằẳẵặâấầẩẫậéèẻẽẹêếềểễệóòỏõọôốồổỗộơớờởỡợíìỉĩịúùủũụưứừửữựýỳỷỹỵđ]+\b
Trong trường hợp bạn cần so khớp không phân biệt hoa thường thì hãy dùng thêm flag IGNORE_CASE nhé:
>>> import re
>>> txt = "Lập trình không khó"
# (?i) là flag ignore case
>>>re.findall(r'(?i)\b[a-záàảãạăắằẳẵặâấầẩẫậéèẻẽẹêếềểễệóòỏõọôốồổỗộơớờởỡợíìỉĩịúùủũụưứừửữựýỳỷỹỵđ]+\b', txt)
['Lập', 'trình', 'không', 'khó']
2. Có một cách khác đơn giản hơn, là cài bổ sung thư viện regex thay vì dùng thư viện re có sẵn. Nó cung cấp cho chúng ta khả năng làm việc với tiếng Việt tốt hơn.
Sau đó bạn có thể sử dụng nó để so khớp chuỗi tiếng Việt đơn giản hơn.
>>> import regex
>>> txt = "Lập trình không khó"
>>> regex.findall(r'(?i)\b\p{L}+\b', txt)
['Lập', 'trình', 'không', 'khó']
Ở đây, \p{L} sẽ khớp với một chữ cái bất kỳ trong bảng chữ cái của bất kỳ ngôn ngữ nào.