Phân tích cú pháp là một vấn đề cơ bản và quan trọng trong xử lý ngôn ngữ tự nhiên. Với một công cụ phân tích cú pháp tốt, chúng ta có thể tích hợp vào nhiều ứng dụng trong xử lý ngôn ngữ tự nhiên như dịch máy, tóm tắt văn bản, các hệ thống hỏi đáp, để tăng tính chính xác của các ứng dụng đó. Trong đề tài này, chúng tôi đề xuất mô hình phân tích cú pháp sử dụng văn phạm phi ngữ cảnh CFG (Context Free Grammar). Văn phạm này có thể được mô tả b ng ký pháp BNF (Backus Naur Form). BNF viết tắt từ Backus-Naur Form, là một trong những ngôn ngữ mô tả cú pháp thông dụng nhất hiện nay. BNF là một dạng toán học hình thức d ng để mô tả ngôn ngữ, được John Backus phát triển và được Peter Naur cải tiến thêm để mô tả cú pháp của ngôn ngữ lập trình (Algol 60).
2.2.2.1 Văn phạm phi ngữ cảnh BNF
Văn phạm phi ngữ cảnh BNF là một tập hợp hữu hạn các biến (còn gọi là các ký hiệu kết thúc và chưa kết thúc) và các luật sinh, trong đó mỗi biến biểu diễn một luật sinh. Luật sinh biểu diễn bởi các biến được mô tả một cách đệ quy theo thuật ngữ của một khái niệm khác gọi là ký hiệu kết thúc. Quy tắc quan hệ giữa các biến gọi là luật sinh. Mỗi luật sinh có dạng một biến ở vế trái sinh ra một chuỗi có thể gồm biến lẫn các ký hiệu kết thúc trong văn phạm.
Ví dụ về: Biểu diễn số thập phân bằng ký pháp BNF
<Số> → ‟-‟<Số thập phân>|<số thập phân>
<Số thập phân> → <Dãy chữ số>|<Dãy chữ số>‟.‟<Dãy chữ số> <Dãy chữ số> → <Chữ số>|<Chữ số><Dãy chữ số>
2.2.2.2 Văn phạm phi ngữ cảnh EBNF
EBNF (Extended BNF ) được phát triển từ ký pháp BNF. EBNF có ký pháp tương tự BNF nhưng được đơn giản hoá b ng cách sử dụng một số ký hiệu đặc biệt :
o [] phần này là tuỳ chọn (có hoặc không)
o {} phần này có thể lặp lại một số lần tuỳ ý hoặc không xuất hiện lần nào (Nếu lặp lại m hay n lần , d ng n hay m là chỉ số trên hoặc dưới)
o Không cần d ng „‟ cho ký hiệu kết thúc
Ví dụ về: Biểu diễn số thập phân bằng ký pháp BNF
<Số> → [-]<Số thập phân>
<Số thập phân> → <Dãy chữ số>[.][<Dãy chữ số>] <Dãy chữ số> → <Chữ số>{<Dãy chữ số>}
<Chữ số> → ‟0‟|‟1‟|‟2‟|‟3‟|‟4‟|‟5‟|‟6‟|‟7‟|‟8‟|‟9‟
Cả hai mô tả trên cho c ng một ngôn ngữ (thực ra cú pháp tương tự), nhưng cú pháp đầu tiên sử dụng nhiều luật sinh hơn.
2.2.2.3 Ứng dụng BNF vào phân tích câu Tiếng Việt trong phạm vi đề tài a. Tập các luật sinh cơ bản
Để xây dựng mô hình cú pháp phục vụ cho việc xử lý câu truy vấn tự nghiên b ng ngôn ngữ tiếng Việt, trong luận văn đề xuất tập các luật sinh viết theo cú pháp EBNF trong lĩnh vực đang thực hiện như sau:
<Teacher> → [<Chuc_Danh>]<Ho_Ten>
<Chuc_Danh> → Ông | Bà | Thầy | Cô | Giáo Viên | Giảng Viên | K sư | KS | Cử Nhân | CN | Thạc Sĩ | ThS | Tiến sĩ | TS | Giáo sư | GS | Phó giáo sư | PGS
<Ho_Ten> → <name>{<name>} <name> → <letter>{<letter>}
<letter> → A|Á|Â|Ă|Ả|Ã|Ạ|À|B|C|D|E|É|È|Ẻ|Ẽ|Ẹ|Ê|F|G|H|I|J|K |L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|a|b|c|d|e|f|g|h|i|j| k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|
<Student> → [<Nhân Xưng>]<Họ tên>
<Nhân xưng> → Tôi | em | Chúng Tôi | Chúng em...
<Động từ> → giảng | giảng bài | Hướng dẫn | Giải Thích | Cung Cấp | Công Bố | Tham Khảo | Sử Dụng | Dưa Ra | Nêu ra | Liên Quan | Thảo Luận | Trao đổi | Thu hút | Tổ Chức | Dạy | Cư xử
<Động tử sở hữu>
→ Của
<Động từ - Sở hửu> → Của | Có <Động từ - Quá khứ> → Đã | Từng | Đã Từng <Động từ - Bị động> → Được | Do | Bị
<Tính từ> → Dễ hiểu | Rõ ràng | Tốt | Nhiệt tình | Rõ | Đẹp | Sôi nổi | Nghiêm khắc | Khó | Khó tính | Đúng | Chính xác | Hay | Đầy đủ
<Từ nối và> → Và | Lẫn | C ng | C ng với <Từ nối hoặc> → Hoặc | Hoặc là | Hay là
<Bổ từ> → Những | Vài | Một vài | Các | Nhiều | Phần | Một phần
<Thời gian> → Vào | Vào lúc | Sau | Trước | Trong | Trong khi
<Danh tu> → Nhân viên | Giáo trình | Bài giảng | Môn học | Tài liệu | Phương tiện | Đề cương | Tác phong | Hình thức | Thái độ | Thời gian | Số tiết | Vấn đề | Tự học
<Từ nối> → Cho | Với
… … …
Tập ví dụ các câu nhận xét đƣợc mô tả bằng BNF
o Giảng viên giảng bài dễ hiểu
BNF: <Chuc_Danh><động từ><Tính từ> o Giảng viên giải thích vấn đề rõ ràng
BNF: <Chuc_Danh><động từ><danh từ><Tính từ> o Môn học có giáo trình và tài liệu tham khảo đầy đủ
BNF: <danh từ><Động từ - Sở hửu><danh từ><Từ nối và><danh từ><Tính từ>
o Giảng viên sử dụng tốt các phương tiện giảng dạy
BNF: <Chuc_Danh><Động từ ><Tính từ>[<Bổ từ>]<danh từ> o Phần tự học được giảng viên hướng dẫn tốt
BNF: [<Bổ từ>]<Danh Từ> <Động từ - Bị động><Chức danh><Động từ><Tính Từ>
o Bài giảng của giáo viên thu hút việc học của sinh viên
BNF: <Danh Từ>[<Động từ sở hữu>]<Chức Danh>[<Động từ - Be>]<Tính Từ><Danh Từ>[<Động từ - Sở hửu>]<Danh Từ>
BNF: <Chức danh><Động từ><Tính từ><Danh từ> o Giảng viên không có tác phong tốt
BNF: <Chức danh>[<Phủ định>]<Động từ - Sở hửu><Danh từ><Tính từ>
o Giáo viên không tổ chức cho sinh viên hoạt động nhóm
BNF: <Chức danh>[<Phủ định>]<Động từ ><Từ nối><Danh từ><Động từ><Danh từ>
o Tôi hài lòng với chất lượng giảng dạy của môn học
BNF: <Nhân xưng>[<Động từ - Be>]<Tính từ><từ nối><Tính từ><danh từ><động từ sở hữu><Danh từ>
b. Kiểm tra cú pháp câu
o Nhận diện từ vựng
Xây dựng CSDL gồm các bảng sau:
tblThuVienTu(MaTu, Tu, MaTuLoai) tblTuLoai(MaTuLoai, TuLoai)
Trong đó table tblThuVienTu (được mô tả trong bảng 2.1) chứa các từ có thể xuất hiện trong những câu đánh giá. Mỗi từ gồm 2 thành phần là « Tu » mang nội dung của từ và MaTuLoai để phân loại, xếp loại từ. Thực chất đây là bảng dữ liệu chứa các ký tự kết thúc được sinh ra từ các luật sinh
Bảng 2.1 Bảng liệt kê thư viện từ
Mã Từ Từ Mã Từ Loại
1 Thầy Chức Danh
2 Cô Chức Danh
3 Giáo viên Chức Danh
4 Thạc sĩ Chức Danh 5 Tiến sĩ Chức Danh 6 K sư Chức Danh 7 Ông Chức Danh 8 Bà Chức Danh 9 Cử nhân Chức Danh
10 Nhân viên Danh từ
11 Quản sinh Chức Danh
12 giảng bài Động từ 13 giảng Động từ 14 hướng dẫn Động từ 15 giải thích Động từ 16 cung cấp Động từ 17 công bố Động từ 18 dễ hiểu Tính từ 19 rõ ràng Tính từ 20 tốt Tính từ 21 đầy đủ Tính từ 22 nhiệt tình Tính từ 23 những Bổ từ 24 Vài Bổ từ 25 một vài Bổ từ 26 vấn đề Danh từ
27 Vào Thời gian
28 vào lúc Thời gian
29 Sau Thời gian
Dữ liệu từ có thể được cập nhật danh sách từ mới. Thư viện dữ liệu càng chi tiết, phân loại càng chính xác sẽ giúp quá trình phân tích câu được hoành chỉnh hơn
c. Thuật toán phân tích từ dùng BNF
Để phân tích từ dựa vào BNF trong luận văn này đề xuất thuật toán như trên hình 2.3. Bao gồm các bước:
- Bƣớc 1: Cắt khoảng trắng dư bên trái, bên phải và khoảng trắng dư ở giữa câu (nếu có hơn 1 khoảng trắng)
- Bƣớc 2: Phân tích câu thành từng từ riêng biệt dựa vào khoảng trắng giữa các từ
- Bƣớc 3: Duyệt danh sách từ cho đến khi danh sách không còn từ nào
Lấy danh sách từ đề cử trong thư viện từ mà gần giống với từ đang xét (danh sách các từ có các ký tự bắt đầu b ng với từ đang xét)
Nếu có:
Lần lượt xét các từ kế tiếp. Chọn ra cụm từ dài nhất trong câu mà có trong thu viện từ
Ghi nhận cụm từ mới với Tên và Từ loại của nó
Nếu không có :
Ghi nhận từ đang xét Thuộc từ loại chưa xác định
- Bƣớc 5: Quay lại bước 1 với câu được xét là câu vừa mới được cắt bỏ
Hình 2.3 Thuật toán phân tích từ d ng BNF Begin Trim(Cau) 1 5 Cau<>“” Dstu=split(cau, “ ”); I=0 I<dstu.length Dstu(i) có trong thư viện từ TuCoNghia+=dstu(i) Tudangxet=dstu(i)+dstu(i+1) I+=1 Ghi nhận TuCoNghia Cau=cau.remove(TuCoNghia) End 2 3 4 3 Đúng Sai Ghi nhận từ không xác định; Cau=cau.remove(Dstu(0))