Biểu thức chính quy - Regular Expressions
Luyện tập thuần thục viết Regular Expressions
Các toán tử thông thường
Các toán tử nâng cao
Thực hiện tiền xử lý trên văn bản tiếng Việt
1. Giới thiệu xử lý ngôn ngữ tự nhiên
1.1. [TF] 16.1.1. Giới thiệu NLP.mp4
Giới thiệu xử lý ngôn ngữ tự nhiên
1.2. [TF] 16.1.2. Các bài toán và khó khăn.mp4
1.3. [TF] 16.1.3. Giao thoa sử dụng các mô hình.mp4
2. Công cụ học biểu thức chính quy
2.1. Công cụ Regex
Chi tiết: https://regex101.com/
2.2. Python Regex
3. Biểu thức chính quy - Regular Expressions
3.1. Một số toán tử cơ bản Regular Expression
3.2. Câu hỏi ngoặc []
Mẫu biểu thức chính quy [aăâbcdđeêghiklmnoôơpqrstuưvxy]
có ý nghĩa gì?
Mẫu biểu thức chính quy [aăâbcdđeêghiklmnoôơpqrstuưvxy]
có ý nghĩa gì?
0 / 40
Tìm khớp với bất kỳ ký tự đơn nào không phải là chữ cái trong bảng chữ cái tiếng Việt.
Tìm khớp với bất kỳ một trong những ký tự được chỉ định: a, ă, â, b, c, d, đ, e, ê, g, h, i, k, l, m, n, o, ô, ơ, p, q, r, s, t, u, ư, v, x, y.
Tìm khớp với bất kỳ ký tự nào trừ những ký tự được chỉ định: a, ă, â, b, c, d, đ, e, ê, g, h, i, k, l, m, n, o, ô, ơ, p, q, r, s, t, u, ư, v, x, y.
3.3. [1-100] có ý nghĩa gì?
[1-100]
có ý nghĩa gì?
3.4. Ký hiệu số lượng
Ký hiệu
?
Ý nghĩa: Không hoặc có một ký tự phía trước ký hiệu
?
.Ví dụ
a?m
có thể tìm ra m hoặc amphu?
có thể tìm ra phu hoặc ph
Ký hiệu
*
Ý nghĩa: Không hoặc có nhiều ký tự phía trước ký hiệu
*
.Ví dụ
a*m
có thể tìm ra m, am, aam, aaam hoặc aaaaaamTuy nhiên
a*
sẽ khớp với chuỗi rỗngPhức tạp hơn ta sẽ có
[em]*
có nghĩa Không có hoặc có nhiều e hoặc nhiều m. Khớp với eeee, mmmm, emememem, thậm chí eeeemmmm và cuối cùng là chuỗi rỗng.
Ký hiệu
+
Ý nghĩa: Có một hoặc nhiều ký tự phía trước ký hiệu
+
(Ít nhất một)Ví dụ
a+m
sẽ không khớp với m vì bắt buộc ít nhất phải có một a. Mẫu này khớp với am, aam, aaam hoặc aaaaaamBài tập: Phân biệt
aa+m
vàaa*m
Lời giải:
aa+m
không khớp với am chỉ có aa*m là khớp
3.5. Ký hiệu đại diện
Ký hiệu
.
Ý nghĩa: Đại diện cho bất cứ ký hiệu nào
Ví dụ
.oc
có thể khớp hoc, doc, cocNâng cao: Vậy một chuỗi bất kỳ sẽ được viết thế nào. Bạn có thể sử dụng mẫu
.*
3.6. Câu hỏi về ký tự đặc biệt
3.7. Đầu dòng - cuối dòng
Các ký hiệu liên quan đến đầu dòng, cuối dòng
Ký hiệu
^
thể hiện bắt đầu một dòng^T
sẽ khớp với: Ta điKết luận ký hiệu này có 3 ý nghĩa
Nếu ở trong
[]
có nghĩa là ngoại trừ, phủ địnhNếu ở ngoài
[]
thì ý nghĩa là bắt đầu câuNếu đứng sau
\
:\^
thì có ý nghĩa là ký tự^
Ký hiệu
$
thể hiện kết thúc dòngp$
sẽ khớp với: Hoa đẹp
\b
là biên của từ. Một từ trong biểu thức chính quy bao gồm chữ, số hoặc dấu gạch chân _. Khi chuỗi các ký tự liền nhau phân cách bởi những ký tự không thuộc chữ, số hoặc gạch chân sẽ hình thành nên biên của từ.\bchúa\b
sẽ khớp với: Công chúa trong rừngChú ý:
\b122\b
khớp: Số 122 nhưng\b22\b
lại không khớp Số 122
\B
là biên không phải từ.\B-\B
sẽ khớp với: Bá Ngoc - lazy boy
3.8. Toán tử chia cách, nhóm, ưu tiên
1) Toán tử chia cách (Disjunction)
Bạn muốn tìm từ vàng hoặc kim cương. Bạn có thể sử dụng toán tử hoặc |
như sau
vàng|kim cương
Ngoài các kênh đầu tư thông thường như vàng, chứng khoán, bất động sản thì kim cương cũng được coi là một kênh đầu tư hiệu quả. Vậy nếu cùng là tài sản trú ẩn, kim cương có tăng giá không? Giá của kim cương có bị biến động như giá vàng không? Hãy cùng Tierra giải đáp thắc mắc về giá kim cương nhé!
Tuy nhiên nếu bạn muốn tìm được cả
Quyên và Quyến
bạn sẽ cần sử dụng ()
với mẫu Quy(ên|ến)
2) Phép ưu tiên
Thứ tự ưu tiên giảm dần
Ngoặc tròn ()
Bộ đếm
Toán tử *
Toán tử +
Toán tử ?
Số lượng xuất hiện {}
Chuỗi và mỏ neo: ánh
^
hoàng hôn$
Phép hoặc
|
Ví dụ mẫu (hoàng)*
sẽ có thứ tự ưu tiên như sau
()
sẽ coi hoàng là một ký tự*
sẽ đếm có bao nhiêu ký tự trong()
Kết quả: hoàng hoàng hôn
Chú ý: Biểu thức chính quy sẽ cố gắng khớp chuỗi dài nhất có thể, đây là kỹ thuật tham lam(Greedy). Để ép việc không sử dụng tham lam, ta có thể sử dụng phép *?
. Phép này sẽ cố gắng khớp chuỗi ngắn nhất có thể.
3.9. Câu hỏi về toán tử chia cách
3.10. Chuỗi đại diện
3.11. Câu hỏi về \s
3.12. Toán tử đếm
3.13. Luyện tập toán tử đếm
3.14. Loại bỏ ký tự đặc biệt
Trong một số trường hợp ta cần biến các phép thành ký tự thông thường để tìm kiếm. Ví dụ bạn muốn tìm các câu bắt đầu bằng +. Nếu để + không trong mẫu sẽ là đếm. Vì thế ta sẽ thêm \
phía trước để coi + như ký tự thông thường.
Giả sử với văn bản
+ Có kinh nghiệm làm việc với nước ngoài
+ Có trên 3 năm kinh nghiệm
Bạn sử dụng mẫu sau
^\+[ |\S]+
Giải thích
Bắt đầu bằng ký tự +
Tiếp theo có một hoặc nhiều khoảng trắng hoặc các ký tự không phải khoảng trắng. Đồng nghĩa với việc tìm tất cả ký tự đằng sau. Trường hợp này dùng như vậy mà không dùng
\w
vì trong câu có văn bản Tiếng Việt.\w\
chỉ tìm ra được các chữ trong Tiếng Anh.
Một số cách dùng
\*
Dấu * thông thường.
Mẫu
\*
khớp: Mật khẩu hiện tại ******
\.
Dấu . thông thường
Mẫu
\.
khớp: Chấm câu sắp tới. Lại chấm câu .
\?
Dấu ? thông thường
Mẫu
\?
khớp: Sắp đến Noel chưa?
\n
Xuống dòng
Mẫu
\n
khớpTình hình việc làm
Thị trường lao động mạnh mẽ là chiến thắng lớn nhất của Nhà Trắng. Ở một khía cạnh nào đó, điều này phần nào nhờ Biden nhậm chức lúc hàng triệu người mất việc vì đại dịch. Dù vậy, tốc độ tăng việc làm những năm gần đây đã vượt xa kỳ vọng các chuyên gia, thúc đẩy nền kinh tế tăng trưởng vượt bậc.
\t
Tab
Mẫu
\t
khớpx = 1
y = 2
if x == 3:
print(y)
\/
Dấu / thông thường trong một số ngôn ngữ là ký hiệu đặc biệt ví dụ Javascript viết mẫu sẽ gói trong /pattern/ nên khi muốn tìm dấu / trong các văn bản thì mẫu sẽ là /\//
Mẫu
\/
khớp: Số nhà 17/287/33/12
3.15. Capture Groups
Giải thích chi tiết Capturing Groups trong biểu thức chính quy
1) Giải thích khái niệm Capturing Groups
Ví dụ bạn muốn tìm mẫu
Hà đang đi trên đường, Hà đâm vào ổ gà
Bà đang đi trên đường, Bà đâm phải ổ gà
Tức là ràng buộc hai từ Hà phải giống nhau mà không cần phải viết mẫu 2 lần thì bạn sử dụng mẫu sau
(.*)à đang đi trên đường, \1à đâm phải ổ gà
Giải thích
Mẫu
.*
đại diện cho một chuỗi dài bất kỳ, trường hợp này là bao nhiêu ký tự trướcà
đều khớp. Sẽ đúng với Hà, Gà, Già, vvMẫu này được gói trong
()
thành(.*)
đại diện cho khái niệm nhóm Capturing Group. Khi group này đã khớp ví dụ từ Hà thì từ Hà này sẽ được lưu lại và sử dụng thông qua ánh xạ backreference\1
.Ví dụ group
(.*)à
khớp từ Hà trước thì toàn mẫu sẽ trở thànhHà đang đi trên đường, Hà đâm phải ổ gà
Ví dụ group
(.*)à
khớp từ Bà trước thì toàn mẫu sẽ trở thànhBà đang đi trên đường, Bà đâm phải ổ gà
2) Mẫu có nhiều Capturing groups
Ví dụ mẫu
(.*)à đang đi trên đ(ường), \1à đâm phải bờ t\2
khớp với câu
Bà đang đi trên đường, Bà đâm phải bờ tường
như sau:
Nhóm Capturing Group 1 -
(.*)
đã khớp từ B trong Bà cho nên ánh xạ\1
sẽ là BNhóm Capturing Group 2 -
(ường)
đã khớp từ ường trong đường, ánh xạ\2
sẽ là ường
3.16. Non-capturing group
Chi tiết non-capturing group
Với capture group bạn có thể lưu lại mẫu đã tìm ra và sử dụng lại. Tuy nhiên trong một số trường hợp bạn không muốn group được nhắc lại thông qua 1\
hoặc 2\
thì bạn có thể sử dụng mẫu ?:
để loại trừ group hiện tại
(?:.*)à đang đi trên đ(ường), \1à đâm phải bờ tường
Với trường hợp này mẫu (?:.*)
là một non-capturing group không được theo dõi.
\1
sẽ theo(ường)
Phân tích một ví dụ
Hãy xem xét ví dụ dưới đây
(?:\-{2,}|\.{2,}|(?:\.\s){2,}\.)
Đây là một mẫu giúp bạn có thể tìm ra các dấu của văn bản như dấu -
với số lượng nhiều hơn 2 hay dấu chấm theo sau bởi dấu cách .
với số lượng nhiều hơn 2.
Mẫu này khớp các chuỗi sau:
Chuỗi 1:
--
hoặc---
Chuỗi 2:
. . .
hoặc. . . .
3.17. Phép thế - Substitution
3.18. Lookahead assertions
4. Bài tập thực hành
4.1. Bài tập lọc email và thay thế
Giả sử bạn cần build một mô hình sinh các văn bản viết yêu cầu tuyển dụng như dưới.
Mô tả công việc
- Thực hiện vai trò trưởng nhóm các nhóm kiểm toán đối với các Đơn vị kinh doanh có Quy mô tương ứng với cấp II, III, IV theo mô hình cơ cấu tổ chức từng thời kỳ của ABBANK.
- Thực hiện kiểm toán liên tục đối với toàn bộ hoạt động của các Khối và Đơn vị kinh doanh;
- Thực hiện kiểm toán các Khối và Đơn vị kinh doanh theo kế hoạch năm đã được phê duyệt.
- Thực hiện kiểm toán đột xuất các đơn vị/quy trình có đánh giá mức độ rủi ro cao dựa trên kết quả kiểm toán liên tục đối với hoạt động của các Khối và Đơn vị kinh doanh và theo chỉ đạo của Ban kiểm soát;Yêu cầu ứng viên
- Có bằng đại học trở lên về một trong các ngành kinh tế, quản trị kinh doanh, luật, kế toán, kiểm toán;
- Có 02 năm kinh nghiệm làm việc trực tiếp thuộc một trong các ngành ngân hàng, tài chính, kế toán, luật và tối thiểu 2 năm đối với ngành kiểm toán;
- Ưu tiên ứng viên có kinh nghiệm kiểm toán về tín dụng.
- Có khả năng giao tiếp, khả năng làm việc độc lập; làm việc nhóm hiệu quả.
- Có khả năng đóng góp ý tưởng, sáng kiến cải tiến trong công tác kiểm toán.
- Ưu tiên có kinh nghiệm Trưởng nhóm kiểm toán.Quyền lợi
- Thu nhập cạnh tranh.
- Chương trình vay ưu đãi (lãi suất hấp dẫn) dành cho cán bộ nhân viên ABBANK.
- Môi trường năhng động và sáng tạo, pát huy tối đa năng lực bản thân, điều kiện làm việc tốt, đầy đủ phương tiện, thiết bị, có cơ hội tham gia đào tạo, thăng tiến, phát triển sự nghiệp.
- Tham dự các hoạt động văn hóa: Team building, hội thao, văn nghệ...;
- Chế độ nghỉ phép 12 ngày/năm + ngày nghỉ sinh nhật hưởng nguyên lương;
- Môi trường năng động và sáng tạo, pát huy tối đa năng lực bản thân, điều kiện làm việc tốt, đầy đủ phương tiện, thiết bị, có cơ hội tham gia đào tạo, thăng tiến, phát triển sự nghiệp.
- Top 100 nhà tuyển dụng được yêu thích nhất năm 2020 – 2021 theo khảo sát từ CareerBuilder. Email liên hệ: protonxai@gmail.com. Đừng ngần ngại liên hệ nhé!!!
Tuy nhiên trong các văn bản này chứa email của công ty nên chúng ta cần che đi và thay thế bằng [Hãy nhập email của bạn]
Cụ thể câu đầu vào:
- Top 100 nhà tuyển dụng được yêu thích nhất năm 2020 – 2021 theo khảo sát từ CareerBuilder. Email liên hệ: protonxai@gmail.com. Đừng ngần ngại liên hệ nhé!!!
sẽ được sửa thành
- Top 100 nhà tuyển dụng được yêu thích nhất năm 2020 – 2021 theo khảo sát từ CareerBuilder. Email liên hệ:[Hãy nhập email của bạn]. Đừng ngần ngại liên hệ nhé!!!
Hãy đề xuất biểu thức chính quy có khả năng làm việc này.
4.2. Lời giải
4.3. Chuẩn hóa theo lùi đầu dòng
4.4. Lời giải
5. Video NLP 01
5.1. Video
6. NLP 02
6.1. Video
Giới thiệu về lớp học NLP
Xu hướng NLP hiện đại
Biểu thức chính quy