Phân tích cú pháp (Parsing)
Quá trình phân tích dữ liệu văn bản theo quy tắc cú pháp và chuyển đổi thành dữ liệu có cấu trúc. Là kỹ thuật không thể thiếu trong xử lý mọi định dạng văn bản như HTML, JSON, CSV và biểu thức chính quy.
Phân tích cú pháp (parse, parsing) là quá trình chuyển đổi dữ liệu văn bản dạng chuỗi thành dữ liệu có cấu trúc mà chương trình có thể xử lý. Trình duyệt chuyển chuỗi HTML thành cây DOM, JSON.parse() chuyển chuỗi JSON thành đối tượng, xử lý tệp CSV thành hàng và cột - tất cả đều là ví dụ cụ thể của parsing.
Quy trình parsing cơ bản gồm 2 giai đoạn. Giai đoạn đầu là phân tích từ vựng (lexical analysis), chia chuỗi thành các token (đơn vị có nghĩa nhỏ nhất). Với HTML, đó là tách thành thẻ như "<p>", "văn bản", "</p>". Giai đoạn hai là phân tích cú pháp (syntactic analysis), kiểm tra xem chuỗi token có tuân theo quy tắc ngữ pháp không và xây dựng cấu trúc cây (parse tree).
Phân tích văn bản tiếng Việt có những thách thức riêng. Khác với tiếng Anh có khoảng trắng rõ ràng giữa các từ, tiếng Việt tuy viết rời nhưng ranh giới từ không phải lúc nào cũng rõ ràng. "Ông già đi nhanh" có thể hiểu là "ông già / đi nhanh" hoặc "ông / già đi / nhanh" tùy ngữ cảnh. Các công cụ tách từ tiếng Việt như VnCoreNLP, Underthesea sử dụng từ điển và mô hình thống kê để xác định cách phân tách tự nhiên nhất.
Lỗi parsing thường liên quan đến ký tự. Chuỗi JSON chứa ký tự xuống dòng chưa được escape sẽ gây lỗi parsing. Trong CSV, nếu giá trị chứa dấu phẩy mà không được bao bởi dấu ngoặc kép, ranh giới trường sẽ bị nhận sai. Trong HTML, không escape < hay & sẽ bị nhầm là thẻ mở và parsing bị lỗi. Với văn bản tiếng Việt, các dấu thanh đôi khi gây vấn đề khi parsing nếu mã hóa không nhất quán giữa NFC và NFD.
Về hiệu năng, parsing là xử lý tốn tài nguyên tính toán. Parsing một tệp JSON lớn (hàng chục MB) bằng JSON.parse() sẽ chặn luồng chính và làm đóng băng giao diện. Sử dụng streaming parser cho phép đọc và parsing dữ liệu từng phần, giảm thiểu sử dụng bộ nhớ.
Bên trong công cụ đếm ký tự, parsing cũng là xử lý cốt lõi. Loại bỏ thẻ HTML khỏi văn bản đầu vào, nhận diện các phần tử cú pháp Markdown, phát hiện URL và địa chỉ email - tất cả đều là ứng dụng của parsing. Đếm ký tự chính xác chỉ có thể đạt được khi parsing cấu trúc văn bản đúng cách.