Tách từ, tách câu
Giai đoạn này thực hiện tách từ, tách câu theo ngữ pháp tiếng Việt. Sau khi thực hiện các câu được phân biệt với nhau bởi dấu “.”; các từ phân cách nhau bởi một ký tự trắng, các từ ghép có các từ đơn nối với nhau bởi dấu gạch dưới (Hình 2.4).
Hình 2.4. Các câu sau khi tách trong cửa sổ nhỏ góc dưới bên trái
Module Tách từ, tách câu được xây dựng câu dựa trên mã nguồn mở vnTokenizer của Lê Hồng Phương, Khoa Toán-Cơ-Tin học, Trường Đại học Khoa học Tự nhiên, ĐHQG Hà Nội, Việt Nam.
Chuẩn hóa văn bản
Văn bản đưa vào xử lý được chuẩn hóa theo bảng mã Unicode UTF-8. Học viên xây dựng module Chuẩn hóa văn bản để loại bỏ các từ dừng, ký hiệu
lạ, chuẩn hóa việc bỏ dấu, chuẩn hóa ký tự... nhằm giảm thiểu kích thước vector đại diện câu trong giai đoạn sau (Hình 2.5).Ngoài ra, chương trình tóm tắt văn bản thực nghiệm của luận văn còn có các module cho phép xác định ký tự vô ích, module xác định từ dừng (Stop Word8) tự động và bằng tay cho phép xây dựng danh mục ký tự vô ích, danh mục từ dừng một cách linh hoạt (Hình 2.6).
Hình 2.5. Văn bản sau khi chuẩn hóa
Hình 2.6. Xác định từ dừng và ký tự vô ích
Quá trình vector hóa văn bản và các câu theo tần suất từ và theo chủ đề ẩn thực hiện như sau:
Input: D - văn bản gốc đã được tách từ, tách câu và chuẩn hóa
Output: vd, vsi; i = 1, 2, ..., m - Danh sách vector đại diện cho văn bản và các câu theo tần suất từ
Phương pháp thực hiện:
// xác định số chiều (kích thước) của vector đại diện cho văn bản và các câu
vl= // vl - danh sách các từ để tạo nên văn bản D
Lặp với i = 1 đến n thực hiện // n - tổng số từ trong văn bản D
Nếu wivl thì add(vl, wi) // thêm từ wi vào vl
// vector hóa văn bản D theo tần suất từ
Khởi tạo vd // vd - danh sách có số phần tử bằng số phần tử của vl và
// mỗi phần tử có giá trị bằng 0
Lặp với i = 1 đến n thực hiện // n - tổng số từ trong văn bản D
j = post(vl, wi) // xác định vị trí từ wi trong vl; i = 1, 2, ..., n dec(vd, j) // tăng vị trí thứ j của danh sách vd lên 1
// vector hóa các câu của văn bản D theo tần suất từ
Lặp với i = 1 đến m thực hiện // m - số câu của văn bản D
Khởi tạo vsi // vsi - danh sách có số phần tử bằng số phần tử của
// vl và mỗi phần tử có giá trị bằng 0; i = 1, 2, ..., m Lặp với t = 1 đến s thực hiện // s - tổng số ký tự trong câu si
k = post(vl, wt) // xác định vị trí từ wt trong vl; t = 1, ..., n dec(vsi, k) // tăng vị trí thứ k của danh sách vsi lên 1
Sau quá trình vector hóa như trên chúng ta thu được một danh sách vector đại diện cho toàn văn bản và các câu theo tần suất từ (xem ví dụ 2.1.3).
Như đã phân tích tại mục 2.1.4, chúng ta tiếp tục vector hóa văn bản và các câu theo phân tích chủ đề ẩn LDA qua công cụ JGibbsLDA9 của Phan Xuân Hiếu, Graduate School of Information Sciences, Tohoku University và Nguyễn Cẩm Tú, Đại học Công nghệ, Đại học Quốc gia Hà Nội. Kết quả thu được một danh sách vector đại diện cho toàn văn bản và các câu theo chủ đề ẩn.
2.2.2. Giai tạo danh sách câu khả dụng Ví dụ 2.2.2: Xét văn bản D như sau