5. TÌM HIỂU MỘT SỐ CHỨC NĂNG TRONG NLTK
5.4.4. The Left-Corner Parser
Một trong những vấn đề với recursive descent parser là nó đi vào một vòng lặp vô hạn khi nó gặp một luật đệ quy bên trái. Điều này là bởi vì nó áp dụng các luật văn phạm mù, mà không xem xét câu đầu vào thực tế. Left-corner parser là một phương pháp lai giữa các phương pháp tiếp cận bottom-up và top-down mà chúng ta đã thấy.
Văn phạm định nghĩa trong phần đầu cho phép phân tích ra cú pháp của câu “John
saw Mary”
Giả sử chúng ta cụ thể các luật sinh cho NP (NP -> "John" | "Mary" | "Bob" | Det N | Det N PP
) thành như sau
a. NP Det N
b. NP Det
c. NP Non , chú ý Non = "John" | "Mary" | "Bob"
Giả sử nhìn vào cây cú pháp sau khi phân tích ở trên, và quyết định luật nào sẽ được áp dụng đầu tiên, dĩ nhiên luật c là lựa chọn đúng. Làm sao chúng ta biết nó là lựa chọn đúng nếu không thử qua các luật a,b ? Bởi vì luật này phần tử đầu tiên là ‘John’ khớp với câu đầu vào. Bộ phân tích sẽ mở rộng theo cách mà NP xuất phát từ chuỗi ‘John’ α. Một cách tổng quát hơn chúng ta nói rằng từ loại B là left-corner của cây có gốc từ A nếu A *B α.
Left-corner parser là top-down parser với việc lọc từ bottom-up. Nó sẽ khắc phục được các nhược điểm trong phương pháp top-down (luật đệ quy bên trái (NP -> NP PP), đồng thời cũng tránh việc tìm những phần tử ứng cử không chính xác).
Trước khi bắt đầu công việc, left-corner sẽ tiền xử lý văn phạm để xây dựng một bảng tra(table) mà mỗi dòng chứa 2 cột: cột đầu là kí hiệu không kết thúc(non- terminal), và cột thứ 2 là tập hợp các phần tử bên trái cùng (B) của mệnh đề bên phải của các non-terminal đó.
Ví dụ:
Mỗi khi một luật được xem xét bởi bộ phân tích, nó sẽ kiểm tra từ kế tiếp của câu có tương thích với ít nhất một pre-terminal trong bảng left-corner.